这篇文章主要介绍了TraceId怎么搭配ELK使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇TraceId怎么搭配ELK使用文章都会有所收获,下面我们一起来看看吧。
先分析一下,我们想实现的核心功能是搜索,必然是用 ES 实现,那问题就转换成如何将日志收集并存储到 ES。
日志大家都不陌生了,可以在控制台打印,也可以存入文件,那能不能直接输入 ES 呢,好像没听说过。
这里就要用到 Logstash 来收集日志,Spring 默认的日志框架 Logback 已经对其提供了支持,我们要做的只是编写配置文件。
Logstash 有个问题就是非常占用内存,所以本文后面会介绍另一个比较轻量级的日志收集工具 FileBeat ,由 Go 语言编写。
同时对于真实的线上环境为了保证吞吐量和可靠性,都会引入 Kafka 进行解耦,本文不做演示。
下面就进入实战部分,搭建一套日志收集与搜索系统。
本文使用 7.14.2 版本。下载下来解压就行,不废话。
修改配置文件
进入 config 目录:
# elasticsearch.yml path.data: /Users/li/programs/elasticsearch-7.14.2/data path.logs: /Users/li/programs/elasticsearch-7.14.2/logs ingest.geoip.downloader.enabled: false
# jvm.options # 如果内存够用也可以不修改 -Xms1g -Xmx1g
启动
./bin/elasticsearch
[2022-09-13T10:54:10,015][INFO ][o.e.n.Node ] [LdeMacBook-Pro.mshome.net] started [2022-09-13T10:54:10,730][INFO ][o.e.l.LicenseService ] [LdeMacBook-Pro.mshome.net] license [b7a596e6-1b61-4e6d-af2f-7eab70fe693b] mode [basic] - valid
测试
浏览器访问:http://localhost:9200/
下面再安装 ES 的可视化工具,下载地址同上,版本号同上。
修改配置文件
# kibana.yml server.port: 5601 server.host: "localhost" elasticsearch.hosts: ["http://localhost:9200"] kibana.index: ".kibana" i18n.locale: "zh-CN" # 中文
启动
./bin/kibana
[10:56:42.001] [info][status] Kibana is now degraded [10:56:44.784] [info][status] Kibana is now available (was degraded)
测试
浏览器访问:http://localhost:5601/
新增数据并查询
PUT /ecommerce/product/1 { "name" : "gaolujie yagao", "desc" : "gaoxiao meibai", "price" : 30, "producer" : "gaolujie producer", "tags": [ "meibai", "fangzhu" ] } GET /ecommerce/product/1
下载地址同上,版本号同上。
拷贝配置文件 logstash-sample.conf
# logstash-log-boot.conf input { tcp { mode => "server" host => "127.0.0.1" # 通过监听9001端口进行采集日志 port => 9001 codec => json_lines } } output { elasticsearch { # ES的地址 hosts => ["http://127.0.0.1:9200"] # 索引的名称 index => "boot-log-collection-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }
启动
./bin/logstash -f ./config/logstash-log-boot.conf
OK,到此 ELK 就搭建完了,接下来就是配置 boot 应用的日志输出。logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} [%highlight(%-5level)] [%boldYellow(%X{traceId})] [%boldYellow(%thread)] %boldGreen(%logger{36} %F.%L) %msg%n"> </property> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> <!-- 控制台打印INFO及以上级别的日志 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <!-- LOGSTASH 日志收集--> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!-- 在logstash启动文件logstash-log-boot.conf中配置的IP地址和端口 --> <destination>127.0.0.1:9001</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" /> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <root> <appender-ref ref="STDOUT"/> <!-- 引入LOGSTASH--> <appender-ref ref="LOGSTASH" /> </root> </configuration>
如果报LogstashTcpSocketAppender
这个类找不到,需要添加一个依赖:
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency>
其实这个依赖就是用来网络通信的,来传输日志。
测试
这时启动应用,观看 Logstash 的控制台,会跟着打印日志,再打开 ES ,创建我们配置好的查询索引,神奇的事情发生了,日志一条一条的展示出来。
再结合 TraceId 进行搜索,简直逆天!
同样是下载 FileBeat 。
修改配置文件
filebeat.inputs: - type: log enabled: true paths: - /Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/*.log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 2 setup.kibana: host: "localhost:5601" output.elasticsearch: hosts: ["localhost:9200"] processors: - add_host_metadata: ~ - add_cloud_metadata: ~
因为 Filebeat 是基于监控日志文件有没有新增来同步数据的,所以需要配置日志文件的目录。
可以直接输出到 ES ,也可以输出到 Logstash 。二选一!
再配置 logback.xml
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--日志文件输出位置--> <File>/Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/user.log</File> <encoder> <!--[%X{requestId}] 线程id,方便排查日志--> <pattern>%date %level [%thread] [%X{requestId}] [%logger{36}.%method\(\):%line] %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 添加.gz 历史日志会启用压缩 大大缩小日志文件所占空间 --> <!--<fileNamePattern>/home/log/stdout.log.%d{yyyy-MM-dd}.log</fileNamePattern>--> <fileNamePattern> /Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/user-%d{yyyy-MM-dd}.log </fileNamePattern> <maxHistory>3</maxHistory><!-- 保留 3 天日志 --> </rollingPolicy> </appender> <root> <appender-ref ref="FILE"/> </root>
再次启动项目,发现日志已写入文件
进入 ES 查询,同样查询到日志。
经过测试,FileBeat 的日志收集延迟时间要比 Logstash 长,毕竟基于文件进行同步,可以理解,而且本身业务实时性要求不高。
关于“TraceId怎么搭配ELK使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“TraceId怎么搭配ELK使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。