整合 ELK stack 作为 SpringBoot 项目日志分析方案
前置准备:
Kibana 7.4.2
Elasticsearch 7.4.2
Logstash 7.4.2
SpringBoot 2.6.13
扩展:Docker启动Logstash:
docker run --restart=always -p 4560:4560 -v ~/pipeline/:/usr/share/logstash/pipeline/ --name logstash logstash:7.4.2
配置文件放在:用户主目录/pipeline/logstash.conf
1.引入Maven依赖:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
2.导入Logback配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<springProperty name="application" source="spring.application.name"/>
<springProperty name="host" source="logstash.host"/>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${host}</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"application":"${application}"}</customFields>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="stash" />
</root>
</configuration>
导入到 src/main/resources/logback-spring.xml 内。
3.配置application.yml:
logstash:
host: 127.0.0.1:4560
spring:
application:
name: ELK Demo
host里的IP改成 Logstash 实际的。
4.导入Logstash配置文件:
input {
tcp {
port => 4560
codec => json_lines
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["192.168.1.200:9200"]
# user => "elastic"
# password => "abc123"
index => "logstash-%{+YYYY.MM.dd}"
}
}
hosts 改成 Elasticsearch 实际ip,如果有密码,则取消注释并配置。
5.完成:
启动项目,打印的 INFO 级别以上日志都会自动收集到 Elasticsearch 的 logstash-xxxx-xx-xx 索引内,使用 Kibana 创建 可视化、仪表盘,根据需求筛选展示即可。