TraceId怎么搭配ELK使用

需求分析

先分析一下,我们想实现的核心功能是搜索,必然是用 ES 实现,那问题就转换成如何将日志收集并存储到 ES

日志大家都不陌生了,可以在控制台打印,也可以存入文件,那能不能直接输入 ES 呢,好像没听说过。

这里就要用到 Logstash 来收集日志,Spring 默认的日志框架 Logback 已经对其提供了支持,我们要做的只是编写配置文件。

Logstash 有个问题就是非常占用内存,所以本文后面会介绍另一个比较轻量级的日志收集工具 FileBeat ,由 Go 语言编写。

同时对于真实的线上环境为了保证吞吐量和可靠性,都会引入 Kafka 进行解耦,本文不做演示。

下面就进入实战部分,搭建一套日志收集与搜索系统。

ES

本文使用 7.14.2 版本。下载下来解压就行,不废话。

TraceId怎么搭配ELK使用

修改配置文件

进入 config 目录:

# elasticsearch.ymlpath.data: /Users/li/programs/elasticsearch-7.14.2/datapath.logs: /Users/li/programs/elasticsearch-7.14.2/logsingest.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/

TraceId怎么搭配ELK使用

kibana

下面再安装 ES 的可视化工具,下载地址同上,版本号同上。

TraceId怎么搭配ELK使用

修改配置文件

# kibana.ymlserver.port: 5601server.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/

TraceId怎么搭配ELK使用

新增数据并查询

PUT /ecommerce/product/1 {     "name" : "gaolujie yagao",     "desc" :  "gaoxiao meibai",     "price" :  30,     "producer" :  "gaolujie producer",     "tags": [ "meibai", "fangzhu" ] }GET /ecommerce/product/1

Logstash

下载地址同上,版本号同上。

TraceId怎么搭配ELK使用

拷贝配置文件 logstash-sample.conf

# logstash-log-boot.confinput {  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

Logback

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怎么搭配ELK使用

再结合 TraceId 进行搜索,简直逆天!

TraceId怎么搭配ELK使用

Filebeat

同样是下载 FileBeat 。

TraceId怎么搭配ELK使用

修改配置文件

filebeat.inputs:- type: log  enabled: true  paths:    - /Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/*.logfilebeat.config.modules:  path: ${path.config}/modules.d/*.yml  reload.enabled: falsesetup.template.settings:  index.number_of_shards: 2setup.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>

再次启动项目,发现日志已写入文件

TraceId怎么搭配ELK使用

进入 ES 查询,同样查询到日志。

经过测试,FileBeat 的日志收集延迟时间要比 Logstash 长,毕竟基于文件进行同步,可以理解,而且本身业务实时性要求不高。

TraceId怎么搭配ELK使用

关于“TraceId怎么搭配ELK使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“TraceId怎么搭配ELK使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

文章标题:TraceId怎么搭配ELK使用,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27355

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年9月20日 上午12:20
下一篇 2022年9月20日 上午12:21

相关推荐

  • MyBatisPlus QueryWrapper多条件查询及修改方法是什么

    gt、ge、lt、le、isNull、isNotNull 大于 > 例: gt(“age”, 18) &rarr; age > 18 ge 大于等于 >= 例: ge(“age”, 18) &rarr; age &gt…

    2022年9月21日
    68300
  • Android开发怎么自定义实时图表控件

    今天分享文章“Android开发怎么自定义实时图表控件”,主要从:演示、环境、实现、第十一步:绘制等几个方面为大家介绍,希望能帮到您。 演示 环境 开发工具:Android Studio 开发语言:Kotlin 实现 第一步:新建项目RealTimeChartDemo 第二步:新建RealTimeC…

    2022年6月29日
    9700
  • javascript可不可以加密

    javascript可以加密;一般的JavaScript代码基本没有必要加密,加密都会把体积变大影响加载速度,如果是敏感的业务,则可以对JavaScript代码进行加密,在书写业务代码的时候就要设计到安全问题,一般最好是把整体业务做拆分,核心计算的业务最好放到后台,把简单的逻辑搞复杂化然后加密。 本…

    2022年9月1日
    8600
  • idaPro如何分析app解密lua脚本

    通过前面idaPro调试或hook,我们可以获取到xxtea解密key,对于sign我们可以直接打开原文件: 可以看到sign值:byds。所以,我们可以同过xxtea解密工具(可从GitHub上下源码自己编译)试着解密: 以index.luac为例,我们看index.luac解密前后变化: 我们看…

    2022年9月21日
    12900
  • Redis集群与扩展知识点分析

    Redis的高可用 1.为什么要高可用 防止单点故障,造成整个集群不可用 实现高可用通常的做法是将数据库复制多个副本以部署在不同的服务器上,其中一台挂了也可以继续提供服务 Redis实现高可用有三种部署模式:主从模式,哨兵模式,集群模式 2.主从模式 主节点负责读写操作 从节点只负责读操作 从节点的…

    2022年9月15日
    7400
  • apache flink任意jar包上传导致远程代码执行的示例分析

    漏洞描述: 2019年11月11号,安全工程师Henry Chen披露了一个Apache Flink未授权上传jar包导致远程代码执行的漏洞。由于Apache Flink Dashboard 默认无需认证即可访问,通过上传恶意jar包并触发恶意代码执行,从而获取shell。 影响范围 <= 1…

    2022年9月18日
    18800
  • 如何分析APP测试及流程

    目前工作中,测试App会涉及到一下几个方面:客户端、小程序、h6页面等,看似不同却又大相径庭。 点击添加图片描述(最多60个字) 1、功能模块测试:功能模块测试其实最重要的是考察测试者的逻辑思维能力和对需求的理解能力以及一些页面交互性,输入输出的考虑等,所以以上三者是共通的,没有太大的区别。 2、权…

    2022年9月2日
    7000
  • 知识库搭建的关键点有哪些

    按照知识管理中心(Knowledge Management Center)的研究和咨询实践,知识库建设必须遵循以下核心关键点:1、界定核心知识;2、控制知识产出;3、知识内容的组织;4、知识的利用;5、知识的创新应用。 当然,在你正式开始搭建知识库之前,最好是有一个合适的在线企业知识库管理系统,我们…

    2022年3月18日
    42400
  • windows默认网关不可用怎么修复

    修复方法: 第一步:右击windows,选择设备管理器。 第二步:点击系统设置,找到intel(R)management右击,双击属性。 第三步:点击电源管理,将节约电源(A)取消勾选。 第四步:打开网络管理中心,选择更改适配器选项。 第五步:右击以太网,点击属性。 第六步:选择协议版本4,双击。 …

    2022年9月21日
    4100
  • 电脑驱动位置如何查看

    电脑驱动查看方法: 1、首先我们点击任务栏中的搜索按钮。 2、打开搜索栏后,在其中搜索并打开“设备管理器” 3、双击打开想要查看的电脑驱动程序。 4、然后点击上方的“驱动程序”选项卡。 5、点击“驱动程序详细信息” 6、然后在图示位置就可以看到电脑驱动信息了。 7、如果你觉得操作比较麻烦可以尝试使用…

    2022年9月21日
    16100
联系我们
关注微信
关注微信
分享本页
返回顶部
PingCode 比 Jira 更好用的研发管理工具。免费试用         文章及站点合作,请添加微:All-FeiFei