【ping拨测多个ip的延迟情况,有问题推送企微机器人webhook】
·
vim ping_monitor.sh
#!/bin/bash
IP_LIST=("1.1.2.1" "12.0.4.10" "16.11.8.2" "13.7.12.10" "3.44.10.14" "3.13.15.4" "1.3.0.9")
CHECK_INTERVAL=3
WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"
# 告警阈值(ms)
ALARM_DELAY=200
ALARMED_IPS=()
while true; do
TIME=$(date '+%Y-%m-%d %H:%M:%S')
for IP in "${IP_LIST[@]}"; do
LOG="ping_${IP}.log"
# 执行 ping 并获取延迟
PING_RESULT=$(ping -c 1 -W 1 "$IP" 2>&1)
if echo "$PING_RESULT" | grep -q "time="; then
# 提取延迟数值
DELAY=$(echo "$PING_RESULT" | grep -oP 'time=\K[\d.]+')
# 判断是否超过告警阈值
if (( $(echo "$DELAY > $ALARM_DELAY" | bc -l) )); then
# 延迟过高,触发告警
echo "[$TIME]【告警】$IP 延迟过高:${DELAY}ms"
echo "[$TIME] $IP 延迟过高 ${DELAY}ms" >> "$LOG"
# 未告警过则发送通知
if [[ ! " ${ALARMED_IPS[@]} " =~ " $IP " ]]; then
curl -s "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"msgtype":"text","text":{"content":"【Ping 延迟过高告警】\nIP:'"$IP"'\n时间:'"$TIME"'
当前延迟:'"${DELAY}"'ms\n阈值:'"${ALARM_DELAY}"'ms"}}' > /dev/null 2>&1
ALARMED_IPS+=("$IP")
fi
else
# 延迟正常,清除告警状态
echo "[$TIME] $IP 正常 ${DELAY}ms" >> "$LOG"
ALARMED_IPS=(${ALARMED_IPS[@]/$IP})
fi
else
# ping 完全失败/超时
echo "[$TIME]【严重】$IP 无法访问"
echo "[$TIME] $IP 无法访问" >> "$LOG"
if [[ ! " ${ALARMED_IPS[@]} " =~ " $IP " ]]; then
curl -s "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"msgtype":"text","text":{"content":"【Ping 不可达告警】\nIP:'"$IP"'\n时间:'"$TIME"'
状态:完全无法访问"}}' > /dev/null 2>&1
ALARMED_IPS+=("$IP")
fi
fi
done
sleep $CHECK_INTERVAL
done
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)