无侵入注入OTEL链路跟踪

无侵入为程序注入otel链路跟踪,适配golang和python

go程序注入

使用 阿里开源的 go-agent, 在编译期间自动注入链路跟踪代码;编译出的二进制具备跟踪数据导出能力;

项目仓库
https://github.com/alibaba/loongsuite-go-agent

使用示例

1
2
3
4
5
6
7
8
# 原本的编译命令
go build -o myapp .

# 使用 loongsuite-go-agent 编译
otel go build -o myapp .

# 常规示例
otel go build -ldflags "-s -w -extldflags '-static'" -o cwx/xxx-api

启动程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 服务名字
export OTEL_SERVICE_NAME="new-api-prod"
# 目标端点
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://10.240.0.1:4318/v1/traces

# 不需要 METRICS 数据就关闭
export OTEL_METRICS_EXPORTER=none

# 附加资源属性-可选
export OTEL_RESOURCE_ATTRIBUTES="deployment.environment=production"

./xxx-api

因为代码是编译时注入的程序, 所以docker环境友好;

效果图

图1

python 程序注入

简介

通过 opentelemetry-instrument 启动程序时可以自动注入相关代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install

export OTEL_SERVICE_NAME="paper-coupon"
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://10.1.0.1:4317"
export OTEL_METRICS_EXPORTER="none"

# 使用 otel 启动 python 程序
opentelemetry-instrument python app.py

opentelemetry-bootstrap 命令会自动检测你的 Python 环境, 并为你已经安装的库(如 flask, requests)安装对应的插桩包

注意

  • 因为时运行时注入, 所以需要确保运行环境有相关的依赖, docker打包时需要注意
  • 对于多进程模型不友好, 需要注意在子进程中初始化跟踪。

效果图
图1

Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2025-11-30 00:00 UTC