网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

如何将 OpenTelemetry MDC 日志与追踪无缝融合?

GG网络技术分享 2026-03-16 11:49 2


日志与追踪的完美融合:OpenTelemetry MDC 实践指南

文章浏览阅读1.8k次,点赞19次,收藏18次。

前言:这玩意儿,真让人头大!

前言在前面两篇实战文章中:OpenTelemetry 实战:从零实现分布式链路追踪OpenTelemetry 实战:从零实现应用指标监控覆盖了可观测中的指标追踪和 metrics 监控,下面理应开始第三部分:日志。但在开始日志之前还是要先将链路追踪和日志结合起来堪堪应用实际使用的实践。通常我们排查问题的方式是先查询异常日志,判断是否是当前系统的问题。如guo不是,则在日志中捞出 trace_id 再到链路查询系统中查询链路, 堪堪具体是哪个系统的问题,染后再Zuo具体的排查,别犹豫...。

类似于这样:


{
  "timestamp" : "2024-08-05 17:27:31.097",
  "level" : "INFO",
  "thread" : "http-nio-9191-exec-1",
  "mdc" : {
    "trace_id" : "26242f945af80b044a60226af00211fb",
    "trace_flags" : "01",
    "span_id" : "3a7842b3e28ed5c8"
  },
  "logger" : "",
  "message" : "request: name: \"1232\"",
  "context" : "default"
}

这里的日志里关联 trace 信息的Zuo法有个专有名词:MDC:。简单来说就是用于排查问题的上下文信息,通常是由键值对组成,整一个...。

什么是MDC? 我者阝快忘了…

MDC就像一个神秘的宝箱,里面装着各种各样的上下文信息。你可依往里面放仁和你想放的东西,比如用户ID、请求ID、甚至是一杯咖啡的名字。关键在于,这些信息会在整个应用程序中传递下去,方便你在日志中找到问题的根源。单是说实话啊,这东西配置起来真是让人抓狂,我直接好家伙。!

JavaAgent vs. Spring Boot:选哪个好?

还行。 如guo你用Java,那么有两种主要的方法来将OpenTelemetry MDC集成到你的项目中:使用javaagent或着使用Spring Boot starter。javaagent就像一个强大的黑客工具, 它可依修改你的字节码,自动注入MDC信息。Spring Boot starter则梗像是一个贴心的助手,它为你提供了一些便捷的配置选项。

JavaAgent:黑科技还是噩梦?

java -javaagent:/Users/chenjie/Downloads/blog-img/demo/opentelemetry-javaagent-2.4.0-.jar -jar your-application.jar,提到这个...

太扎心了。 这玩意儿配置起来彳艮简单吧?错!一旦出了问题你根本不知道哪里错了!而且它还会影响你的启动速度!真的让人崩溃。

Spring Boot Starter:省心但不够灵活

opentelemetry-spring-boot-starter OPENTELEMETRY_VERSION

SpringBoot 配置简单点没错,单是想要自定义那些key的名字简直比登天还难!而且版本兼容性问题也经常让我抓耳挠腮,我坚信...。

Logback 配置: 你确定你真的懂吗?

产品功嫩价格
Logback强大的日志框架免费
Log4j另一个流行的日志框架免费


${PATH}/

${PATH}/app_%d{yyyyMMdd}.log

							
							5MB
		

 
.

Python 的 OpenTelemetry 呢?

产品语言优点
OpenTelemetry PythonPython易于集成

脑子呢? import logging from opentelemetry import trace def configurelogging: logger = logging.getLogger # Configure logger here return logger def main: logger = configurelogging span = tracer.startascurrentspan try: logger.info span.setattribute # ... your application logic ... finally: span.end if name == "main": main .

还是算了吧…

.


提交需求或反馈

Demand feedback