微服务下链路追踪与日志埋点第三篇-日志埋点

上文讲到链路追踪赋予了我们tranceID、spanId、parentSpanId,这为我们提供了日志之间的关联关系。接下来我们需要通过这几个字段来为系统日志分析做下铺垫。大致思路如下:

  1. 将链路信息传入logger,并输出到日志文件中
  2. 将额外信息【如前端传过来的业务信息】传入logger,并输出到日志文件中
  3. 将日志格式化,比如说格式化为json
  4. 发送日志/采集日志

spring could sleuth中信息如何添加到日志中。

建议这里看官方文档-日志集成部分。

sleuth已经帮我们将链路信息存放到MDC中了。因此我们在日志文件中直接获取即可

%X{traceId},%X{spanId},%X{parentSpanId}

针对前段传递的额外信息。我们可以申明一个拦截器或者过滤器,获取对应字段。然后通过sleuth提供的tracer对象来将属性传递到MDC【实际上就是一个本地线程】中

//通过自动注入的Tracer对象创建baggage将信息传递到MDC中
//注意,如果说你 想让这些信息在整个链路中流转,那信息应该要尽可能的少,因为比较费时间。
this.tracer.createBaggage("A","B");

如此一来,我们的日志已经具备我们需要的所有信息了,可惜他现在是一个纯文本,解析起来很困难【解析是为了更好地呈现】。

日志格式化-logstash

通过添加logstash-logback-encoder依赖,再配置日志文件,就可以轻松实现日志信息json化。


            
                
                    UTC
                
                
                    
                        {
                        "timestamp": "@timestamp",
                        "severity": "%level",
                        "service": "${springAppName:-}",
                        "trace": "%X{traceId:-}",
                        "span": "%X{spanId:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    
                
            
        

日志汇聚

如今我们已经具备了一堆可解析的有效日志,接下来我们需要将日志汇聚到某一个可视化程序上帮助我们展示出来。

1:通过实现 EncoderBase类,为日志增加消息发送能力【如日志直接发送到kafka】

2:通过logstash做日志采集发送到指定位置。【这里的logstash已经指的是一种文件采集生态了,你想使用flume做日志采集发送也可以。没有差别】

到这里我想聊的东西已经聊完了,日志能够被采集之后,只需采集-解析-呈现即可。成熟的方案就是elk了。

流程已经通了,接下来需要的就是经验知识-如何设计日志字段才能更好的为业务,为系统做支撑?

关于页面埋点主要是通过事件监听,以及前端手动埋点去触发的,具体情况具体分析,这里就不好说啥了。

peace and love

展开阅读全文

页面更新:2024-03-27

标签:日志   看官   上文   字段   线程   过滤器   中将   差别   属性   思路   对象   业务   文件   系统   科技   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top