埋点方式是什么
接入可观测性有三类埋点方式,各有边界:自动插桩零代码改动、覆盖框架层(HTTP、数据库、消息);手动埋点需要改代码,但能补上业务语义;eBPF 等无侵入采集适合难以改造的存量系统。实际项目通常是组合使用——自动插桩打底,手动埋点补关键路径。
基本信息
| 自动插桩 | 无代码改动,挂 agent 或依赖库 |
|---|---|
| 手动埋点 | 需要改代码,精确到业务方法 |
| 无侵入采集 | eBPF 等内核/网络层观测 |
| 自动插桩覆盖 | HTTP、DB、消息等通用框架 |
| 常见实现 | Java agent、各语言 SDK、eBPF 工具 |
| 组合策略 | 自动打底 + 关键路径手动补 |
典型使用场景
- 存量服务快速接入:先挂 agent 拿到框架级指标与链路
- 关键业务路径(支付、下单)手动补 span 与业务指标
- 无法改代码的第三方系统用无侵入方式采集网络与调用指标
- 新项目立项时即按规范埋点,避免后期返工
- 性能剖析场景下用无侵入工具先定位热点再决定改造点
- 多语言技术栈用统一的 SDK 规范保证字段与命名一致
Java 应用挂载 OpenTelemetry agent
Java 应用挂载 OpenTelemetry agent
# 零代码改动接入:把 agent 挂到 JVM 启动参数
java -javaagent:/opt/otel/opentelemetry-javaagent.jar \
-Dotel.service.name=order-api \
-Dotel.exporter.otlp.endpoint=http://otel-collector:4317 \
-Dotel.traces.sampler=parentbased_traceidratio \
-Dotel.traces.sampler.arg=0.1 \
-jar order-api.jar方式对比
| 方式 | 代码改动 | 覆盖范围 | 适用场景 |
|---|---|---|---|
| 自动插桩 | 无(挂 agent/依赖库) | 框架级:HTTP、DB、消息 | 快速接入标准技术栈 |
| 手动埋点 | 需要改代码 | 精确到业务方法 | 业务指标、关键路径增强 |
| 无侵入采集 | 无 | 内核与网络层观测 | 难以改造的存量系统 |
自动插桩拿到的是框架语义(如 HTTP 状态码),业务语义(订单类型、渠道)仍需手动补充,两者不是替代关系。
埋点方式要与采集架构一起设计:agent 挂载位置、采样策略与导出端点若各自为政,后期会积累大量重复字段与不一致命名。
自动插桩有一定性能开销(尤其是高流量服务),接入前应在预发环境实测,必要时通过采样与关闭无关插件来收敛。
无侵入采集看到的更多是网络与系统调用视图,业务字段通常缺失,适合定位「调用在哪一层变慢」而非回答业务问题。