pve监控io延迟超越阈值即报警

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注