本文介绍了 Spring Boot 2 配合 ELK 实现日志记录的方法和步骤。
目录
- ELK 简介
- 开发环境
- 基础示例
- 总结
ELK 简介
ELK 是 Elastic 公司提供的三个产品组件,配合使用可以完成日志记录功能。
- E(ElasticSearch):存储日志
- L(Logstash):收集、处理和转发日志
- K(Kibana):提供日志检索功能的 Web 应用
有关 ELK 的其它信息请参看:ELK教程
开发环境
- Oracle JDK 1.8.0_201
- Apache Maven 3.6.0
- IntelliJ IDEA (Version 2018.3.3)
基础示例
-
安装 ElasticSearch,Logstash 和 Kibana。
-
在 Logstash
bin
目录下新增配置文件logstash_tcp.conf
,重启 Logstash(参考:CentOS 7.x 安装 Logstash 6.x)。
input {
tcp {
host => "0.0.0.0"
mode => "server"
port => 9600
codec => "json"
}
}
output {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "tcp-%{+YYYY.MM.dd}"
}
}
说明:
-
input
配置参考:Input plugins -
output
配置参考:Output plugins
-
修改 Kibana 配置文件
config/kibana.yml
,添加elasticsearch.url: "http://127.0.0.1:9200"
,重启 Kibana(参考:CentOS 7.x 安装 Kibana 6.x) -
修改需要配合 ELK 记录日志的工程,在
pom.xml
中添加logstash-logback-encoder
依赖。
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.2</version>
</dependency>
- 修改 Logback 配置文件,添加
net.logstash.logback.appender.LogstashTcpSocketAppender
。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36}: %msg%n"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 配置 Logstash 服务地址 -->
<destination>[Logstash IP]:9600</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"></encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
- 登录 Kibana Web 管理页面
IP:5601
,执行Create Index Pattern
,配置完成后点击Discover
,选中Available fields
中的message
,点击add
,页面刷新后可以看到上报的日志。
注意:Create Index Pattern
前确保 Elasticsearch 中有数据,这样会自动刷新出 Elasticsearch 中已有的 Index,可以按照提示创建。
注意:本示例 Logback 配置实现日志同步发送到 Logstash,生产环境中最好配置异步日志记录,异步日志配置请参考:Logback 异步日志配置
异步日志配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36}: %msg%n"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 配置 Logstash 服务地址 -->
<destination>[Logstash IP]:9600</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"></encoder>
</appender>
<!-- 异步日志记录 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="LOGSTASH"/>
</appender>
<root level="INFO">
<appender-ref ref="ASYNC"/>
</root>
</configuration>
网友评论