monitoring - 如何在 Prometheus 查询中 'join' 两个指标?

标签 monitoring consul prometheus

我正在使用 consul exporter将我的服务的运行状况和状态摄取到 Prometheus 中。当 Consul 中的服务和节点的状态很重要时,我想发出警报,然后在路由这些警报时使用从 Consul 提取的标签。

我从 this discussion 了解到服务标签可能会作为单独的指标导出,但我不确定如何将一个系列与另一个系列连接起来,以便我可以利用带有健康状态的标签。

例如,以下查询:

max(consul_health_service_status{status="critical"}) by (service_name, status,node) == 1

可以返回:
{node="app-server-02",service_name="app-server",status="critical"} 1

但我也想要这个系列中的“env”:
consul_service_tags{node="app-server-02",service_name="app-server",env="prod"} 1

加入 node 和 service_name 以将以下内容作为单个系列传递给 Alertmanager:
{node="app-server-02",service_name="app-server",status="critical",env="prod"} 1

然后我可以在我的路由中匹配“env”。

有没有办法做到这一点?在我看来,任何操作或功能都不能让我像这样分组或加入。据我所知,标签已经需要成为 consul_health_service_status 指标上的标签。

最佳答案

您可以使用 group_left 的参数列表包括来自正确操作数的额外标签(为了清晰起见,括号和缩进):

(
  max(consul_health_service_status{status="critical"}) 
  by (service_name,status,node) == 1
)
   + on(service_name,node) group_left(env)
(
   0 * consul_service_tags
)

这里的重要部分是操作+ on(service_name,node) group_left(env) :
  • +被“滥用”为连接运算符(很好,因为 0 * consul_service_tags 的值始终为 0)
  • group_left(env)是包含额外标签 env 的修饰符从右侧 ( consul_service_tags )
  • 关于monitoring - 如何在 Prometheus 查询中 'join' 两个指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461801/

    相关文章:

    integration - 集成不同的 Nagios Web 服务器

    node.js - 从网站远程检查 pm2 中应用程序的状态?

    python - Prometheus 导出器 - 读取包含过去一天数据的 CSV 文件

    prometheus - 如何为 Pushgateway 设置保留时间以使指标过期?

    kubernetes - 某些时候指标未显示在Grafana仪表板上

    android - 是否可以监控 Android 上的所有相机 Activity

    PHP 内容管理系统 : "Call Home" function of sorts on install

    docker - 有没有人知道如何在 Windows 上使用 docker 图像启动 consul web ui?

    java - 在两个数据中心模式下测试 Consul

    Consul 1.2.1 在命令参数中使用管道定义健康检查