きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × SIer

Logstash × Filter設定 × grokクエリの確認方法メモ

この記事の目的

この記事では、
Logstashのフィルタ設定(grok)の実行方法をメモすること
を目的としています。
  

本題

★Logstash、grokとは?

Elastic Stackの中で、データの収集、加工、転送を司るプロダクトです(下図の赤枠の部分)。Logstashに設定することにより、Logstashに送られてきたデータを解析しやすい形に加工し、Elastic Searchに転送することができます。
独自のフォーマットのログをElastic Searchに登録しようとする場合は、Logstashを経由して、扱いやすい形式に加工するのが良いらしいですね。
独自ではないもの・・・例えば、IISとかPostgresのログとかは、FileBeatsで用意されているモジュールなどを利用することで手軽に送信できるようなので、必ずしもLogstashを使わなくてもよい・・・という認識です。
補足)Elastic Stackの全体像とこのブログの対象(赤点線の枠内)の位置付
f:id:kinakomotitti:20190206212820p:plain


★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
f:id:kinakomotitti:20190206212848p:plain
上記のように、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の動作確認をすることができます。