ログのパース - ベストプラクティス

Datadog では、ログからすべての関連情報を抽出するためのパーサーを定義できます。パースの言語および機能の詳細については、こちらのドキュメントを参照してください。

この記事では、Datadog Agent のコレクターによるログをパースする方法について説明します。

2017-10-12 08:54:44 UTC | INFO | dd.collector | checks.collector(collector.py:530) | Finished run #1780. Collection time: 4.06s. Emit time: 0.01s
  1. パースするログのサンプルをコメントとして必ず規則に追加する

    parsing_best_practice_1
    そうすれば、パース規則をサンプルログでテストすることができます。初めて規則を記述する際や、パーサーの問題を調査したり、新しいログ形式をサポートしたりする場合に、これが非常に役に立ちます。

  2. アスタリスクを利用して、属性を 1 つずつパースする。 最初からログ全体のパース規則を記述する必要はありません。1 つの属性ごとに規則をチェックしましょう。それには、規則の末尾に .* を使用して、後続の規則を無視してマッチさせることができます。 たとえば、ここではまず、後続の属性を考慮せず、ログの日付をパースするとします。次の規則を作成します。

    parsing_best_practice_2
    日付が正しくパースされることを確認できました。では次の属性である重大度のパースに進みましょう。 まず、パイプ (エスケープする必要がある特殊文字) をエスケープしてから、文字とのマッチを記述します。
    parsing_best_practice_3
    このログから目的の属性をすべて抽出するまで、この手順を続けます。

  3. 適切なマッチャーを使用する。 規則はできるだけシンプルに作成しましょう。たとえば、基本の notSpace が機能するなら、多くの場合、特定のパターンに合わせて複雑な正規表現を定義する必要はありません。 パース規則を記述する際には、次のマッチャーがよく使用されます。

    • notSpace: 次のスペースまでの文字列に一致します
    • data: すべてに一致します (「.*」と同等)
    • word: すべての英数字に一致します
    • integer: 10 進整数に一致し、それを整数としてパースします

    ほとんどの規則は、この 4 つのマッチャーを使用して記述できます。すべてのマッチャーのリストはパースのドキュメントで確認できます。

  4. KeyValue。 key-value フィルターを使用すると、すべての属性を自動的に抽出できます。 詳細については、いくつかの例を参照してください。

  5. ログメッセージの中で、属性として抽出しない部分をスキップする。 先の例に戻ります。

    2017-10-12 08:54:44 UTC | INFO | dd.collector | checks.collector(collector.py:530) | Finished run #1780. Collection time: 4.06s. Emit time: 0.01s
    

    たとえば、dd.collector の情報は利用価値がなく、属性として抽出する必要がないと判断したとします。 これをスキップするには、対応するセクションを規則から削除します。

    parsing_best_practice_4

その他の参考資料