问题描述
我有一个脚本,每分钟查询一次我们的 CI (buildkite) 的 API,以获取所有构建代理的详细信息,并将指标发送给 Datadog 进行分析。然而,在 Datadog UI 中准确计数这些代理已被证明具有挑战性。
如果脚本为它看到的每个代理发出一个 COUNT 指标,那么当间隔超过一分钟时,代理将在 Datadog UI 中被重复计算,因为脚本每分钟运行一次并且看到(大部分)相同代理每次。该脚本可以计算每次运行看到的代理数量,并将其作为 GAUGE 发出,但随后我无法通过特定于代理的标签(队列等)分解 Datadog UI 中的计数。
我想我可以在每次运行时为每个代理发出一个值为 1 的 GAUGE,并在代理数组中添加一个带有数字索引值的人工 index
标签,并依赖于 Datadog UI对 index
值求和?当然,我可以使用代理 ID/主机,但 Datadog 按标签值的数量收费,而且我们将代理放在一个自动缩放组中,因此主机经常更改。
这看起来很糟糕 - 有更好的解决方案吗?我是不是想多了?
解决方法
您可以使用从其收集指标的代理的名称或 ID 标记指标(如果您尚未这样做)。然后在 Datadog 中,您可以编写一个按代理 ID 分组的查询并应用 count_not_null 函数:https://docs.datadoghq.com/dashboards/functions/count/
这基本上是劫持一个随机指标来提取报告该指标的代理的唯一计数,以假设代理的总数。不过,您将无法轻松地按队列进行分组,因此请确认这是否是您的用例的一个很好的解决方案。
你关于使用仪表的想法对我来说听起来不错。您可以发送一个名为 myagent.running
之类的新指标,它为您的每个代理发送值 1,并对所有仪表求和以获得计数。这实际上是指标 datadog.agent.running
的实现方式:https://docs.datadoghq.com/integrations/agent_metrics/#metrics