• 还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS


    最近我把mall项目升级支持了SpringBoot 2.7.0,同时升级了整套ELK日志收集系统。我发现每次升级Kibana界面都会有一定的改变,变得更现代化了吧!今天来聊聊mall项目的日志收集机制,使用了SpringBoot支持的最新版ELK,希望对大家有所帮助!

    SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/…

    ELK日志收集系统搭建

    首先我们需要搭建ELK日志收集系统,这里使用在Docker环境下安装的方式。

    • 安装并运行Elasticsearch容器,使用如下命令即可;
    1. docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
    2. -e "discovery.type=single-node" \
    3. -e "cluster.name=elasticsearch" \
    4. -e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
    5. -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
    6. -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
    7. -d elasticsearch:7.17.3
    8. 复制代码
    • 启动时会发现/usr/share/elasticsearch/data目录没有访问权限,只需要修改/mydata/elasticsearch/data目录的权限,再重新启动即可;
    1. chmod 777 /mydata/elasticsearch/data/
    2. 复制代码
    1. docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
    2. --link elasticsearch:es \
    3. -v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
    4. -d logstash:7.17.3
    5. 复制代码
    • 进入容器内部,安装json_lines插件;
    1. docker exec -it logstash /bin/bash
    2. logstash-plugin install logstash-codec-json_lines
    3. 复制代码
    • 安装并运行Kibana容器,使用如下命令即可;
    1. docker run --name kibana -p 5601:5601 \
    2. --link elasticsearch:es \
    3. -e "elasticsearch.hosts=http://es:9200" \
    4. -d kibana:7.17.3
    5. 复制代码

    日志收集原理

    日志收集系统的原理是这样的,首先应用集成了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

    1. docker run -p 8080:8080 --name mall-admin \
    2. --link mysql:db \
    3. --link redis:redis \
    4. --link logstash:logstash \
    5. -v /etc/localtime:/etc/localtime \
    6. -v /mydata/app/admin/logs:/var/logs \
    7. -d mall/mall-admin:1.0-SNAPSHOT
    8. 复制代码

    mall-portal

    1. docker run -p 8085:8085 --name mall-portal \
    2. --link mysql:db \
    3. --link redis:redis \
    4. --link mongo:mongo \
    5. --link rabbitmq:rabbit \
    6. --link logstash:logstash \
    7. -v /etc/localtime:/etc/localtime \
    8. -v /mydata/app/portal/logs:/var/logs \
    9. -d mall/mall-portal:1.0-SNAPSHOT
    10. 复制代码

    mall-search

    1. docker run -p 8081:8081 --name mall-search \
    2. --link elasticsearch:es \
    3. --link mysql:db \
    4. --link logstash:logstash \
    5. -v /etc/localtime:/etc/localtime \
    6. -v /mydata/app/search/logs:/var/logs \
    7. -d mall/mall-search:1.0-SNAPSHOT
    8. 复制代码

    其他组件

    其他组件如MySQL和Redis的部署不再赘述,想部署全套的小伙伴可以参考部署文档。

    www.macrozheng.com/mall/deploy…

    可视化日志分析

    接下来我们体验下Kibana的可视化日志分析功能,以mall项目为例,确实很强大!

    创建索引匹配模式

    • 首先我们需要打开Kibana的Stack管理功能;

    • 为Kibana创建索引匹配模式

    • 大家可以看到我们之前创建的四种日志分类已经在ES中创建了索引,后缀为产生索引的日期;

    • 我们需要通过表达式来匹配对应的索引,先创建mall-debug的索引匹配模式;

    • 然后再创建mall-errormall-businessmall-record的索引匹配模式;

    • 接下来打开分析中的发现功能,就可以看到应用中产生的日志信息了。

    日志分析

    • 我们先来聊聊mall-debug日志,这类日志是最全的日志,可用于测试环境调试使用,当我们有多个服务同时产生日志时,我们可以通过过滤器来过滤出对应服务的日志;

    • 当然你也可以使用Kibana的专用查询语句KQL来过滤;

    • 还可以实现模糊查询,比如查询下message中包含分页的日志,查询速度确实很快;

    • 通过mall-error日志可以快速获取应用的报错信息,准确定位问题,例如把Redis服务给停了,这里就输出了日志;

    • 通过mall-business日志可以查看com.macro.mall包下的所有DEBUG级别以上日志,通过这个日志我们可以方便地查看调用接口时输出的SQL语句;

    • 通过mall-record日志可以方便地查看接口请求情况,包括请求路径、参数、返回结果和耗时等信息,哪个接口访问慢一目了然;

    总结

    今天给大家分享了下mall项目中的日志收集解决方案以及如何通过Kibana来进行日志分析,对比直接去服务器上用命令行看日志,确实方便多了。而且Kibana还可以对不同服务产生的日志进行聚合,同时支持全文搜索,确实功能很强大。

    项目源码地址

    github.com/macrozheng/…

  • 相关阅读:
    Redis_第二章_实战篇_第2节_商户缓存策略(缓存穿透、缓存雪崩、缓存击穿)
    下载并安装DevEco Studio 3.1,初尝鸿蒙编程
    Vue2:Vue2 @vue/cli脚手架
    前端比较简单,不需要架构?
    一款开源、免费、现代化风格的WPF UI控件库 - ModernWpf
    Spring Cloud Loadbalancer 实现客户端负载均衡
    2022年11月PMP考试如何办理缓退考?攻略在这里!
    JDK安装教程、Eclipse安装教程
    MySQL数据类型相关内容
    安全防御2
  • 原文地址:https://blog.csdn.net/YYniannian/article/details/126057573