request.log を Kibana で可視化する方法
この 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 を配置
<?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-*」で登録することで、データを表示することができます。