Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15862 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

23 | 调用链追踪:如何通过 ELK 实现日志检索?

你好,我是姚秋辰。
在上节课中,我们借助 Sleuth 和 Zikpin 的合力,搭建了一套调用链追踪系统,它可以帮助我们串联调用链中的上下游访问单元,快速定位线上异常出现在哪个环节。不过呢,光有 Tracing 能力似乎还不够,如果我们想要更深一步调查异常背后的原因,那必须完整还原这个异常问题的案发现场。
在线上环境中,我们无法像操作本地开发环境一样去打断点一步步调试问题,服务器的 Remote Debug 端口通常也是被禁用的,我们唯一能重现案发现场的途径就是日志信息。因此,我们还要去构建一套日志检索系统,作为线上异常排查的辅助工具。
今天,我就来带你通过 ELK 组件来搭建日志检索系统,完成整个调用链追踪方案的最后一块拼图。在这个过程中,你会知道如何使用 Docker 搭建 ELK 镜像,以及如何把应用程序对接到 Logstash 日志收集器,当然了,还有如何在 UI 界面查询日志。
在开始之前,我们先来看看什么是 ELK 吧。

什么是 ELK?

ELK 并不是一个技术框架的名称,它其实是一个三位一体的技术名词,ELK 的每个字母都来自一个技术组件,它们分别是 Elasticsearch(简称 ES)、Logstash 和 Kibana。取这三个组件各自的首字母,就组成了所谓的 ELK。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

ELK技术名词源自Elasticsearch、Logstash和Kibana三个组件,它们在日志检索平台中分别扮演着日志收集、存储和分析的角色。本文介绍了如何通过ELK组件搭建日志检索系统,以及如何使用Docker来快速构建ELK环境。首先,作者介绍了ELK各组件的作用和关系,然后详细讲解了搭建ELK环境的步骤,包括下载sebp/elk镜像、创建ELK容器和配置Logstash。通过这些步骤,读者可以快速了解如何搭建ELK环境,并将微服务生成的日志发送到ELK容器中,从而实现日志检索和异常排查的功能。文章内容详实,适合技术人员快速了解ELK技术及其搭建过程。 在对接ELK容器方面,应用程序只需进行简单的改动,添加依赖项和配置文件即可实现与ELK的对接。作者详细介绍了添加依赖项和配置logback文件的步骤,以及如何在Kibana中查看日志信息。此外,文章还提到了如何将Filebeat添加到ELK体系中,实现日志归集的功能,为读者提供了思考题。 总的来说,本文通过实际操作和详细讲解,帮助读者快速了解ELK技术及其搭建过程,同时引导读者思考如何进一步完善ELK体系,是一篇值得技术人员深入阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 黄叶
    置顶
    window版本搭建 3个软件都可以前往该中心下载,注意es和kibana版本要一样,链接:https://elasticsearch.cn/download/ 1.安装es 下载后,进入bin目录,elasticsearch.bat 测试:localhost:9200 2.安装kibana 下载后,进入bin目录,kibana.bat 测试:localhost:5601 3.安装logstash 需要修改配置,如下 input { tcp { #模式选择为server mode => "server" #ip和端口根据自己情况填写,端口默认4560,对应下文logback.xml里appender中的destination host => "localhost" port => 4560 #格式json codec => json_lines } } output { elasticsearch { action => "index" #这里是es的地址,多个es要写成数组的形式 hosts => "localhost:9200" #用于kibana过滤,可以填项目名称 index => "applog" } } 启动:进入bin,cmd输入logstash -f logstash.conf 测试:localhost:9600

    作者回复: 满分满分,帮了没有windows电脑的我的大忙,windows的同学可以看过来

    2022-02-04
    15
  • 威威威小哥
    老师,请问有了elk还需要集成zipkin吗? Sleuth打的日志都可以被收集到elk,那zipkin还有意义吗

    作者回复: 两者的用途不同,zipkin的主要目的是根据global trace id查询当前请求的调用链路。比如说我通过某个请求的header拿到trace id,接下来我用这个id搜索这次请求都调用了哪些服务,然后发生error的是哪个调用span。初步定位异常之后,再到kibana里搜索更细粒度的日志信息

    2022-03-19
    2
    10
  • peter
    老师请教一个问题啊: Q1:docker restart geekbang 这里“geekbang”是笔误吗?前面ELK的名字是“elk”啊。

    作者回复: 还真是的,呼叫编辑大大!看这里看这里,有个笔误

    2022-02-04
    3
    3
  • zx
    请问老师,生产环境 一般创建日志索引有什么规范没 像您文章中说的 通过配置文件表达式动态生成索引 可以大概讲一下这块思路吗

    作者回复: 动态做索引其实就是用类似“参数引用”的方式,把log里的参数配置到这里,就像你在本地log文件中配置动态参数一样,一般做index的话application name肯定是要做进去的,除此之外,server name或者cluster(集群封闭模式)也可以考虑加入index

    2022-02-28
    1
  • 张逃逃
    请问老师,我想log request的参数应该怎么写?

    作者回复: 有个简单的方法,直接用lombok的@Data或者@ToString注解加到Request的对应类头上,里面会自动覆盖toString打印漂亮的输出,只要在log里直接输出这个对象就好了

    2022-02-21
    1
  • 郭行知
    生产环境为什么要先用filebeat读取文件再发送给logstash?既然logstash本身有读文件的功能,为什么不直接用logstash读取文件写到存储里?前者有何优势?

    作者回复: 通常是把filebeat专注于“日志采集”,将汇集后的日志文件中的内容做提取,通过kafka把日志喂给logstash,这里logstash只负责日志清洗过滤。这种方式让每个组件都专注于自己本职最擅长的那一块,专才专用

    2023-03-25归属地:北京
  • 牛年榴莲
    打本地日志的时候,推荐使用JSON格式还是像本节console那样的日志格式

    作者回复: 就像平时console打印log的方式输出就可以,ELK和splunk之类的系统都可以设置分词策略,根据设置的分词策略打印规范日志(比如重要参数为ab=xx这种格式打印)可以方便问题排查

    2022-04-18
  • 罗逸
    docker 运行elk Elasticsearch启动,容器也进不去 starting elasticsearch server [fail], Couldn't start Elasticsearch. Exiting. Elasticsearch log follows below. cat: /var/log/elasticsearch/elasticsearch.log: No such file or directory

    作者回复: 文章中的elk镜像很吃内存,尤其是ES这部分,内存不足会导致ES启动失败。建议同学给docker分配5G以上的内存然后再试一下,或者指定一个老版本的elk镜像(占用内存少)

    2022-03-10
  • ziky
    请问一下老师:docker不是部署在虚拟机上吗,那么这个ip地址就会发生改变,为什么ip还是localhost

    作者回复: logstash和ES放在了同一个容器中,它们之间的连接相当于本地连接,网络环境相同

    2022-02-18
  • kimoti
    用ELK的目的是为了看日志排错,这样配置可以看到错误信息吗?毕竟仅有TraceID和Span ID还是不知道发生了什么错误?

    作者回复: 可以,在检索出来的日志信息里有具体的日志打印。在logback-spring.xml中,只要在pattern格式中把message和error信息传递给logstash就能够在elk里查到,你可以本地试一下

    2022-02-04
    3
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部