当前位置: 首页 > 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.lryc.cn/news/599443.html

相关文章:

  • 基于讯飞星火AI的文学作品赏析系统开发实战:从通用聊天到专业文学分析的完整技术方案
  • 新房装修是中央空调还是壁挂空调好?
  • 滑动窗口---6(稍难)
  • GDB调试命令学习
  • 【开源软件】SimpleAI一款轻量级的桌面随身AI助手
  • 航段导航计算机 (Segment_Navigator) 设计与实现
  • OSPF 协议(多区域)
  • Python智能优化算法实战指南
  • 汪小菲食通达公司成立新零售公司,布局餐饮零售新赛道
  • 轻量级音乐元数据编辑器Metadata Remote
  • SpringBoot整合Liquibase提升数据库变更的可控性、安全性、自动化程度(最详细)
  • 自动化UI测试工具TestComplete的AI双引擎:即时数据集 + 自愈测试
  • SpringBoot学习路径二--Spring Boot自动配置原理深度解析
  • Qt 多媒体开发:音频与视频处理
  • 剪映将绿幕视频扣成透明背景视频转webm格式可以在网页上透明播放
  • 软件工程之可行性研究:从理论到实践的全面解析
  • SpringBoot 集成Mybatis Plus
  • ESLint前端工程实践
  • CMake保姆级教程
  • 力扣1472. 设计浏览器历史记录
  • Execel文档批量替换标签实现方案
  • 三维图像识别中OpenCV、PCL和Open3D结合的主要技术概念、部分示例
  • 【vue3+vue-pdf-embed】实现PDF+图片预览
  • Ubuntu22 上,用C++ gSoap 创建一个简单的webservice
  • 前端学习9:JavaScript--对象与原型
  • vue3 组件生命周期,watch和computed
  • SIP广播对讲系统:构建高效智能的语音通信网络
  • KNN 算法进阶:从基础到优化的深度解析
  • docker compose xtify-music-web
  • DNS 服务正反向解析与 Web 集成实战:从配置到验证全流程