最近我把mall项目升级支持了SpringBoot 2.7.0,同时升级了整套ELK日志收集系统。我发现每次升级Kibana界面都会有一定的改变,变得更现代化了吧!今天来聊聊mall项目的日志收集机制,使用了SpringBoot支持的最新版ELK,希望对大家有所帮助!
SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/…
首先我们需要搭建ELK日志收集系统,这里使用在Docker环境下安装的方式。
- 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.conf
文件地址: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
- 复制代码
- docker run --name kibana -p 5601:5601 \
- --link elasticsearch:es \
- -e "elasticsearch.hosts=http://es:9200" \
- -d kibana:7.17.3
- 复制代码
日志收集系统的原理是这样的,首先应用集成了Logstash插件,通过TCP向Logstash传输日志。Logstash接收到日志后根据日志类型将日志存储到Elasticsearch的不同索引上去,Kibana从Elasticsearch中读取日志,然后我们就可以在Kibana中进行可视化日志分析了,具体流程图如下。
这里把日志分成了如下四种类型,方便查看:
com.macro.mall
包下的所有DEBUG级别以上日志;com.macro.mall.tiny.component.WebLogAspect
类下所有DEBUG级别以上日志,该类是统计接口访问信息的AOP切面类。首先得把mall项目的三个应用启动起来,通过
--link logstash:logstash
连接到Logstash。
- 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
- 复制代码
- 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
- 复制代码
- 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的部署不再赘述,想部署全套的小伙伴可以参考部署文档。
接下来我们体验下Kibana的可视化日志分析功能,以mall项目为例,确实很强大!
Stack管理
功能;索引匹配模式
;mall-debug
的索引匹配模式;mall-error
、mall-business
和mall-record
的索引匹配模式;发现
功能,就可以看到应用中产生的日志信息了。mall-debug
日志,这类日志是最全的日志,可用于测试环境调试使用,当我们有多个服务同时产生日志时,我们可以通过过滤器来过滤出对应服务的日志;message
中包含分页
的日志,查询速度确实很快;mall-error
日志可以快速获取应用的报错信息,准确定位问题,例如把Redis服务给停了,这里就输出了日志;mall-business
日志可以查看com.macro.mall
包下的所有DEBUG级别以上日志,通过这个日志我们可以方便地查看调用接口时输出的SQL语句;mall-record
日志可以方便地查看接口请求情况,包括请求路径、参数、返回结果和耗时等信息,哪个接口访问慢一目了然;今天给大家分享了下mall项目中的日志收集解决方案以及如何通过Kibana来进行日志分析,对比直接去服务器上用命令行看日志,确实方便多了。而且Kibana还可以对不同服务产生的日志进行聚合,同时支持全文搜索,确实功能很强大。