kibana 5.5.0 リリース記念 Grok Debuggerを試す

# 概要

kibana 5.5.0がリリースされました。

https://www.elastic.co/jp/blog/elastic-stack-5-5-0-released

logstashの項目には、こう書いてあります。

> 正規表現を書くのが大変ですか？ Grokをあちこちで活用していますか？Grok DebuggerがKibanaに登場しました！

https://www.elastic.co/guide/en/kibana/current/grokdebugger-getting-started.html

こちらによると、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で立てましょう。

```yaml
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」を押すと、このような画面になります。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/111676/45b0a4eb-a51c-ab19-8af1-8c6426716499.png)


# 使い方

「Input」に解析したい対象となる文字列を、「Pattern」にはGrok Patternを入れます。
「Simulate」ボタンを押下することで、マッチ結果が「Output」に出力されるというものです。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/111676/6f399613-0582-1fc9-bdf0-928018591b44.png)

## 当たり前の注意点

たとえば、ログの書式がこんなのってよく見かけます。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を書くときに、"["や"]"をエスケープしなければいけません。
正規表現で注意が必要なものに気をつける、ということですね。

実際にやってみた例はこちら。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/111676/6aa4b195-0946-eb7e-8064-39ddb5861e14.png)


|項目|内容|
|----|------|
|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してみた

http://grokdebug.herokuapp.com/discover?#

先の例で使ったログ文字列を入れてやってみた結果。
やっぱり、Debuggerでちょっとずつこまめに作っていくのが吉です。

```
%{COMBINEDAPACHELOG}
```

![Grok Debugger.png](https://qiita-image-store.s3.amazonaws.com/0/111676/7b61a0fd-db8a-3280-ffc2-ecba82376a59.png)