![用于监控 API json 响应的 Bash 脚本](https://linux22.com/image/170035/%E7%94%A8%E4%BA%8E%E7%9B%91%E6%8E%A7%20API%20json%20%E5%93%8D%E5%BA%94%E7%9A%84%20Bash%20%E8%84%9A%E6%9C%AC.png)
我想监控以下健康检查 URL。如果 mongodb 进入断开连接状态,我需要生成警报。我写了一个bash脚本。看来它仍然不起作用。任何人都可以帮忙吗?谢谢
健康检查什么时候进行https://www.example.com/healthz结果如下响应:{"mongodb":"connected","redis":"connected"}
我的 Bash 脚本是:
#!/bin/bash
data=$(wget --timeout 5 -O - -q -t 1 https://www.example.com/healthz)
message=$(jq '.Disconnected' <<< "$data")
if [[ "$message" == '"Success"' ]] ; then
echo something
else
send email
答案1
.Disconnected
JSON 响应中没有键。
要检查.mongodb
字符串的键,connected
您可以执行以下操作:
#!/bin/sh
if wget --timeout 5 -O - -q -t 1 https://www.example.com/healthz |
jq --exit-status '.mongodb == "connected"' >/dev/null
then
# code for the case when MongoDB is connected
else
# code for the case when MongoDB is *not* connected
fi
这会将响应直接从wget
传递到jq
,而不是迂回地将其存储在中间变量中。
如果实用程序不输出或,则使用--exit-status
(或-e
) with会使实用程序以成功退出状态(零)退出。如果键具有值,我们给出的表达式将输出。jq
nil
false
jq
true
.mongodb
connected
jq
然后我们使用语句中的退出状态if
来选择要采用的分支。