SpringBoot 整合 ELK 实现日志采集与监控
ELK是Elasticsearch、Logstash、Kibana他们三个组合起来可以搭建日志系统,本文主要讲解使用docker安装ELK收集SoringBoot应用产生的日志
Spring Event 与 AOP 结合:优雅记录日志的艺术
# 代码地址
https://github.com/bangbangzhou/spring-boot-event-log-demo.git
应用场景:
-
Web应用日志监控 -
系统性能监控 -
错误信息监控
优点:
-
灵活性高:Spring Boot提供了丰富的日志模块和监控模块,可以根据具体需求选择合适的模块进行集成和配置,具有高度的灵活性。 -
易于使用:Spring Boot提供了简化配置的方式,可以通过一些注解和属性文件来配置日志和监控模块,降低了配置的复杂度,易于使用。 -
功能强大:ELK是一个功能强大的日志管理和监控工具,可以实现日志的采集、存储、搜索和分析等功能,支持生成报表和实时监控,可以满足各种日志和监控需求。 -
扩展性强:Spring Boot提供了丰富的扩展点,可以通过自定义中间件和插件来扩展日志和监控功能,满足特定的业务需求。
ELK环境搭建
1.Elasticsearch、Logstash、Kibana作用
-
Elasticsearch:存储日志信息 -
Logstash: 日志收集,springboot利用Logstash把日志发送个Logstash,然后Logstash将日志传递给Elasticsearch。 -
Kibana:通过web端对日志进行可视化操作
使用Docker安装Elasticsearch
-
下载Elasticsearch镜像
docker pull elasticsearch:7.6.2
-
修改虚拟内存地址,否则可能出现内存过小无法启动
sysctl -w vm.max_map_count=262144
-
创建文件夹
mkdir -p /mydata/elasticsearch/plugins /mydata/elasticsearch/data
-
注意要给/mydata/elasticsearch/data设置权限
chmod 777 /mydata/elasticsearch/data/
-
启动Elasticsearch服务
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch
-e "discovery.type=single-node"
-e "cluster.name=elasticsearch"
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data
-d elasticsearch:7.6.2
-
安装IKAnalyzer中文分词器,并重新启动进入到容器
docker exec -it elasticsearch /bin/bash
下载插件
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip

注意:在线下载可能比较慢,可以进行离线下载
-
重启elasticsearch
docker restart elasticsearch
离线安装elasticsearch中插件
-
1.下载elasticsearch-analysis-ik-7.6.2.zip
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
-
2.上传到linux
-
3.上传的linux复制到elasticsearch容器中
docker cp elasticsearch-analysis-ik-7.6.2.zip elasticsearch:/
-
4.安装插件
docker exec -it elasticsearch /bin/bash
elasticsearch-plugin install file:////elasticsearch-analysis-ik-7.6.2.zip
docker restart elasticsearch
查看防火墙状态
systemctl status firewalld

打开特点端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
-
访问ES
http://192.168.150.102:9200

2. 使用Docker安装Logstash
-
1.下载Logstash镜像
docker pull logstash:7.6.2
-
2.创建/mydata/logstash
mkdir /mydata/logstash
cd /mydata/logstash
-
-
在/mydata/logstash目录下添加Logstash配置文件logstash.conf
vim logstash.conf

input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
type => "debug"
}
tcp {
mode => "server"
host => "0.0.0.0"
port => 4561
codec => json_lines
type => "error"
}
tcp {
mode => "server"
host => "0.0.0.0"
port => 4562
codec => json_lines
type => "business"
}
tcp {
mode => "server"
host => "0.0.0.0"
port => 4563
codec => json_lines
type => "record"
}
}
filter{
if [type] == "record" {
mutate {
remove_field => "port"
remove_field => "host"
remove_field => "@version"
}
json {
source => "message"
remove_field => ["message"]
}
}
}
output {
elasticsearch {
hosts => "es:9200"
index => "logback-%{type}-%{+YYYY.MM.dd}"
}
}
配置文件 logstash.conf 中设置了四个 TCP 输入,每个输入使用不同的端口(4560、4561、4562、4563)和类型(debug、error、business、record)。同时,通过 Logstash 的过滤器 filter 部分,对类型为 “record” 的日志进行了一些字段的处理,最后通过 output 将处理过的日志发送到 Elasticsearch 中,索引的命名采用了按类型和日期分隔的格式。
这个配置的作用是根据不同类型的日志将其分别处理,并存储到 Elasticsearch 中,索引名为 “logback-类型-日期”。
在这个配置中,Logstash 配置了四个 TCP 输入,分别监听不同的端口和类型。这样可以将不同类型的日志发送到不同的输入端口,从而在 Logstash 中区分它们。
-
4.启动logstash
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563
--link elasticsearch:es
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
-d logstash:7.6.2
-
-
查看容器
docker ps

3. 使用Docker安装Kibana安装
-
1.下载Kibana镜像
docker pull kibana:7.6.2
-
2.启动Kibana
docker run --name kibana -p 5601:5601
--link elasticsearch:es
-e "elasticsearch.hosts=http://es:9200"
-d kibana:7.6.2
-
3.打开特点端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
-
4访问kibana
http://192.168.150.102:5601

4.springboot配置(logback.xml配置)
-
-
pom.xml引入maven依赖
<!--集成logstash-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.3</version>
</dependency>
-
2.配置logback.xml文件 指定日志输出到logstash的端口号
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>192.168.150.102:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
-
3.在root节点添加
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF 默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-->
<root level="info">
<appender-ref ref="LOG_CONSOLE" />
<appender-ref ref="LOG_FILE" />
<appender-ref ref="LOGSTASH" />
</root>
注意:本文是按照之前两篇文章进行实现
Spring Event 与 AOP 结合:优雅记录日志的艺术
-
4.在application.yml配置日志文件
server:
port: 8890
logging:
file:
path: /var/logs
level:
root: info
#在Spring Boot项目中默认加载类路径下的logback-spring.xml文件
config: classpath:logback-spring.xml
-
postman访问接口产生日志
http://localhost:8890/user/name?name=12343

5.kibana 查看日志
-
添加log数据

-
查看Logstash 日志


-
创建索引



-
查看日志

通过以上步骤启动springboot项目 和 logstash ,此时发现logstash中会打印springboot项目中的日志,然后在kibbna中找到discovery即可可视化日志信息,还可对其过滤处理,快速定位到我们需要的日志。
# 代码地址
https://github.com/bangbangzhou/spring-boot-event-log-demo.git
如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!
原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!
原文始发于微信公众号(springboot葵花宝典):SpringBoot 整合 ELK 实现日志采集与监控
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/189664.html