0

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

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

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

4

2 回答 2

1

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

于 2021-11-01T10:31:51.540 回答
0

输出的支票信息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。)

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

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

$ consul watch -type=checks -state=passing "jq --raw-output '.[] | select(.ServiceName!=\"\" and .Status!=\"passing\") | .ServiceName'"
于 2022-01-01T21:18:54.147 回答