指标命名是什么
在 Prometheus 与 OpenTelemetry 生态里,指标名加标签共同构成一条时间序列的唯一标识。社区约定:小写 snake_case、带单位后缀、计数器以 _total 结尾、数值统一用基本单位(秒、字节)。命名统一之后,看板、告警与记录规则才能跨服务复用;命名混乱时同一件事在不同服务里会写成三个名字,查询与规则都要逐服务适配。维度信息交给标签承载,不拼进指标名。
基本信息
| 适用范围 | Prometheus / OpenTelemetry 指标 |
|---|---|
| 命名风格 | 小写 snake_case,可含数字与下划线 |
| 单位后缀 | _seconds、_bytes 等,只写基本单位 |
| 计数器后缀 | _total(累计值) |
| 维度承载 | 用标签承载,不拼进指标名 |
| 子系统前缀 | nginx_、mysqld_ 等限定来源 |
典型使用场景
- 新服务接入监控时先定指标名,再写埋点代码,避免上线后大规模改名
- 多团队共用一块看板时靠统一命名让同名指标口径一致
- 写记录规则与告警表达式时直接匹配目标指标,不必逐服务适配
- 把 promtool check metrics 接入采集端质量门禁,拦截不合规范的命名
- 系统迁移或重构时对比新旧指标名,确认单位没有悄悄变化
- 做容量与成本分析时靠命名把同类指标批量检索出来
常用单位后缀约定
常用单位后缀约定
_seconds / _milliseconds 时间
_bytes 大小
_total 计数器累计值
_info 静态元信息(值恒为 1)
_timestamp_seconds 时间点
_ratio 无量纲比例(0-1)命名规则
| 规则 | 正例 | 反例 |
|---|---|---|
| 小写 snake_case | http_request_duration_seconds | httpRequestDuration |
| 用基本单位 | request_size_bytes、latency_seconds | request_size_kb、latency_ms |
| Counter 后缀 _total | requests_total | requests_count |
| 含义具体可组合 | node_network_receive_bytes_total | data1、value |
| 名称不含标签值 | http_requests_total{code="500"} | http_500_requests |
指标名加子系统前缀(如 nginx_、mysqld_)便于按来源筛选,也降低不同 exporter 之间重名的概率。
单位只能写一次且不可变:把 ms 改成 s 会让历史序列与新建序列在图上拼成两条曲线,同一看板出现相差 1000 倍的数值。
OpenTelemetry 的语义约定与 Prometheus 惯例大体一致,但 SDK 侧常用 UCUM 单位(如 ms),导出到 Prometheus 时由 exporter 统一换算成秒与字节。