Graylogでログの分解・特定項目の値抜き出しを行う

Graylogでは、特定のログに記述されている"特定の項目の値"のみを抜き出し、Graylog側で個別に認識させることができる。
例えば、以下のようなログを受けたとしよう。FortiGateなんかがこんな感じのログだ。

Graylogでは、上の例でいうと「USER」「COMMAND」「ARGS」それぞれの値を抽出してやることができる。
じゃあどうやるのかというと、JSONの時とおなじように対象のログのMessageID、INDEX値を控えて[System] > [Inputs]から対象のインプットの[Manage extractors]を開き、ログを検索。
messageのとこで[Grok pattern]を選択する。

その後、抽出する箇所のGrok patternについて記述してやる。抽出できる項目は一項目につき一つ作成してやる必要がある。
たとえば、"USER"の項目を抽出するなら以下のようにする。このときに指定する変数は「stored pattern」のリンク先にいろいろとあるので、既存のパターンを参考に自分で変数名を作ることをお勧めする(Graylogで扱われる項目名がこの変数名になるので)。各パターンは正規表現を使っており、用意されているパターンだけでも十分使える(IPアドレスやメールアドレスなどの正規表現もすでに用意されている)。

Conditionでは抽出を行うログをどうするか(全部のログで行うのか、特定のキーワードを持つログに絞るのかなど)を指定できるので、環境に合わせて対応するといいだろう。
いろいろなログを一緒のINPUTで取り扱っているなら、そのログだけINPUTを分けるのも手だ。

無事、抽出が必要な項目について作成したら、あとはログを受信するだけだ。

うーむ、結構便利な機能ではなかろうか。