頻繁にローリングするログ ファイルのログ イベントが 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 です。