本文档中介绍的指标和标签约定并非使用 Prometheus 的必要条件,但可以作为风格指南和最佳实践的集合。各个组织可能希望以不同的方式处理其中一些实践,例如命名约定。
指标名称...
namespace
。对于特定于应用程序的指标,前缀通常是应用程序名称本身。但是,有时指标更通用,例如客户端库导出的标准化指标。示例prometheus_notifications_total
(特定于 Prometheus 服务器)process_cpu_seconds_total
(由许多客户端库导出)http_request_duration_seconds
(适用于所有 HTTP 请求)total
作为后缀。另请注意,这适用于狭义的单位(如下表中的单位),但不适用于一般的可数事物。例如,connections
或 notifications
不被视为此规则的单位,并且不必位于指标名称的末尾。(另请参见下一段中的示例。)http_request_duration_seconds
node_memory_usage_bytes
http_requests_total
(对于无单位的累积计数)process_cpu_seconds_total
(对于带有单位的累积计数)foobar_build_info
(对于提供有关正在运行的二进制文件的元数据的伪指标)data_pipeline_last_record_processed_timestamp_seconds
(对于跟踪数据处理管道中最新处理记录的时间戳)prometheus_tsdb_head_truncations_closed_total
prometheus_tsdb_head_truncations_established_total
prometheus_tsdb_head_truncations_failed_total
prometheus_tsdb_head_truncations_total
prometheus_tsdb_head_series
)可能会在其中排序。prometheus_tsdb_head_closed_truncations_total
prometheus_tsdb_head_established_truncations_total
prometheus_tsdb_head_failed_truncations_total
prometheus_tsdb_head_truncations_total
根据经验,对给定指标的所有维度进行 sum()
或 avg()
应该是有意义的(虽然不一定有用)。如果它没有意义,请将数据拆分为多个指标。例如,在一个指标中包含各种队列的容量是好的,而将队列的容量与队列中当前元素的数量混合在一起则不好。
使用标签来区分被测量事物的特征
api_http_requests_total
- 区分请求类型:operation="create|update|delete"
api_request_duration_seconds
- 区分请求阶段:stage="extract|transform|load"
不要将标签名称放在指标名称中,因为这会引入冗余,并且如果聚合掉相应的标签,则会造成混淆。
Prometheus 没有硬编码任何单位。为了更好的兼容性,应使用基本单位。以下列表列出了一些指标族及其基本单位。该列表并非详尽无遗。
族 | 基本单位 | 备注 |
---|---|---|
时间 | 秒 | |
温度 | 摄氏度 | 出于实际原因,摄氏度优于开尔文。开尔文在特殊情况下(如色温或温度必须是绝对温度)可以接受作为基本单位。 |
长度 | 米 | |
字节 | 字节 | |
位 | 字节 | 为了避免混淆组合不同的指标,始终使用字节,即使在位显得更常见的情况下也是如此。 |
百分比 | 比率 | 值介于 0–1 之间(而不是 0–100)。ratio 仅用作 disk_usage_ratio 等名称的后缀。常用的指标名称遵循 A_per_B 模式。 |
电压 | 伏特 | |
电流 | 安培 | |
能量 | 焦耳 | |
功率 | 建议导出焦耳计数器,然后 rate(joules[5m]) 会为您提供瓦特功率。 |
|
质量 | 克 | 克优于千克,以避免 kilo 前缀的问题。 |
本文档是开源的。请提交 issue 或 pull request 以帮助改进它。