OpenTelemetry,简称OTel,是一个供应商中立的开源可观测性框架,用于检测、生成、收集和导出遥测数据,例如跟踪、度量、日志。作为一种行业标准,它受到许多供应商的原生支持
OpenTelemetry支持的遥测类别
Trace
Trace为我们提供了用户或应用程序发出请求时发生的情况的总体情况。OpenTelemetry提供跟踪我们的微服务和相关应用程序,为我们提供了一种在生产环境中实现可观察性的方法
Metric
Log
Baggage
OpenTelemetry如何促进应用程序的自动或手动检测
OpenTelemetry项目有助于应用程序的检测。为每种语言提供了一个核心存储库。例如,Java检测库提供了以下存储库:
- Core:提供OpenTelemetry API和SDK的实现,可用于手动检测应用程序
- Instrumentation:所有核心功能以及各种库和框架的自动检测
- Contrib:可选组件,例如JMX度量收紧
链路追踪怎么前后端串联
OpenTelemetry实现了不同语言的SDK,前端链路主要通过opentelemetry-js实现,后端也有相关语言的实现,比如Java、GO、Python等,不同语言将各自的trace信息统一上报。必须使用相同的传播器
链路追踪怎么关联相应日志和指标
以Java语言为例,opentelemetry-java通过javaagent方式注入到应用当中,应用产生trace信息后,通过设置MDC可以把traceId和spanId作为参数传递给log,这样log在输出的时候便会带上traceId和spanId
MDC:映射诊断上下文,一种用于区分来自不同来源的交错日志输出的工具 - log4j MDC 文档
提示:对于使用logback的Spring Boot配置,可以通过仅覆盖以下内容将MDC添加到日志行
logging.pattern.level:logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p这样,解析应用程序日志的任何服务或工具都可以将trace/span与日志语言相关联