この 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 をインストールします。
下記コマンドでインストールします。
1 |
bin/logstash-plugin install logstash-filter-de_dot |
2. logstash.conf を作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 を起動します。
1 |
bin/logstash -f logstash.conf |
3. WEB-INF/conf/log/im_logger_request_logstash.xml を配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?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-*」で登録することで、データを表示することができます。