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

公開日: 2017-08-16 / カテゴリ: CookBook

この CookBook では、request.log を Kibana で可視化する方法について紹介しています。 方法は色々ありますが、この CookBook では Logstash と logstash-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-6LogstashTcpSocketAppender の出力を受け取ります。
7-10Elasticsearchでは「.」が特別な意味を持つため、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-7TCP を用いてログを 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-*」で登録することで、データを表示することができます。