指标和标签命名

使用 Prometheus 不需要本文档中介绍的度量标准和标签约定,但是可以用作风格指南和最佳实践的集合。各个组织可能希望采用其中的一些做法,如命名约定,有所不同。

指标名称

指标名称...

  • ...必须符合数据模型中的有效字符

  • ...应具有与度量标准所属域相关的(单个单词)应用程序前缀。客户端库有时将该前缀称为namespace。对于特定于应用程序的数据指标,前缀通常是应用程序名称本身。但是,有时数据指标更为通用,例如客户端库导出的标准化数据指标。例如:

    • prometheus_notifications_total(特指 Prometheus 服务)

    • process_cpu_seconds_total(由许多客户端库导出)

    • http_request_duration_seconds(对于所有的 HTTP 请求)

  • ...必须由一个单位(如,不要将秒与毫秒或秒与字节混合)

  • ...应当使用基本单位(如. seconds, bytes, meters - 而不是 milliseconds, megabytes, kilometers).参见以下基本单位列表.

  • ...应以单位的复数形式进行描述。请注意,如果适用,除单位外,累加计数还具有total作为后缀

    • http_request_duration_seconds

    • node_memory_usage_bytes

    • http_requests_total(用于无单位的累计计数)

    • process_cpu_seconds_total(用于带单位的累加计数)

    • foobar_build_info

      (用于提供有关正在运行的二进制文件的元数据的伪度量)

  • ...应该在所有标签维度上表示相同的逻辑事物

    • 请求时长

    • 数据传输字节

    • 瞬时资源使用率(百分比)

根据经验,给定指标所有维度上的sum()avg()都应该有意义(尽管不一定有用)。如果没有意义,请将数据分成多个指标。 如,在一个数据指标中具有各种队列的容量是好的,而将队列的容量与队列中当前元素的数量混合则不行。

标签

使用标签来区分被测物的特征:

  • api_http_requests_total - 区分请求类型: operation="create|update|delete"

  • api_request_duration_seconds - 区分请求阶段: stage="extract|transform|load"

不要将标签名称放在度量标准名称中,这会引入冗余,且如果将各个标签汇总在一起会引起混淆。

警告: 请记住,键值标签对的每个唯一组合都代表一个新的时间序列,这可以大大增加存储的数据量。请勿使用标签存储具有高基数(许多不同的标签值)的维度,例如用户 ID,电子邮件地址或其他无限制的值集。

警告: 请记住,键值标签对的每个唯一组合都代表一个新的时间序列,这可以大大增加存储的数据量。请勿使用标签存储具有高基数(许多不同的标签值)的维度,例如用户 ID,电子邮件地址或其他无限制的值集。

基本单位

Prometheus没有任何单位的硬编码。为了获得更好的兼容性,应使用基本单位。以下列出了一些数据指标序列及其基本单位。该列表并不详尽。

Family
Base unit
Remark

Time(时间)

seconds(秒)

Temperature(温度)

celsius(摄氏温度)

由于实践原因,celsius 优于 kelvin

Length(长度)

meters(米)

Bytes(字节数)

bytes(字节)

Bits(位)

bytes(字节)

为了避免混淆不同的度量标准,请始终使用 bytes,即使 bits 看起来更常见

Percent(百分比)

ratio(比率)

值是 0-1(而不是0-100). ratio 仅用作 disk_usage_ratio 之类的后缀。常用指标名称遵循模式 A_per_B

Voltage(电压)

volts(伏特)

Electric current(电流)

amperes

Energy(能量)

joules(焦耳)

Mass(质量)

grams(克)

gramskilograms 更可避免 kilo 前缀出现问题.

最后更新于