快速入门
OpenTelemetry 是一个可观测性框架和工具包, 旨在创建和管理遥测数据,如链路、 指标和日志。 重要的是,OpenTelemetry 是供应商和工具无关的,这意味着它可以与各种可观测性后端一起使用, 包括 Jaeger 和 Prometheus 这类开源工具以及商业化产品。
OpenTelemetry 不是像 Jaeger、Prometheus 或其他商业供应商那样的可观测性后端。 OpenTelemetry 专注于遥测数据的生成、采集、管理和导出。 OpenTelemetry 的一个主要目标是, 无论应用程序或系统采用何种编程语言、基础设施或运行时环境,你都可以轻松地将其仪表化。 重要的是,遥测数据的存储和可视化是有意留给其他工具处理的。
一句话总结:定义一套标准规范来生成、收集遥测数据。
官方文档:什么是 OpenTelemetry? | OpenTelemetry
什么是可观测性?
可观测性是通过检查系统输出来理解系统内部状态的能力。 在软件的背景下,这意味着能够通过检查遥测数据(包括链路、指标和日志)来理解系统的内部状态。
要使系统可观测,必须对其进行仪表化。也就是说,代码必须发出链路、指标或日志。 然后,仪表化的数据必须发送到可观测性后端。
为什么选择 OpenTelemetry?
随着云计算、微服务架构的兴起和日益复杂的业务需求,软件和基础设施的可观测性需求比以往任何时候都要强烈。
OpenTelemetry 满足可观测性的需求,并遵循两个关键原则:
- 你所生成的数据归属于你自己,不会被供应商锁定。
- 你只需要学习一套 API 和约定。
这两个原则的结合赋予团队和组织在当今现代计算世界中所需的灵活性。
OpenTelemetry 广泛应用于许多已集成 OpenTelemetry 提供默认可观测性的库、服务和应用。
OpenTelemetry 是云原生计算基金会 (CNCF)的一个项目,是由 OpenTracing 和 OpenCensus 项目合并而成的。原来这两个项目都是为解决同样的问题而创建的: 缺乏一种标准的方法来为代码进行仪表化并将遥测数据发送到可观测性后端。 由于这两个项目都无法独立解决这个问题,所以将其合并成立了 OpenTelemetry, 吸收了双方的优势,提供了统一的解决方案。
以 Java 语言实现特定的 OpenTelemetry
OpenTelemetry 是一个可观测性框架,包含 API、SDK 和工具,旨在帮助生成和收集应用程序遥测数据(例如指标、日志和跟踪记录)。
OpenTelemetry Java 由以下仓库组成:
- opentelemetry-java: 用于手动插桩的组件,包括 API 和 SDK,也包括扩展和 OpenTracing shim。
- opentelemetry-java-instrumentation: 建立在 opentelemetry-java 之上,并提供一个 Java agent JAR,可以附加到任何 Java 8+ 应用程序,并动态注入字节码,从许多流行的库和框架中捕获遥测数据。
Zero-code: Java agent
The Java agent is a form of zero-code automatic instrumentation that dynamically manipulates application bytecode.
For a list of libraries instrumented by the Java agent, see the “Auto-instrumented versions” column on supported libraries.
See Java agent for more details.
Zero-code: Spring Boot starter
The Spring Boot starter is a form of zero-code automatic instrumentation that leverages spring autoconfigure to install library instrumentation.
See Spring Boot starter for details.
OpenTelemetry Java SDK - 观测云文档
定义指标&使用
Meter meter = GlobalOpenTelemetry.getMeter("io.opentelemetry.example.metrics");
meter.gaugeBuilder("jvm.memory.total")
.setDescription("Reports JVM memory usage.")
.setUnit("byte")
.buildWithCallback(
result -> result.record(Runtime.getRuntime().totalMemory(), Attributes.empty()));
用户通过open telemetry api来定义指标,底层agent来实现公司相应的exporter来打通后端的真实存储。这样的好处,后面公司的存储系统发生了变化,业务程序不需要修改,可调整agent即可。