オープンソース

一覧へ

11. ログ分析パターンの管理方法

11.1. Grok Patternとは

Graylogでは、Grokと呼ばれる一種の言語を利用して、データを抽出することができます。 Grokは、正規表現のセットであり、正規表現が一致する部分に、フィールド名を付けて保存できます。

Grok Patternを使うことで、一行のメッセージから、複数のデータを別のフィールドに分解・抽出することができます。

単純な正規表現のルールでも同じことが可能ですが、予め決まったフォーマットであるとわかっている場合、Graylogに登録済み、あるいは既に世の中に存在しているGrok Patternを登録して使うと便利です。

11.2. Grok Patternの定義と動作

Grok Patternの定義方法と動作を例を交えながら解説します。 例えば、以下のようなログを解析するとします。

len=50824 src=172.17.22.108 sport=829

Grok Patternとしては、以下のようなパターンが存在しています。

BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
NUMBER (?:%{BASE10NUM})
IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])

このパターンを使って、ログを解析するためには、以下のような設定を行ないます。

len=%{NUMBER:length} src=%{IPV4:srcip} sport=%{NUMBER:srcport}

この例のlen=%{NUMBER:length}に着目すると、 NUMBER というパターンを使って、len=から次のスペースまでに現れる値を抽出し、 length というフィールドに登録しています。 NUMBER というパターンは、その中でさらに BASE10NUM というパターンを使用しています。この BASE10NUM に正規表現が設定されています。src=やsport=も同様の動作をします。

Note

ログとGrok patternの組み合わせによっては、不要なフィールドが作成されてしまうことがあります。そのような場合、特殊なフィールド名 UNWANTED を付与することにより、フィールドの作成をスキップできます。

また以下のようにすることで、フィールドに登録する値の型を定義することができます。

len=%{NUMBER:length:byte}

利用できる型は次の通りです。

タイプ 値のサイズ
byte -128 ... 127 %{NUMBER:fieldname;byte}
short -32768 ... 32767 %{NUMBER:fieldname;short}
int -2^31 ... 2^31 -1 %{NUMBER:fieldname;int}
long -2^63 ... 2^63 -1 %{NUMBER:fieldname;long}
float 32-bit IEEE 754 %{NUMBER:fieldname;float}
double 64-bit IEEE 754 %{NUMBER:fieldname;double}
boolean true, false %{DATA:fieldname;boolean}
string Any UTF-8 string %{DATA:fieldname;string}
date See SimpleDateFormat %{DATA:timestamp;date;dd/MMM/yyyy:HH:mm:ss Z}
datetime date のエイリアス  

11.3. 設定インタフェース

Grok Patternの設定は、メニューの Grok Patterns のリンクから遷移した画面で行なうことができます。

GraylogのGrok設定画面

各ボタンの機能は以下の通りです。

  • Import pattern file : パターンファイルを使ってGrok Patternを追加できます。パターンファイルの形式は以下の形式です。
名前1  パターン1
名前2  パターン2
:
  • Create pattern : 新たなパターンの作成フォームを開きます。
  • Edit : パターンを編集します。
  • Delete : パターンを削除します。
一覧へ