可以使用简单的基于文本的展示格式将指标暴露给 Prometheus。有各种客户端库为你实现此格式。如果你的首选语言没有客户端库,你可以创建自己的。
从 Prometheus 2.0 版本开始,所有向 Prometheus 暴露指标的进程都需要使用基于文本的格式。在本节中,你可以找到关于此格式的一些基本信息,以及该格式的更详细分解。
方面 | 描述 |
---|---|
起始 | 2014 年 4 月 |
支持版本 | Prometheus 版本 >=0.4.0 |
传输 | HTTP |
编码 | UTF-8,\n 换行符 |
HTTP Content-Type |
text/plain; version=0.0.4 (缺少 version 值将导致回退到最新的文本格式版本。) |
可选 HTTP Content-Encoding |
gzip |
优点 |
|
限制 |
|
支持的指标原语 |
|
Prometheus 的基于文本的格式是面向行的。行由换行符 (\n
) 分隔。最后一行必须以换行符结尾。空行将被忽略。
在一行中,标记可以用任意数量的空格和/或制表符分隔(如果它们会与前一个标记合并,则必须至少用一个空格分隔)。忽略前导和尾随空格。
以 #
作为第一个非空白字符的行是注释。除非 #
后的第一个标记是 HELP
或 TYPE
,否则它们将被忽略。这些行按以下方式处理:如果标记是 HELP
,则需要至少一个额外的标记,即指标名称。所有剩余的标记都被认为是该指标名称的文档字符串。HELP
行可以包含任何 UTF-8 字符序列(在指标名称之后),但反斜杠和换行符必须分别转义为 \\
和 \n
。对于任何给定的指标名称,只能存在一个 HELP
行。
如果标记是 TYPE
,则需要恰好两个额外的标记。第一个是指标名称,第二个是 counter
、gauge
、histogram
、summary
或 untyped
,定义该名称的指标的类型。对于给定的指标名称,只能存在一个 TYPE
行。指标名称的 TYPE
行必须出现在该指标名称的第一个样本报告之前。如果指标名称没有 TYPE
行,则该类型设置为 untyped
。
剩余的行使用以下语法 (EBNF) 描述样本(每行一个)。
metric_name [
"{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}"
] value [ timestamp ]
在样本语法中
metric_name
和 label_name
带有通常的 Prometheus 表达式语言限制。label_value
可以是任何 UTF-8 字符序列,但反斜杠 (\
)、双引号 ("
) 和换行符 (\n
) 必须分别转义为 \\
、\"
和 \n
。value
是一个浮点数,表示方式符合 Go 的 ParseFloat()
函数的要求。除了标准的数值之外,NaN
、+Inf
和 -Inf
是有效的值,分别表示非数字、正无穷大和负无穷大。timestamp
是一个 int64
(自纪元以来的毫秒数,即 1970-01-01 00:00:00 UTC,不包括闰秒),表示方式符合 Go 的 ParseInt()
函数的要求。给定指标的所有行都必须作为一个单独的组提供,可选的 HELP
和 TYPE
行在前(没有特定的顺序)。除此之外,最好在重复的展示中进行可重复的排序,但不是必需的,即如果计算成本过高,则不要排序。
每行必须具有指标名称和标签的唯一组合。否则,摄取行为未定义。
histogram
和 summary
类型很难以文本格式表示。以下约定适用
x
的摘要或直方图的样本总和作为单独的样本命名为 x_sum
。x
的摘要或直方图的样本计数作为单独的样本命名为 x_count
。x
的摘要的每个分位数都作为单独的样本行,名称相同为 x
,并且标签为 {quantile="y"}
。x
的直方图的每个桶计数都作为单独的样本行,名称为 x_bucket
,标签为 {le="y"}
(其中 y
是桶的上限)。{le="+Inf"}
的桶。它的值必须与 x_count
的值相同。le
或 quantile
标签)递增。下面是一个完整的 Prometheus 指标展示示例,包括注释、HELP
和 TYPE
表达式、直方图、摘要、字符转义示例等等。
# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"} 1027 1395066363000
http_requests_total{method="post",code="400"} 3 1395066363000
# Escaping in label values:
msdos_file_access_time_seconds{path="C:\\DIR\\FILE.TXT",error="Cannot find file:\n\"FILE.TXT\""} 1.458255915e9
# Minimalistic line:
metric_without_timestamp_and_labels 12.47
# A weird metric from before the epoch:
something_weird{problem="division by zero"} +Inf -3982045
# A histogram, which has a pretty complex representation in the text format:
# HELP http_request_duration_seconds A histogram of the request duration.
# TYPE http_request_duration_seconds histogram
http_request_duration_seconds_bucket{le="0.05"} 24054
http_request_duration_seconds_bucket{le="0.1"} 33444
http_request_duration_seconds_bucket{le="0.2"} 100392
http_request_duration_seconds_bucket{le="0.5"} 129389
http_request_duration_seconds_bucket{le="1"} 133988
http_request_duration_seconds_bucket{le="+Inf"} 144320
http_request_duration_seconds_sum 53423
http_request_duration_seconds_count 144320
# Finally a summary, which has a complex representation, too:
# HELP rpc_duration_seconds A summary of the RPC duration in seconds.
# TYPE rpc_duration_seconds summary
rpc_duration_seconds{quantile="0.01"} 3102
rpc_duration_seconds{quantile="0.05"} 3272
rpc_duration_seconds{quantile="0.5"} 4773
rpc_duration_seconds{quantile="0.9"} 9001
rpc_duration_seconds{quantile="0.99"} 76656
rpc_duration_seconds_sum 1.7560473e+07
rpc_duration_seconds_count 2693
OpenMetrics 是一项基于 Prometheus 文本格式构建的标准化指标线路格式的工作。可以抓取目标,并且自 v2.23.0 起也可用于联合指标。
使用 OpenMetrics 格式可以展示和查询 范例。范例提供了一个时间点快照,该快照与指标集的指标相关,否则该指标集会被汇总。此外,它们可能附加了一个跟踪 ID,该跟踪 ID 在与跟踪系统一起使用时,可以提供有关特定服务的更多详细信息。
要启用此实验性功能,您必须至少拥有 v2.26.0 版本,并在您的参数中添加 --enable-feature=exemplar-storage
。
早期版本的 Prometheus 除了当前基于文本的格式外,还支持基于 Protocol Buffers(又名 Protobuf)的导出格式。 在 Prometheus 2.0 中,Protobuf 格式被标记为已弃用,Prometheus 停止从该导出格式摄取样本。
但是,Prometheus 中添加了新的实验性功能,其中 Protobuf 格式被认为是最佳选择。 使得 Prometheus 再次接受 Protocol Buffers。
以下是实验性功能的列表,一旦启用,这些功能将配置 Prometheus 优先使用 Protobuf 导出格式
功能标志 | 引入该功能的版本 |
---|---|
native-histograms | 2.40.0 |
created-timestamp-zero-ingestion | 2.50.0 |
有关历史格式版本的详细信息,请参阅旧的客户端数据导出格式文档。
原始 Protobuf 格式的当前版本(以及最近对原生直方图的扩展)维护在 prometheus/client_model 存储库中。
本文档是开源的。 请通过提交问题或拉取请求来帮助改进它。