web-dev-qa-db-ja.com

同じGraylog入力に対して異なるエクストラクタ?

私はFilebeatでGraylogのサイドカー機能を使用して、Syslog、Nginx、Java Appなどのさまざまなログファイルをサーバーから取得しています。これらはすべて、Beatsの同じGraylog入力に流れます(複数の入力を提供しようとしましたが、残念ながらFilebeatは1つの場所にのみ送信します)。Extractorsを除いてすべてがうまく機能します。

特定のログメッセージに特定のエクストラクタを指定するにはどうすればよいですか?例:フィールド 'type' = 'API'(my Java app)の場合、JSONエクストラクタを適用します。type= 'nginx'の場合、正規表現エクストラクタを適用します。

3
Jon

1つの入力で複数のログソースを取り込んでおり、4つのエクストラクターがチェーンされています。私が観察した動作から、エクストラクタが一致しない場合は、単に次のエクストラクタに渡されます。それは単なる試みであり、力ではありません。

たとえば、私のエクストラクタ:

  1. JSONをデコードします(入力はJSONとして入力され、これはフィールドにフラット化されます)
  2. 標準のアプリログ形式(内部標準を使用)
  3. アプリのエラーコード(エラーの場合、アプリはカスタムのExample_Error = Somethingフィールドを使用します)
  4. Mac OSXのホスト名

エラーのないアプリログが届くと、次のようになります。

  1. JSONからデコードされます
  2. Grok経由で正規表現を使用してフォーマットを照合します
  3. 合格(「Example_Error =」フィールドなし)
  4. 合格(Mac OS Xログとの一致なし)

そして、Mac OS Xシステムログが入ってくると:

  1. JSONからデコードされます
  2. 合格(アプリのログ形式と一致しません)
  3. 合格(エラーコードフィールドと一致しません)
  4. ホスト名を抽出します

いくつかの計画と優れたgrokのセットを使用すると、ログの予想されるフォーマットに基づいて、これを多くのExtractorで機能させることができます。エクストラクタ内の「フィールドに(文字列/正規表現)が含まれている場合にのみ抽出を試行する」オプションも特に役立ちます。

2
armani