【问题标题】:Get failed service name inside Consul watch handler在 Consul 监视处理程序中获取失败的服务名称
【发布时间】:2021-07-23 17:41:31
【问题描述】:

我正在使用 Consul 来监控服务的健康状况。我使用 Consul watch 命令在某些服务失败时触发处理程序。目前我正在使用这个命令:

consul watch -type=checks -state=passing /home/consul/health.sh

这可行,但是我想知道在health.sh 中失败服务的名称,所以我可以发送包含失败服务名称的正确警报消息。我怎样才能在那里获得失败的服务名称?

【问题讨论】:

    标签: consul consul-health-check


    【解决方案1】:

    consul watch -type=check 输出的检查信息包含一个ServiceName 字段,其中包含与检查关联的服务的名称。

    [
      {
        "Node": "foobar",
        "CheckID": "service:redis",
        "Name": "Service 'redis' check",
        "Status": "passing",
        "Notes": "",
        "Output": "",
        "ServiceID": "redis",
        "ServiceName": "redis"
      }
    ]
    

    (有关官方文档,请参阅https://www.consul.io/docs/dynamic-app-config/watches#checks。)

    与服务关联的检查应该在ServiceIDServiceName 字段中都有值。对于节点级别检查,这些字段将为空。

    以下命令监视运行状况检查的变化,并在其检查转换为“通过”以外的状态(即警告或严重)时输出服务的名称。

    $ consul watch -type=checks -state=passing "jq --raw-output '.[] | select(.ServiceName!=\"\" and .Status!=\"passing\") | .ServiceName'"
    

    【讨论】:

      【解决方案2】:

      您的脚本可以通过读取stdin 来获取所有必需的信息。信息将以 JSON 格式发送。您只需将cat - | jq . 添加到您的处理程序中即可轻松检查这些事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        相关资源
        最近更新 更多