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 のエイリアス |
|