首先创建一个monitor_io.sh文件可以在root目录也可以其他自定义,内容如下:
#!/bin/bash
# 设置阈值
THRESHOLD=20 # 阈值(毫秒)
# 通知接口的配置
NOTIFICATION_URL="通知接口XXXXXX"
# 获取所有设备的 IO 延迟
for device in /dev/sda /dev/sdb /dev/sdc /dev/dm-*; do
IO_LATENCY=$(iostat -x $device 1 1 | grep -A 1 "Device" | tail -n 1 | awk '{print $6}')
# 调试输出
echo "当前 $device 的 IO 延迟: $IO_LATENCY ms"
# 检查延迟是否为数字并且大于阈值
if [[ $IO_LATENCY =~ ^[0-9]*\.?[0-9]+$ ]] && (( $(echo "$IO_LATENCY > $THRESHOLD" | bc -l) )); then
# 发送通知
MESSAGE="警告: $device 的 IO 延迟为 $IO_LATENCY ms,超过阈值 $THRESHOLD ms"
echo "发送消息: $MESSAGE" # 添加调试信息
# URL 编码处理消息
ENCODED_MESSAGE=$(echo "$MESSAGE" | sed 's/ /%20/g; s/:/%3A/g; s/,/%2C/g; s/,/%E8%BF%9B/g; s/。/%E3%80%82/g;')
# 发送消息
curl "${NOTIFICATION_URL}${ENCODED_MESSAGE}"
fi
done
设置cron定时
1.登录终端,输入crontab -e
2.假设5分钟执行一次:
*/5 * * * * /root/monitor_io.sh >> /root/monitor_io.log 2>&1
3.然后保存退出即可。
其他
for device in /dev/sda /dev/sdb /dev/sdc /dev/dm-*; do
这里的设备需要根据自己的来。
可以用
iostat -x 10来查看