首先创建一个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来查看