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