1

Logstash 转发器缺少频繁滚动日志文件的日志事件。

我的 java 应用程序有很多批处理作业和实时数据馈送。基本上它是一个企业集成应用程序。

我的应用程序为每个批处理作业创建日志文件,并使用 log4j2 作为日志框架。log4j2 被定制为根据我通过 bash 脚本调用提供的提要名称动态创建日志文件,并使用 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 名称创建日志文件。

很少有批处理作业可以运行更长时间并处理数百万个数据。业务需求是捕获流经我的应用程序的数据并将其记录下来以供审计。

但是,对于大多数工作,我没有看到大多数提要丢失任何日志事件。但是对于某些提要,基于大小的汇总每 3 分钟发生一次。由于处理的数据量大,有日志事件丢失。

我可能无法创建 sizeBasedTriggeringPoicy因为在任何给定时间可能有超过 1500 个提要处理,并且增加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

4

1 回答 1

0

在提出这个问题时,FileBeats 正在开发中。Elastic 团队建议使用 FileBeats 作为 logstash-forwarder 将被淘汰。

于 2017-02-20T03:39:53.417 回答