指标和标签命名

本文档中介绍的指标和标签约定对于使用 Prometheus 不是必需的,但可以作为样式指南和最佳实践的集合。各个组织可能希望以不同的方式处理其中的一些实践,例如命名约定。

指标名称

指标名称…

  • …必须符合数据模型中关于有效字符的规定。
  • …应该有一个与指标所属领域相关的(单词)应用程序前缀。该前缀有时被客户端库称为namespace。对于特定于应用程序的指标,前缀通常是应用程序名称本身。但是,有时指标更通用,例如客户端库导出的标准化指标。示例
    • prometheus_notifications_total(特定于 Prometheus 服务器)
    • process_cpu_seconds_total(许多客户端库导出)
    • http_request_duration_seconds(所有 HTTP 请求)
  • …必须具有单个单位(即不要混合秒和毫秒,或秒和字节)。
  • …应使用基本单位(例如秒、字节、米 - 不是毫秒、兆字节、公里)。请参阅以下基本单位列表。
  • …应使用后缀描述单位,并使用复数形式。请注意,累积计数除了适用单位外,还以total作为后缀。
    • 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(对于跟踪数据处理管道中最新处理记录时间的 时间戳)
  • …应该在所有标签维度上表示相同的事物被测量。
    • 请求持续时间
    • 数据传输的字节数
    • 瞬时资源使用率(百分比)

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

标签

使用标签来区分正在测量的事物的特征

  • api_http_requests_total - 区分请求类型:operation="create|update|delete"
  • api_request_duration_seconds - 区分请求阶段:stage="extract|transform|load"

不要将标签名称放在指标名称中,因为这会引入冗余,并且如果相应的标签被聚合掉,会导致混淆。

注意:请记住,每个唯一的键值标签对组合都表示一个新的时间序列,这会显着增加存储的数据量。不要使用标签来存储具有高基数(许多不同的标签值)的维度,例如用户 ID、电子邮件地址或其他无界的值集。

基本单位

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

基本单位 备注
时间
温度 摄氏度 出于实际原因,摄氏度优于开尔文。在特殊情况下(例如色温或温度必须为绝对值时),开尔文是可以接受的基本单位。
长度
字节 字节
比特 字节 为了避免组合不同指标时的混淆,始终使用字节,即使比特看起来更常见。
百分比 比率 值范围为 0-1(而不是 0-100)。ratio仅用作后缀,例如disk_usage_ratio。通常的指标名称遵循A_per_B模式。
电压 伏特
电流 安培
能量 焦耳
功率 建议导出焦耳的计数器,然后rate(joules[5m])会给出以瓦特为单位的功率。
质量 为了避免前缀引起的问题,优于千克

此文档为开源。请通过提交问题或拉取请求来帮助改进它。