request.log を Kibana で可視化する方法

この CookBook では、request.log を Kibana で可視化する方法について紹介しています。
方法は色々ありますが、この CookBook では Logstashlogstash-logback-encoder を組み合わせて Elasticsearch へのログの投入を行います。

レシピ

  1. De_dot filter plugin | Logstash のインストール
  2. logstash.conf を作成
  3. WEB-INF/conf/log/im_logger_request_logstash.xml を配置
  4. 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 を配置

<?xml version="1.0" encoding="UTF-8"?>
<included>

    <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>

</included>
行数 説明
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-*」で登録することで、データを表示することができます。