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

OpenTelemetry学习笔记(四):OpenTelemetry 语义约定,即字段映射(1)

在 OpenTelemetry 中,span.setAttribute(key, value)key 命名不是完全随意的,而是需要遵循一定的规范,以确保数据在 Elastic Observability(或其它后端系统)中能够正确解析、展示和分析。以下是关键规则和最佳实践:


1. 关键命名规则

(1) 优先使用 OpenTelemetry 语义约定(Semantic Conventions)

OpenTelemetry 定义了一套标准的属性命名规范(官方文档),用于统一不同场景下的字段命名。推荐优先使用这些标准属性,以便与 Elastic Observability 的内置功能无缝集成。

常见标准属性示例
场景标准属性名说明
用户信息enduser.id用户 ID(替代旧版 user.id
HTTP 请求http.method, http.status_codeHTTP 方法、状态码
数据库操作db.statement, db.systemSQL 语句、数据库类型
系统指标system.cpu.utilizationCPU 使用率
为什么重要?
  • Elastic Observability 原生支持 OpenTelemetry 语义约定,例如:
    • enduser.id 会自动关联到用户相关的分析(如用户行为追踪)。
    • http.method 会在 APM 服务的 HTTP 请求分布图中展示。
  • 使用非标准属性可能导致数据无法被 Elastic 的预定义仪表盘识别。

(2) 避免使用 user.* 前缀(已弃用)

在旧版 OpenTelemetry 中,user.id 是常见用法,但新版语义约定已将其替换为 enduser.id(参考)。
推荐span.setAttribute("enduser.id", "123456")
避免span.setAttribute("user.id", "123456")


(3) 自定义属性命名规范

如果标准属性无法满足需求,可以自定义属性,但需遵循以下原则:

  1. 使用小写字母和下划线(如 custom.field_name)。
  2. 避免特殊字符(如空格、点号 . 可能导致解析问题)。
  3. 添加命名空间前缀(如 app.business.)以区分自定义字段。
示例
span.setAttribute("app.login.method", "oauth2");       // 自定义应用属性
span.setAttribute("business.order_id", "ord_123");     // 业务相关属性

2. Elastic Observability 中的展示效果

(1) 标准属性的自动映射

  • enduser.id:在 Elastic APM 的“用户会话”分析中自动展示。
  • http.method:在 HTTP 服务概览图中显示请求方法分布。
  • db.statement:在数据库查询分析中显示 SQL 语句。

(2) 自定义属性的处理

  • 自动索引:自定义属性会被存储到 Elasticsearch 的 span 索引中,但默认不会出现在预定义仪表盘
  • 手动搜索/分析
    • 在 Kibana 的 Discover 中直接搜索字段名(如 span.attributes.app.login.method: "oauth2")。
    • Metrics/Logs 应用中创建自定义可视化图表。

3. 最佳实践总结

场景推荐做法
用户 IDspan.setAttribute("enduser.id", "123456")
HTTP 请求span.setAttribute("http.method", "GET")
数据库操作span.setAttribute("db.statement", "SELECT * FROM users")
自定义业务属性span.setAttribute("business.order_id", "ord_123")
自定义技术属性span.setAttribute("app.cache.hit", true)

4. 验证字段是否生效

  1. 在 Kibana 中检查
    • 打开 Discover,搜索 span.attributes.* 查看所有属性。
    • 确认标准属性(如 enduser.id)是否出现在预定义字段列表中。
  2. 在 APM 服务地图中验证
    • 如果属性关联到用户或 HTTP 请求,检查是否在对应分析模块中生效。

5. 常见问题

Q1: 为什么 user.id 在 Elastic 中不显示?

  • 新版 OpenTelemetry 已弃用 user.*,改用 enduser.*。需更新代码:
    // 错误(旧版)
    span.setAttribute("user.id", "123456"); 
    // 正确(新版)
    span.setAttribute("enduser.id", "123456");
    

Q2: 自定义属性如何用于告警?

  • 在 Elastic 中,可以通过 Kibana Alerting 基于自定义属性(如 app.error_count)创建规则。

Q3: 属性值支持哪些数据类型?

  • OpenTelemetry 支持 stringbooleannumberarray(部分后端可能限制类型)。

结论

  • 优先使用 OpenTelemetry 语义约定(如 enduser.idhttp.method),确保与 Elastic Observability 无缝集成。
  • 自定义属性需规范命名(小写、下划线、命名空间前缀),避免冲突。
  • 通过 Kibana 验证字段映射,确保数据在搜索、可视化和告警中可用。
http://www.lryc.cn/news/592474.html

相关文章:

  • 二、Dify 版本升级教程(LInux-openeuler)
  • 软件维护全维度解析:从修复到进化的生命周期管理
  • linux制作镜像、压缩镜像、烧录的方法
  • iOS 数据持久化
  • iOS 文件深度调试实战 查看用户文件 App 沙盒 系统文件与日志全指南
  • SpringAI核心特性与Prompt工程
  • SQLite 数据库字段类型-详细说明,数据类型详细说明。
  • VMware安装Win10教程(附安装包)虚拟机下载详细安装图文教程
  • 小程序常用api
  • PDF 拆分合并PDFSam:开源免费 多文件合并 + 按页码拆分 本地处理
  • 20250718-2-Kubernetes 应用程序生命周期管理-Pod对象:基本概念(豌豆荚)_笔记
  • Fiori 初学记录 官网 https://sapui5.hana.ondemand.com/ Samples 练习记录
  • springCloud -- 微服务01
  • 信息检索革命:Perplexica+cpolar打造你的专属智能搜索中枢
  • [simdjson] 填充字符串 | `document` 对象 | on-demand 模式
  • AI(day10)模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
  • 全球天气预报5天(经纬度版)免费API接口教程
  • JavaScript进阶篇——第九章 异常、this 与性能优化全解(终)
  • Agentic AI引领人力资源新范式:易路的技术进化与行业实践
  • Proto文件从入门到精通——现代分布式系统通信的基石(含实战案例)
  • IDEA插件离线安装
  • 手撕Spring底层系列之:Bean的生命周期
  • Diffusion-VLA 中的 Reasoning Token 注入机制解析:语言推理如何控制扩散模型?
  • 51c视觉~合集13
  • 第三章-提示词-初级:一文带你入门提示词工程,开启AI高效交互之旅(11/36)
  • ARCS系统机器视觉实战(直播回放)
  • TapData 出席 2025 MongoDB 用户大会新加坡站,分享构建实时统一数据平台最佳实践
  • Vue3 中使用 Element Plus 实现自定义按钮的 ElNotification 提示框
  • Django母婴商城项目实践(五)
  • Java 大视界 -- Java 大数据在智能医疗电子健康档案数据挖掘与健康服务创新中的应用(350)