将SpringBoot的日志发送到Elasticsearch,并通过Kibana进行查看所需的Fluentd(td-agent)配置
這個問題
简洁概述
我想把SpringBoot的日志发送到Elasticsearch,并在Kibana上查看,但是一开始不知道如何将SpringBoot的日志发送到Elasticsearch。使用fluentd可以进行传输,下面是该方法。
-
- 確認した構成
Elastic Stack サーバ
OS: CentOS7 / Elasticsearch: Version 5.0.1 / Kinbana Version: Version 5.0.1
SpringBoot サーバ
OS: CentOS7 / SpringBoot: Version1.4.2 / td-agent 0.12.29
目标日志
(略)
2016-12-09 21:27:13.240 INFO 13404 --- [pool-1-thread-1] com.example.Task : 1039443329 is 1039443329
2016-12-09 21:27:13.741 ERROR 13404 --- [pool-1-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task.
java.lang.RuntimeException: FizzBuzz
at com.example.Task.fizzBuzz(Task.java:21) ~[main/:na]
at com.example.Task.doTask(Task.java:16) ~[main/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
(略)
-
- 特徴
スタックトレースなど複数行にまたがるログがある。
流畅的日志属性设置
<source>
type tail
path /spring/logs/spring.log
pos_file /var/log/td-agent/spring.log.pos
tag spring.logtest
refresh_interval 5s
format multiline
format_firstline /\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}\.\d{3}.*---/
format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}\.\d{3})\s+(?<level>[^\s]+)\s+(?<process>[^\s]+)\s+---\s+\[(?<thread>[^\s]+)\]\s+(?<class>[^\s]+)\s+:\s+(?<message>.*)/
</source>
<match spring.**>
type Elasticsearch
type_name spring_logtest
host 192.168.33.9
port 9200
logstash_format true
logstash_prefix spring_logtest
logstash_dateformat %Y%m%d
include_tag_key true
tag_key @log_name
flush_interval 5s
</match>
-
- (入力)tail プラグイン 詳細はこちらで確認してください
format multiline 機能を使って複数行のログを1つの情報として扱えるようになる。
完璧な正規表現ではないので誤検知もあり得る
format_firstline で1つのログの先頭行を判定するための正規表現
format1 でログの各項目に意味づけする (<フィールド名>データ抽出の正規表現)
Elasticsearchプラグイン 詳細はこちらで確認してください
host / port : Elasticsearch サーバの host と port
结果 –
感受
这是否是被推荐的方法?虽然SpringBoot、Elasticsearch和Kibana都很简单,但是我觉得在将SpringBoot日志转发到Elasticsearch这部分,不应该需要写这么多繁琐的正则表达式。如果有更好的方法,请告诉我。
额外:直到确认构建完成。
弹性堆栈服务器的设置
这篇文章很易懂
Elastic Stack 5.0.0 GA发布!立即安装!! #Elasticsearch
-
- 記事は Amazon Linux を想定していますが CentOSも同じコマンド行けました。
-
- 本稿に関係あるのは、「ElasticsearchとKibanaのインストール」までで良いです。
-
- 「Beatsのインストール」までやっても損はないと思う
- 「Logstashのインストール」は本稿の構成の場合は不要
Spring Boot 应用程序的准备工作
-
- アプリを作るところは省略
- ログをファイル出力するためには application.yml に 以下のように書く
# 以下の設定だと <実行ディレクトリ>/logs/spring.log ができる
logging.file: logs/spring.log
在SpringBoot服务器上准备好Fluentd(td-agent)。
-
- 基本的に 公式の通りインストール。
-
- fluent-plugin-elasticsearch を使用する
- 以上をコマンドにすると以下。
sudo wget -r --no-parent --no-directories -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/e/
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
sudo td-agent-gem install fluent-plugin-Elasticsearch