OpenTelemetry 入门

OpenTelemetry 是什么?

OpenTelemetry (OTel) 是一个开源可观测性框架,允许开发团队以单一、统一的格式生成、处理和传输遥测数据(telemetry data)

OpenTelemetry 提供与供应商无关的 SDK、API 和工具,因此你的数据可以发送到任何可观测性后端进行分析。

数据埋点

应用程序的监测数据可以使用自动或手动方式生成

传播器

可以将 W3C tracecontextbaggageb3 等传播器(Propagators)添加到配置中

  • Trace context:用于在 HTTP headers 中编码 trace 数据,以便在不同的服务间传递这些数据
  • Baggage:用于在 span 之间传递键值对数据,例如用户ID、请求 ID 等。
  • B3:用于在 HTTP headers 中编码 trace 数据,以便在不同的服务间传递这些数据(主要用于 Zipkin 或其兼容的系统)。

采样

采样是一种通过减少收集和发送到后端的追踪样本数量来控制 OpenTelemetry 引入的噪声和开销的机制。

OpenTelemetry 协议(OTLP)

OpenTelemetry 协议(OTLP)规范描述了遥测数据在遥测源、收集器和遥测后端之间的编码、传输和传递机制。

每种语言的 SDK 都提供了一个 OTLP 导出器,可以配置该导出器来通过 OTLP 导出数据。然后,OpenTelemetry SDK 会将事件转换为 OTLP 数据。

OTLP 是代理(配置为导出器)和收集器(配置为接收器)之间的通信

采集器

收集器是 OpenTelemetry 的一个组件,它接收遥测数据(span、metrics、logs 等),处理(预处理数据)并导出数据(将其发送到想要的通信后端)


Receivers

接收器 Receivers 是数据进入收集器的方式,可以是推送或拉取。OpenTelemetry 收集器可以以多种格式接收遥测数据。

Processors

处理器在接收和导出之间处理数据,且是可选的,非必要。

批处理器接收跨度、指标或日志,并将它们放入批次中。批处理有助于更好地压缩数据,减少传输数据所需的传出连接数量。该处理器支持基于大小和时间的批处理。

Exporters

导出器是 OpenTelemetry 的一个组件,也是数据发送到不同系统/后端的方式。比如 console exporter 是一种常见的导出器,对于开发和调试任务非常有用,他会将数据打印到控制台。

在 exporters 部分,可以添加更多目的地或形式:https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporters

快速体验------以JS为例

官方实现:https://github.com/open-telemetry/opentelemetry-js

1、安装

yaml 复制代码
npm install --save @opentelemetry/api
npm install --save @opentelemetry/sdk-node
npm install --save @opentelemetry/auto-instrumentations-node

2、设置追踪

js 复制代码
// tracing.js

'use strict'

const process = require('process');
const opentelemetry = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-base');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const { ATTR_SERVICE_NAME } = require('@opentelemetry/semantic-conventions');

// configure the SDK to export telemetry data to the console
// enable all auto-instrumentations from the meta package
const traceExporter = new ConsoleSpanExporter();
const sdk = new opentelemetry.NodeSDK({
  resource: resourceFromAttributes({
    [ATTR_SERVICE_NAME]: 'my-service',
  }),
  traceExporter,
  instrumentations: [getNodeAutoInstrumentations()]
});

// initialize the SDK and register with the OpenTelemetry API
// this enables the API to record telemetry
sdk.start();

// gracefully shut down the SDK on process exit
process.on('SIGTERM', () => {
  sdk.shutdown()
    .then(() => console.log('Tracing terminated'))
    .catch((error) => console.log('Error terminating tracing', error))
    .finally(() => process.exit(0));
});

3、运行

yaml 复制代码
node -r ./tracing.js app.js
相关推荐
小徐_233311 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
天蓝色的鱼鱼14 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
泯泷15 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花15 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷15 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜15 小时前
Spring Boot 核心知识点总结
前端
lichenyang45315 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端
古夕15 小时前
第三方 SSO 接入实践:redirect_uri 编码、回调一致性与跨项目联调
前端·vue.js
朦胧之15 小时前
页面白屏卡住排查方法
前端·javascript