当前位置: 首页 > news >正文

OpenTelemetry学习笔记(十二):在APM系统中,属性的命名空间处理遵循规则

在APM系统(如Elastic APM或Jaeger)中,属性的命名空间处理遵循明确的规则。以下是完整的解析:


1. 属性自动分配规则

当您设置的属性 没有明确前缀(如span.service.)时,APM系统会根据上下文自动分类:

属性类型存储位置示例典型用途
无前缀属性存入labelstags{"http.method": "GET"}通用业务标签
span.前缀Span专属字段{"span.duration.us": 4867}Span技术指标
service.前缀Service元数据{"service.name": "frontend"}服务标识

2. 无前缀属性的去向

(1) Elastic APM 的处理方式
{"span": {"id": "abc123","duration": 4867,"tags": {  // 无前缀属性落在这里"http.method": "GET","rpc.service": "CurrencyService"}}
}
(2) Jaeger 的处理方式
{"process": {"serviceName": "frontend","tags": []  // service.前缀属性},"spans": [{"spanID": "abc123","operationName": "GET /cart","tags": [  // 无前缀和span.前缀属性混合{"key": "span.duration.us", "value": 4867},{"key": "http.method", "value": "GET"}]}]
}

3. 代码中的最佳实践

(1) 明确前缀的场景
// 必须加前缀的情况
attributes.put("service.name", "frontend")  // 服务标识.put("span.duration.us", 4867);   // Span技术指标// 会被APM特殊处理的字段(即使不加前缀)
.put("http.method", "GET")     // 自动识别为HTTP协议
.put("db.statement", "SELECT * FROM users") // 自动识别为数据库调用
(2) 无需前缀的场景
// 业务自定义标签(不加前缀)
.put("user.id", "12345")
.put("checkout.step", "payment");// 协议标准字段(可不加前缀,但建议明确)
.put("rpc.method", "GetProduct")  // 等效于 span.rpc.method

4. 自动映射的常见字段

即使不加前缀,APM也会自动识别这些标准字段:

原始字段自动映射为来源规范
http.methodspan.http.methodOpenTelemetry语义约定
db.systemspan.db.system
rpc.servicespan.rpc.service
messaging.destinationspan.messaging.destination

5. 调试技巧

检查最终上报的数据结构:

// 在exportSpan方法末尾添加日志
System.out.println("上报属性: " + attributes.build().asMap());

输出示例:

{"service.name": "frontend","span.duration.us": 4867,"http.method": "GET",       // 自动归类到span"user.id": "12345"          // 存入tags区
}

关键结论

  1. 技术性字段:建议显式添加span.service.前缀确保准确性
  2. 业务标签:无需前缀,APM会自动存入tags
  3. 协议标准字段:如http.*/db.*等,不加前缀也能被正确识别,但显式声明更可靠

通过这种设计,APM系统可以在保持灵活性的同时,确保技术元数据的结构化存储。

http://www.dtcms.com/a/297976.html

相关文章:

  • React框架的Ant Design漫游组件的使用
  • AKS部署.Net Shopping
  • 关于网络模型
  • ElastAlert通过飞书机器人发送报警通知
  • 三、操作系统——第2章:CPU
  • 数学专业转型大数据发展指南
  • Linux网络框架分析
  • 用毫秒级视频回传打造稳定操控闭环之远程平衡控制系统技术实践
  • Qt 多媒体开发:音频与视频处理
  • DNS 协议
  • 服务器安装虚拟机全步骤
  • MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析
  • Oracle不完全恢复实战指南:从原理到操作详解
  • OpenCV 图像变换全解析:从镜像翻转到仿射变换的实践指南
  • Undertow 可观测性最佳实践
  • 医疗器械:DFEMA和PFEMA
  • 【嵌入式汇编基础】-ARM架构基础(二)
  • 锁相环技术简介(面向储能变流器应用)
  • 从Taro的Dialog.open出发,学习远程控制组件之【事件驱动】
  • Langchain学习——PromptTemplate
  • Class21卷积层的多输入通道和多输出通道
  • 基于纳米流体强化的切割液性能提升与晶圆 TTV 均匀性控制
  • 轻量级音乐元数据编辑器Metadata Remote
  • [NPUCTF2020]ReadlezPHP
  • iOS —— 天气预报仿写总结
  • SQL164 2021年11月每天新用户的次日留存率
  • ReAct Agent(LangGraph实现)
  • 去除视频字幕 2, 使用 PaddleOCR 选取图片中的字幕区域, 根据像素大小 + 形状轮廓
  • MCP 与传统集成方案深度对决:REST API、GraphQL、gRPC 全方位技术解析
  • react 内置hooks 详细使用场景,使用案例