我正在考虑将一些指标导出到 Prometheus,但我对我计划做的事情感到紧张。

我的系统由一个工作流引擎组成,我想跟踪工作流中每个步骤的一些指标。这似乎是合理的,有一个名为 wfengine_step_duration_seconds 的仪表指标。我的问题是在我的所有工作流程中有数千个步骤。

根据文档 here ,我不应该以编程方式生成名称的任何部分。这排除了使用诸如 wfengine_step1_duration_secondswfengine_step2_duration_seconds 之类的名称,因为步骤名称是程序化的(它们会不时更改)。

解决方案是步骤名称的标签。但是,这也带来了一个问题,因为文档 herehere 强烈警告不要使用具有高基数的标签。具体来说,他们建议保持“指标的基数低于 10”,对于超过 100 的基数,“研究替代解决方案,例如减少维度数量或将分析从监控中移开”。

我正在查看数以千计(1,000 到 10,000)的标签值。鉴于其他指标的数量不会非常大,这是 Prometheus 的适当用法,还是我应该限制自己使用更通用的指标,例如单个聚合步骤持续时间而不是每个步骤的单独持续时间?

最佳答案

将最大指标保持在 100 基数以下的准则假定您有 1000 个服务副本,因为这是一个相当安全的上限。如果您知道使用此代码的每个人都将始终拥有较少数量的副本,那么在检测中就有可能具有更高的基数。

话虽如此,成千上万的标签仍然需要小心。如果已经是几万,还要多久才能达到几十万?从长远来看,鉴于基数,您可能必须将此数据移动到日志中,因此您现在可能希望这样做。

关于prometheus - Prometheus 中的高基数标签有多危险?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46373442/

10-15 23:23