You need to enable JavaScript to run this app. 如何在发送邮件告警前设置条件评估时长,实现类似Prometheus的for子句效果
优惠活动
大模型
产品
解决方案
定价
更多

如何在发送邮件告警前设置条件评估时长,实现类似Prometheus的for子句效果

实现方案

核心逻辑:通过本地临时文件记录CPU阈值命中的连续次数,配合crontab每分钟执行一次脚本,连续5次(对应5分钟)命中阈值才触发告警,同时新增告警已发送标记避免重复推送。

修改后的完整脚本如下:

#!/bin/bash
# 配置项
THRESHOLD=20          # CPU空闲率阈值(低于此值视为使用率过高,和原脚本逻辑一致)
DURATION_MIN=5        # 要求连续异常的分钟数
ALERT_FLAG="/tmp/cpu_alert_sent.flag"  # 告警已发送标记文件
COUNT_FILE="/tmp/cpu_abnormal_count.tmp" # 连续异常计数文件

# 计算当前CPU空闲率5秒平均值
CPU_IDLE=$(sar 1 5 | grep "Average" | sed 's/^.* //')
CPU_IDLE=$( printf "%.0f" "$CPU_IDLE" )

if [ "$CPU_IDLE" -lt "$THRESHOLD" ]; then
    # 异常状态,计数+1,文件不存在则初始化为1
    if [ -f "$COUNT_FILE" ]; then
        COUNT=$(<"$COUNT_FILE")
        COUNT=$((COUNT + 1))
    else
        COUNT=1
    fi
    echo "$COUNT" > "$COUNT_FILE"

    # 达到连续时长要求且未发送过告警则触发邮件
    if [ "$COUNT" -ge "$DURATION_MIN" ] && [ ! -f "$ALERT_FLAG" ]; then
        echo "CPU usage is high!" | sendmail admin@example.com
        # 生成告警标记,避免持续异常时重复发信
        touch "$ALERT_FLAG"
    fi
else
    # 状态恢复正常,清零计数和告警标记
    rm -f "$COUNT_FILE" "$ALERT_FLAG"
fi

部署步骤

  • 给脚本添加执行权限:chmod +x /path/to/your/cpu_monitor.sh
  • 添加定时执行规则:执行crontab -e后新增如下配置,设置脚本每分钟运行一次
    * * * * * /path/to/your/cpu_monitor.sh >/dev/null 2>&1
    

效果说明

完全对齐Prometheus for 子句的逻辑:只有告警条件连续5分钟每分钟检测都满足时才会触发一次告警,异常状态持续期间不会重复发信,CPU恢复正常后再出现异常会重新开始计时评估。

内容的提问来源于stack exchange,提问作者Raghu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 16:54:03