1. 告警需求
服务器挂载多个挂载点,但是配置磁盘使用率告警,需要排除掉loop形式挂载点。

2. 撰写脚本
cat disk_utilization_alert.sh
#!/bin/bash
# 配置参数
THRESHOLD=80 # 磁盘使用率告警阈值(单位:%),可修改
SERVER_IP='10.10.10.188'
SERVER_NAME='xx平台服务器'
DINGTALK_URL="https://oapi.dingtalk.com/robot/send?
# 替换为实际钉钉机器人Webhook URL
access_token=c88888888888888888888888888888888888888888888889efdbfa808742af999"
# 获取磁盘信息并处理告警
alerts=$(df -P | awk -v threshold="$THRESHOLD" '
NR>1 { # 跳过标题行
usage = $5; # 第五列为使用率(如 "80%")
sub(/%/, "", usage); # 移除%符号转换为数值
if (usage + 0 > threshold && $1 !~ /loop/) { # 比较数值并排除loop设备
print "磁盘挂载点: "$6", Usage: "usage"%"
}
}')
# 如有告警则推送钉钉并@告警处理人
if [ -n "$alerts" ]; then
# 构建告警消息
message="【磁盘使用率告警,请及时处理】\n服务器名称:$SERVER_NAME \n服务器IP:$SERVER_IP\n告警时间:`date "+%F %H:%M:%S"`\n告警阈值: ${THRESHOLD}% exceeded on server:\n${alerts} \n@13088888888"
dingding_push(){
curl -H "Content-Type: application/json" \
-d '{
"msgtype": "text",
"text": {
"content": "'"$message"'"
},
'at': {
'atMobiles': ['13088888888'],
'isAtAll': false
}
}' $DINGTALK_URL
}
# 调用钉钉API发送JSON格式消息
dingding_push
echo "Alert has been sent to DingTalk successfully."
else
echo "No disk usage has been exceeded threshold. System is normal."
fi
3. 配置定时任务
*/5 * * * * /path/to/disk_utilization_alert.sh

被折叠的 条评论
为什么被折叠?



