linux - 如何使用Rsyslog将Spring Batch远程分区应用程序日志从所有服务器收集到一台服务器?

标签 linux logging spring-batch logstash rsyslog

我有一个用例,其中我的日常批处理应用程序(使用远程分区的 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/

相关文章:

Spring Batch 编写器取决于已处理的项目

java - 使用 ESP Scheduler 进行 Spring 批量调度

linux - 如何计算 GPU 负载

Java运行时异常: Unable to create lock manager

java - 在linux-Fedora core上编译JNI程序?

Android:应用内购买 - Google Analytics

java - Log4J 未正确归档日志

ruby - 升级到 Ruby 2.0,在没有提示的情况下覆盖可执行文件

c++ - text_multifile_backend 如何为文件名设置动态日期

spring - 并行 Spring 批处理作业的推荐方法