我有一个用例,其中我的日常批处理应用程序(使用远程分区的 Spring Batch Java 应用程序)部署到 4 台服务器,并且应用程序在日常批处理文件夹中创建日志文件。
例如批处理 ID 为 2014-07-15 的批处理将日志存储在/var/log/myapp/2014-07-15/batch.log
我想从所有服务器收集日志并收集在主服务器上的一个日志文件中(主服务器是 4 台服务器之一)。
我正在尝试使用 Rsyslog 来实现此目的。但如果还有其他更好的解决方案,请提出。
1) 如何从动态路径的/var/log/myapp/2014-07-15/batch.log 文件中读取日志并发送给 master ?
2) 如何收集来自 myapp 应用程序的所有服务器的日志并将其存储在主服务器上的日志文件/var/log/myapp/2014-07-15/batch.log 中(该批处理的所有服务器上的日志文件路径都相同)。
我已引用此处的文档和指南
http://www.rsyslog.com/guides-for-rsyslog/
但无法理解如何将从文件读取的日志发送到其他服务器?虽然我发现如何使用动态路径
$template DynFile,"/var/log/%HOSTNAME%/%programname%.log"
我是 rsyslog 的新手,因此将所有这些信息放在一起来实现我的用例有点困难。如果有人能指导我实现这一目标,那将是很大的帮助。
类似这样的事情吗?
#On master server
$ModLoad imtcp
$InputTCPServerRun 10514
$template DynFile,"/var/log/$now/batch.log"
# where $now The current date stamp in the format YYYY-MM-DD
# referred this - http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/rsyslog-3.19.7/doc/property_replacer.html
if syslogtag isequal "myapp" then ?DynFile
#On slaves machins
$template DynFile,"/var/log/$now/batch.log"
module(load="imfile" PollingInterval="10")
input(type="imfile" File=?DynFile Tag="myapp" StateFile="/var/spool/rsyslog/statefile1")
. @@[SERVER_IP]
另外,StateFile 应该如何配置,因为不同的批处理会有不同的批处理日志文件,因此他们应该为每个批处理日志文件使用不同的 StateFile ?如何配置动态状态文件?
最佳答案
您可能想查看logstash 项目(又名ELK 堆栈)。它使您的日志管理变得更加愉快,并且为您提供了一些非常有用的搜索功能。
关于linux - 如何使用Rsyslog将Spring Batch远程分区应用程序日志从所有服务器收集到一台服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24756575/