当前位置:网站首页>还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS
还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS
2022-07-30 02:45:00 【YYniannian】

最近我把mall项目升级支持了SpringBoot 2.7.0,同时升级了整套ELK日志收集系统。我发现每次升级Kibana界面都会有一定的改变,变得更现代化了吧!今天来聊聊mall项目的日志收集机制,使用了SpringBoot支持的最新版ELK,希望对大家有所帮助!
SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/…
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文件地址: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的部署不再赘述,想部署全套的小伙伴可以参考部署文档。
可视化日志分析
接下来我们体验下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还可以对不同服务产生的日志进行聚合,同时支持全文搜索,确实功能很强大。
项目源码地址
边栏推荐
猜你喜欢

Type-C边充电边OTG芯片——LDR6028A

Is it difficult for AI to land?Cloud native helps enterprises quickly apply machine learning MLOps

Houdini 地形知识点

机器学习(十五)异常检测

【ModelArts系列】华为ModelArts Notebook训练yolov3模型(开发环境)

力扣刷题训练(二)

ESP8266 +0.96" I2C OLED Dial Clock

(RCE)远程代码/命令执行漏洞漏洞练习

Fudan-Washington University EMBA Kechuang's Ao E丨The Magical Materials and We Are Shaped

VLAN 实验
随机推荐
LeetCode Question of the Day (874. Walking Robot Simulation)
The display and hiding of widgets for flutter learning
Not enough information to list load addresses in the image map.(STM32编译报错)
Tibetan Mapping
JNPF3.4.2系统升级公告
JS develops 3D modeling software
WebSocket在线通信
matlab之函数
Linux Jenkins查找缓存文件及删除 (2022-07测试可用)
3种实现文本复制功能的方法
【C语言刷LeetCode】592. 分数加减运算(M)
快速入门jsp
HCIP 第十五天
houdini 使用HDA Processor 实现处理HDA输入输出
群论-Burnside引理与Polya定理 三千字
使用SqlSessionFactory工具类抽取
Drawing Problem Log
uni-app如何配置APP自定义顶部标题栏
(RCE)远程代码/命令执行漏洞漏洞练习
A. Strange Birthday Party- Codeforces Round #694 (Div. 1)