この CookBook では、request.log を Kibana で可視化する方法について紹介しています。 方法は色々ありますが、この CookBook では Logstash と logstash-logback-encoder を組み合わせて Elasticsearch へのログの投入を行います。
レシピ
- De_dot filter plugin | Logstash のインストール
- logstash.conf を作成
- WEB-INF/conf/log/im_logger_request_logstash.xml を配置
- logstash-logback-encoder-x.xx.jar を配置
1. De_dot filter plugin | Logstash のインストール
MDC のキー名に含まれるドット(.)をエスケープするための De_dot filter plugin をインストールします。 下記コマンドでインストールします。
bin/logstash-plugin install logstash-filter-de_dot
2. logstash.conf を作成
input { tcp { port => 4560 codec => json_lines } } filter { de_dot { } } output { elasticsearch { hosts => ["127.0.0.1:9200"] index => "request-%{+YYYY.MM.dd}" } }
| 行数 | 説明 |
|---|---|
| 1-6 | LogstashTcpSocketAppender の出力を受け取ります。 |
| 7-10 | Elasticsearchでは「.」が特別な意味を持つため、MDC のキーに含まれる「.」を「_」に変更します。 |
| 11-16 | 受け取った JSON を Elasticsearch に取り込みます。 |
| 13 | 送信先となる Elasticsearch のアドレスを指定します。 |
logstash の設定の詳細については Configuring Logstash を参照してください。 De_dot filter plugin の設定の詳細については De_dot filter plugin を参照してください。 下記コマンドで Logstash を起動します。
bin/logstash -f logstash.conf
3. WEB-INF/conf/log/im_logger_request_logstash.xml を配置
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:4560</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<logger name="REQUEST\_LOG" additivity="false">
<level value="info" />
<appender-ref ref="stash" />
</logger>
| 行数 | 説明 |
|---|---|
| 4-7 | TCP を用いてログを JSON 出力します。 |
| 5 | 送信先となる Logstash のアドレスを指定します。ポート番号は logstash.conf の input の tcp port に設定した値を指定します。 |
| 9-12 | リクエストログに上記の設定を適用します。 |
指定可能なオプションの詳細についてはLogback JSON encoderを参照してください。
4. logstash-logback-encoder-x.xx.jar を配置
Logstash Logback Encoder より logstash-logback-encoder-x.xx.jar をダウンロードします。 ダウンロードした jar ファイルを、WEB-INF/lib に配置します。 Accel Platform を起動し、アクセスすることで、ログが Elasticsearch に投入されます。 Kibana からインデックス名「request-*」で登録することで、データを表示することができます。 
