Springboot中集成ELK进行日志分析
引言
ELK(ElasticSearch分布式搜索引擎、Logstash数据收集处理引擎和Kibana可视化化平台)是在大型后端架构中,一个标准的数据采集方案。
- Log Sources:表示各种应用程序(Application 1、Application 2、Application 3)生成的日志数据。
- Logstash:负责收集、过滤和解析来自各个日志源的数据,然后将其传输到Elasticsearch进行存储和索引。
- Elasticsearch:作为中央存储和搜索引擎,接收Logstash处理后的日志数据,并提供高效的存储和检索能力。
- Kibana:可视化和分析工具,用于创建仪表盘、图表和报表,并帮助用户对日志数据进行查询和探索。
其中springboot应用的角色就是Log Sources,进行日志分析集成主要是对接Logstash。主要使用到的是依赖logstash-logback-encoder
。
集成
Springboot集成
- 修改maven的依赖配置。
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.4</version>
</dependency>
<!-- Your project must also directly depend on either logback-classic or logback-access. For example: -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.7</version>
</dependency>
运行时出现 ClassNotFoundException/NoClassDefFoundError/NoSuchMethodError
这些异常可能需要降低logstash-logback-encoder的版本。
- 修改logback.xml配置文件。
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"host":"${HOSTNAME}", "appname":"bigdata-air"}</customFields>
</encoder>
</appender>
<root level="INFO">
<!-- stash输出 -->
<appender-ref ref="stash" />
</root>
修改Logstash的pipeline
修改Logstash的管道配置,增加tcp和json解析。
vi logstash/pipeline/logstash.conf
## 增加配置
input {
tcp {
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "app-%{[appname]}-%{+YYYY.MM.dd}"
user => "test"
password => "123qazwww.."
}
stdout {
}
}
通过kibana查看日志
- 选择Management>Kinaba>Index Patterns 菜单
- 然后Create index pattern
- index pattern 输入
app-bigdata-air
- Time Filter field name 选择 currentDateTime
- index pattern 输入
- 选择Discover菜单即可查看