我正在使用 Consul 来监控服务的健康状况。当某些服务失败时,我使用 Consulwatch
命令触发处理程序。目前我正在使用这个命令:
consul watch -type=checks -state=passing /home/consul/health.sh
这可行,但是我想知道health.sh
失败服务的名称,所以我可以发送包含失败服务名称的正确警报消息。我怎样才能在那里获得失败的服务名称?
我正在使用 Consul 来监控服务的健康状况。当某些服务失败时,我使用 Consulwatch
命令触发处理程序。目前我正在使用这个命令:
consul watch -type=checks -state=passing /home/consul/health.sh
这可行,但是我想知道health.sh
失败服务的名称,所以我可以发送包含失败服务名称的正确警报消息。我怎样才能在那里获得失败的服务名称?
您的脚本可以通过读取stdin
. 信息将以 JSON 格式发送。您只需添加cat - | jq .
到您的处理程序即可轻松检查这些事件。
输出的支票信息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'"