Logstash转发器缺少频繁滚动日志文件的日志事件。
我的java应用程序有很多批处理作业和实时数据源。基本上它是一个企业集成应用程序。
我的应用程序为每个批处理作业创建日志文件,并使用log4j2作为日志记录框架。 log4j2是自定义的,可以根据我通过bash脚本调用提供的feed名称动态创建日志文件,并使用log4j2路由适配器创建日志文件。
这是log4j2配置。
<?xml version="1.0" encoding="UTF-8"?> <Configuration xmlns="http://logging.apache.org/log4j/2.0/config" shutdownHook="disable"> <Properties>
<Property name="log-path">${env:LOGPATH}</Property> </Properties> <Appenders>
<Routing name="RoutingAppender" ignoreExceptions="true">
<Routes pattern="${ctx:logFileName}">
<Route>
<RollingFile name="${ctx:logFileName}"
fileName="${log-path}/${ctx:logFileName}.log"
filePattern="${log-path}/${ctx:logFileName}_%i.log.gz">
<BurstFilter level="DEBUG" rate="16" maxBurst="100"/>
<PatternLayout pattern="%d{MM-dd-yyyy HH:mm:ss,SSS}|%level|[%thread]|[${env:USERNAME}]|[%C]|- %msg%n"/>
<SizeBasedTriggeringPolicy size="50MB" />
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Route>
</Routes>
</Routing> </Appenders> <Loggers>
<Root level="INFO">
<AppenderRef ref="RoutingAppender"/>
</Root> </Loggers> </Configuration>
此配置工作正常,并根据提供的loggerFile名称创建日志文件。
很少有批处理作业运行更长时间并处理数百万个数据。业务要求是捕获流经我的应用程序的数据并将其记录以供审计。
但是,对于大多数作业,我没有看到任何日志事件因大多数Feed而丢失。但是,由于处理的数据量大,基于汇总的情况每3分钟发生一次,因此会丢失一些日志事件。
我可能无法增加 sizeBasedTriggeringPoicy ,因为在任何给定时间可能有超过1500个Feed处理,并且增加 sizeBasedTriggeringPolicy可能会导致磁盘空间问题。
这是我的logstash转发器配置
{
"network": {
"servers": [ "Server1:5004","Server2:5004","Server3:5004"],
"ssl certificate": "./certs/logstash.crt",
"ssl key": "./certs/logstash.key",
"ssl ca": "./certs/logstash.crt",
"timeout": 15
},
"files": [
{
"paths": [
"/opt/logs/*.log"],
"fields": { "type": "application" },
"dead time": "10m"
}
]
}
以下是为logstash转发器设置的参数
./logstash-forwarder -quiet=true -config=./logstash-forwarder.conf
Kibana,显示证据,每2分钟收到一次日志。但我的应用程序正在连续处理数据,并可以看到我的日志文件中记录的事件。 根据我的分析,我发现以前滚动文件的偏移量被用于当前日志文件中
应该将哪些配置添加到logstash转发器以捕获所有日志事件。
我试过-tail = true,但没有用。
我使用的是0.4.0版本的logstash-forwarder,我的操作系统是RHEL 5.X
答案 0 :(得分:0)
在提出这个问题时,FileBeats正在开发中。弹性团队建议使用FileBeats作为logstash-forwarder将是日落。