この記事の目的
この記事では、
Logstashのフィルタ設定(grok)の実行方法をメモすること
を目的としています。
本題
★Logstash、grokとは?
Elastic Stackの中で、データの収集、加工、転送を司るプロダクトです(下図の赤枠の部分)。Logstashに設定することにより、Logstashに送られてきたデータを解析しやすい形に加工し、Elastic Searchに転送することができます。
独自のフォーマットのログをElastic Searchに登録しようとする場合は、Logstashを経由して、扱いやすい形式に加工するのが良いらしいですね。
独自ではないもの・・・例えば、IISとかPostgresのログとかは、FileBeatsで用意されているモジュールなどを利用することで手軽に送信できるようなので、必ずしもLogstashを使わなくてもよい・・・という認識です。
補足)Elastic Stackの全体像とこのブログの対象(赤点線の枠内)の位置付
★Grok Filterとは
Logstashの設定ファイルは以下のように設定することができます。
#入力設定。以下の設定により、標準入力からのデータをログとみなす。 input { stdin { } } #Grok Filter設定。 #ここでは、inputの値(message)が、以下の正規表現にマッチしたとき、 #項目ごとにレコードを分割することができる。 filter { grok { match => { "message" => [ 'Sample01,%{DATA:param01},%{DATA:param02},%{DATA:param03}$' , 'Sample02,', #複数パターンのフィルターも設定できる 'Sample03,' #複数パターンのフィルターも設定できる ] } } } #出力設定。以下の設定により、標準出力に結果が出力される。 output { stdout { codec => rubydebug } }
Grok Filterは、正規表現をセットにした'Grok Pattern'を使って定義します。上記の例では、正規表現【.*?】に該当するgrok pattern【DATA】を利用して、フィルターを定義しています。
Sample01から始まるデータをLogstashに送信することで、Param01 - 03の値としてそれぞれの値が認識されます。
Input → Sample01,aaaaaaa,bbbbbbb,ccccccc
上記のように、parameter01でaaaaaaaが認識され、ほかのパラメータも期待通りに認識されました。
↓公式HP↓
www.elastic.co
↓正規表現参考情報↓
github.com
★効率よくGrok Filterのデバッグする方法
個人的に便利だと感じた方法をまとめてみます。
Step1)Logstashの設定ファイルを用意する。
ファイルパスはどこでもいいですが、今回は、以下のように設定しました。
|--pipline | |--logstash-ge_test.conf | |--logstash.yml |--run.bash
設定ファイルの内容はそれぞれ以下の通りです。
↓ Logstash.yml ↓
http.host: "0.0.0.0"
↓ logstash-ge_test.conf ↓
input { stdin { } } filter { grok { match => { "message" => [ 'Sample01,%{DATA:param01},%{DATA:param02},%{DATA:param03}$' , 'Sample02,', 'Sample03,' ] } } } output { stdout { codec => rubydebug } }
↓ run.bash ↓
sudo docker run --rm -it \ --volume="$(pwd)/pipline/logstash-ge_test.conf:/usr/share/logstash/pipeline/logstash.conf" \ --volume="$(pwd)/pipline/logstash.yml:/usr/share/logstash/config/logstash.yml" \ docker.elastic.co/logstash/logstash:6.5.0
各ファイルを設定し、run.bashを実行すると、手軽にlogstashのgrok filterの動作確認をすることができます。