共计 3318 个字符,预计需要花费 9 分钟才能阅读完成。
最近我把 mall 我的项目降级反对了 SpringBoot 2.7.0,同时降级了整套 ELK 日志收集零碎。我发现每次降级 Kibana 界面都会有肯定的扭转,变得更现代化了吧!明天来聊聊 mall 我的项目的日志收集机制,应用了 SpringBoot 反对的最新版 ELK,心愿对大家有所帮忙!
SpringBoot 实战电商我的项目 mall(50k+star)地址:https://github.com/macrozheng/mall
ELK 日志收集零碎搭建
首先咱们须要搭建 ELK 日志收集零碎,这里应用在 Docker 环境下装置的形式。
- 装置并运行 Elasticsearch 容器,应用如下命令即可;
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.17.3
- 启动时会发现
/usr/share/elasticsearch/data
目录没有拜访权限,只须要批改/mydata/elasticsearch/data
目录的权限,再重新启动即可;
chmod 777 /mydata/elasticsearch/data/
- 装置并运行 Logstash 容器,应用如下命令即可,
logstash.conf
文件地址:https://github.com/macrozheng…
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.17.3
- 进入容器外部,装置
json_lines
插件;
docker exec -it logstash /bin/bash
logstash-plugin install logstash-codec-json_lines
- 装置并运行 Kibana 容器,应用如下命令即可;
docker run --name kibana -p 5601:5601 \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.17.3
- ELK 日志收集系统启动实现后,就能够拜访 Kibana 的界面了,拜访地址:http://192.168.3.105:5601
日志收集原理
日志收集零碎的原理是这样的,首先利用集成了 Logstash 插件,通过 TCP 向 Logstash 传输日志。Logstash 接管到日志后依据日志类型将日志存储到 Elasticsearch 的不同索引下来,Kibana 从 Elasticsearch 中读取日志,而后咱们就能够在 Kibana 中进行可视化日志剖析了,具体流程图如下。
这里把日志分成了如下四种类型,不便查看:
- 调试日志(mall-debug):所有的 DEBUG 级别以上日志;
- 谬误日志(mall-error):所有的 ERROR 级别日志;
- 业务日志(mall-business):
com.macro.mall
包下的所有 DEBUG 级别以上日志; - 记录日志(mall-record):
com.macro.mall.tiny.component.WebLogAspect
类下所有 DEBUG 级别以上日志,该类是统计接口访问信息的 AOP 切面类。
启动利用
首先得把 mall 我的项目的三个利用启动起来,通过
--link logstash:logstash
连贯到 Logstash。
mall-admin
docker run -p 8080:8080 --name mall-admin \
--link mysql:db \
--link redis:redis \
--link logstash:logstash \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/admin/logs:/var/logs \
-d mall/mall-admin:1.0-SNAPSHOT
mall-portal
docker run -p 8085:8085 --name mall-portal \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
--link rabbitmq:rabbit \
--link logstash:logstash \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/portal/logs:/var/logs \
-d mall/mall-portal:1.0-SNAPSHOT
mall-search
docker run -p 8081:8081 --name mall-search \
--link elasticsearch:es \
--link mysql:db \
--link logstash:logstash \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/search/logs:/var/logs \
-d mall/mall-search:1.0-SNAPSHOT
其余组件
其余组件如 MySQL 和 Redis 的部署不再赘述,想部署全套的小伙伴能够参考部署文档。
https://www.macrozheng.com/ma…
可视化日志剖析
接下来咱们体验下 Kibana 的可视化日志剖析性能,以 mall 我的项目为例,的确很弱小!
创立索引匹配模式
- 首先咱们须要关上 Kibana 的
Stack 治理
性能;
- 为 Kibana 创立
索引匹配模式
;
- 大家能够看到咱们之前创立的四种日志分类曾经在 ES 中创立了索引,后缀为产生索引的日期;
- 咱们须要通过表达式来匹配对应的索引,先创立
mall-debug
的索引匹配模式;
- 而后再创立
mall-error
、mall-business
和mall-record
的索引匹配模式;
- 接下来关上剖析中的
发现
性能,就能够看到利用中产生的日志信息了。
日志剖析
- 咱们先来聊聊
mall-debug
日志,这类日志是最全的日志,可用于测试环境调试应用,当咱们有多个服务同时产生日志时,咱们能够通过过滤器来过滤出对应服务的日志;
- 当然你也能够应用 Kibana 的专用查问语句 KQL 来过滤;
- 还能够实现含糊查问,比方查问下
message
中蕴含分页
的日志,查问速度的确很快;
- 通过
mall-error
日志能够疾速获取利用的报错信息,精确定位问题,例如把 Redis 服务给停了,这里就输入了日志;
- 通过
mall-business
日志能够查看com.macro.mall
包下的所有 DEBUG 级别以上日志,通过这个日志咱们能够不便地查看调用接口时输入的 SQL 语句;
- 通过
mall-record
日志能够不便地查看接口申请状况,包含申请门路、参数、返回后果和耗时等信息,哪个接口拜访慢高深莫测;
总结
明天给大家分享了下 mall 我的项目中的日志收集解决方案以及如何通过 Kibana 来进行日志剖析,比照间接去服务器上用命令行看日志,的确不便多了。而且 Kibana 还能够对不同服务产生的日志进行聚合,同时反对全文搜寻,的确性能很弱小。
参考资料
对于如何自定义 SpringBoot 中的日志收集机制能够参考下你竟然还去服务器上捞日志,搭个日志收集零碎难道不香么!
如果你须要对日志进行平安爱护的话能够参考下竟然有人想白嫖我的日志,连忙开启平安爱护压压惊!
我的项目源码地址
https://github.com/macrozheng…