23 | 调用链追踪:如何通过 ELK 实现日志检索?
什么是 ELK?
- 深入了解
- 翻译
- 解释
- 总结
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-0415 - 威威威小哥老师,请问有了elk还需要集成zipkin吗? Sleuth打的日志都可以被收集到elk,那zipkin还有意义吗
作者回复: 两者的用途不同,zipkin的主要目的是根据global trace id查询当前请求的调用链路。比如说我通过某个请求的header拿到trace id,接下来我用这个id搜索这次请求都调用了哪些服务,然后发生error的是哪个调用span。初步定位异常之后,再到kibana里搜索更细粒度的日志信息
2022-03-19210 - peter老师请教一个问题啊: Q1:docker restart geekbang 这里“geekbang”是笔误吗?前面ELK的名字是“elk”啊。
作者回复: 还真是的,呼叫编辑大大!看这里看这里,有个笔误
2022-02-0433 - zx请问老师,生产环境 一般创建日志索引有什么规范没 像您文章中说的 通过配置文件表达式动态生成索引 可以大概讲一下这块思路吗
作者回复: 动态做索引其实就是用类似“参数引用”的方式,把log里的参数配置到这里,就像你在本地log文件中配置动态参数一样,一般做index的话application name肯定是要做进去的,除此之外,server name或者cluster(集群封闭模式)也可以考虑加入index
2022-02-281 - 张逃逃请问老师,我想log request的参数应该怎么写?
作者回复: 有个简单的方法,直接用lombok的@Data或者@ToString注解加到Request的对应类头上,里面会自动覆盖toString打印漂亮的输出,只要在log里直接输出这个对象就好了
2022-02-211 - 郭行知生产环境为什么要先用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-043