概要
kibana 5.5.0がリリースされました。
logstashの項目には、こう書いてあります。
正規表現を書くのが大変ですか? Grokをあちこちで活用していますか?Grok DebuggerがKibanaに登場しました!
こちらによると、x-packを入れていると、使えるようになるということのようです。
The Grok Debugger is automatically enabled when you install X-Pack into Kibana. It is located under the DevTools tab in Kibana
で、こちらを試してみた、という内容です。
環境
例によってDockerで立てましょう。
version: '2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.5.0
container_name: elasticsearch
ports:
- 9200:9200
- 9300:9300
kibana:
image: docker.elastic.co/kibana/kibana:5.5.0
container_name: kibana
links:
- elasticsearch:elasticsearch
ports:
- 5601:5601
IDとパスワードはデフォルト値、elastic/changemeのままです。
Grok Debuggerの画面
ConsoleやSearch Profilerがある「Dev Tools」のアイコンをクリックし、「Grok Debugger」を押すと、このような画面になります。
使い方
「Input」に解析したい対象となる文字列を、「Pattern」にはGrok Patternを入れます。
「Simulate」ボタンを押下することで、マッチ結果が「Output」に出力されるというものです。
当たり前の注意点
たとえば、ログの書式がこんなのってよく見かけます。logbackとかlog4j界隈で。
192.168.144.42 - - [03/Apr/2017:11:36:18 +0900] "GET /imart/ HTTP/1.1" 302 70 "-" "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf Safari/534.3224"
"["や"]"に囲まれた文字列を抽出するには、Patternを書くときに、"["や"]"をエスケープしなければいけません。
正規表現で注意が必要なものに気をつける、ということですね。
実際にやってみた例はこちら。
項目 | 内容 |
---|---|
Input | 192.168.144.42 - - [03/Apr/2017:11:36:18 +0900] "GET /imart/ HTTP/1.1" 302 70 "-" "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf Safari/534.3224" |
Pattern | %{IPORHOST:resin.access.remote_ip} - %{DATA:resin.access.user_name} [%{HTTPDATE:resin.access.time}] "%{WORD:resin.access.method} %{DATA:resin.access.url} HTTP/%{NUMBER:resin.access.http_version}" %{NUMBER:resin.access.response_code} %{NUMBER:resin.access.body_sent.bytes} ("%{DATA:resin.access.referrer}")?( "%{DATA:resin.access.agent}") |
当たり前の注意点2
LogstashやBeatsの設定ファイルからGorkPatternをコピペで持ってくるときの注意点です。
上にも書いていますが、エスケープする「\」をエスケープする書き方になっていることがあると思います。
例
\\[%{IPORHOST:imart.access.remote_ip}\\] - %{DATA:imart.access.user_name} \\[%{HTTPDATE:imart.access.time}\\] \"%{WORD:imart.access.method} %{DATA:imart.access.url} HTTP/%{NUMBER:imart.access.http_version}\" %{NUMBER:imart.access.response_code} %{DATA:imart.access.body_sent.bytes} (\"%{DATA:imart.access.referrer}\")?( \"%{DATA:imart.access.agent}\")
このような文字列をそのままGrokDebuggerに貼り付けてもエラーになるので、元の書き方に戻しましょう。
おわりに変えての雑感
Grok Debuggerといえば、大半の方が http://grokdebug.herokuapp.com/ をご利用だと思います。
こちらのサイトではPatternってどんなのがあったっけ? と調べることができたり、
文字列をいれてDiscoverとすると、それらしいPatternを生成してくれるDiscoverがあります。(もちろん完璧ではないけれども)
kibanaのGrok Debuggerには、これからの機能強化に期待したいところです。
Discoverしてみた
先の例で使ったログ文字列を入れてやってみた結果。
やっぱり、Debuggerでちょっとずつこまめに作っていくのが吉です。
%{COMBINEDAPACHELOG}