如果度量标准的帮助文本发生更改(即在部署之间)会发生什么?
这是我从/api/v1/targets/metadata
获得的一些示例输出。它显示了两个具有相同度量标准名称my-counter
,但帮助文本不同的实例。
第一个实例:
"target": {
"instance": "instance-1:6000",
"job": "app"
},
"metric": "my-counter",
"type": "counter",
"help": "This counts something"
第二个实例:
"target": {
"instance": "instance-2:6000",
"job": "app"
},
"metric": "my-counter",
"type": "counter",
"help": "This counts the same thing, just different help text"
Prometheus仪表板/图表似乎并不在乎。还有其他含义吗?
我问是因为在prometheus/client_golang的Go文档中,它说:
在同一注册表中注册的描述符如果共享相同的完全限定名称,则必须满足某些一致性和唯一性标准:它们必须具有相同的帮助字符串和相同的标签名称[...]。
答案 0 :(得分:2)
AFAIK唯一性约束仅适用于客户端。即如果您声明两个具有相同名称的指标,则它们应具有相同的标签和帮助文本,否则客户端会崩溃(因为它必须在同一/metrics
页面上同时暴露这两个指标的时间序列,单个帮助字符串)。
Prometheus,服务器在解析阶段不关心帮助字符串(就此而言,甚至不是计数器还是量表)。因此,永远不会知道同一指标在不同目标上具有不同的帮助字符串。
我也很确定(尽管对此不作赘述),Prometheus服务器不会在乎多个实例中相同指标的标签是否相同。否则,您将无法在现有指标上添加标签并进行滚动升级,而又不会丢失数据。
换句话说,客户端试图严格地接受来自应用程序的内容。但是服务器需要非常宽松,无法接受目标。对于初学者来说,这些目标甚至可能不使用任何一个客户端库(反之亦然),而是从头开始滚动自己的/metrics
页面。 (尽管Prometheus可能仍然不喜欢在同一/metrics
页上具有不同标签集的两个指标。