脚本怎样设置资源告警阈值

wen 实用脚本 28

本文目录导读:

脚本怎样设置资源告警阈值

  1. 方案一:Shell 脚本(最常用,适合 Linux 系统)
  2. 方案二:Python 脚本(更灵活,支持跨平台)
  3. 方案三:使用 Prometheus + Alertmanager(生产环境推荐)
  4. 常用阈值参考(通用建议)
  5. 关于“脚本怎样设置”的具体说明

在运维监控领域,设置资源告警阈值通常有几种方式,取决于你使用的工具(如自研脚本、Prometheus、Zabbix、云平台等)。

这里为你提供 基于 Shell 脚本(Linux 系统)Python 脚本 的两种常见方案,用于设置 CPU、内存、磁盘的告警阈值。

Shell 脚本(最常用,适合 Linux 系统)

创建一个 resource_alarm.sh 文件:

#!/bin/bash
# ========== 配置区域:在这里修改阈值 ==========
CPU_THRESHOLD=80        # CPU 使用率超过 80% 告警
MEM_THRESHOLD=90        # 内存使用率超过 90% 告警
DISK_THRESHOLD=85       # 磁盘使用率超过 85% 告警
ALARM_EMAIL="admin@example.com"  # 告警通知邮箱(或使用其他通知方式)
# ============================================
# 1. 检查 CPU 使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' | cut -d'.' -f1)
# 或者使用:CPU_USAGE=$(mpstat 1 1 | awk '/Average/ {print 100 - $NF}')
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
    echo "[ALARM] CPU 使用率过高: ${CPU_USAGE}% (阈值: ${CPU_THRESHOLD}%)"
    # 发送邮件或触发其他动作
    # mail -s "CPU Alert" $ALARM_EMAIL <<< "CPU usage is ${CPU_USAGE}%"
fi
# 2. 检查内存使用率
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEM_USED=$(free -m | awk '/Mem:/ {print $3}')
MEM_USAGE=$(( (MEM_USED * 100) / MEM_TOTAL ))
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
    echo "[ALARM] 内存使用率过高: ${MEM_USAGE}% (阈值: ${MEM_THRESHOLD}%)"
fi
# 3. 检查磁盘使用率(检查根分区)
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
    echo "[ALARM] 磁盘使用率过高: ${DISK_USAGE}% (阈值: ${DISK_THRESHOLD}%)"
fi
# 4.(可选)检查负载
LOAD_THRESHOLD=5.0
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | tr -d ' ')
if (( $(echo "$LOAD_AVG > $LOAD_THRESHOLD" | bc -l) )); then
    echo "[ALARM] 系统负载过高: $LOAD_AVG (阈值: $LOAD_THRESHOLD)"
fi

使用方法:

  1. 将脚本添加到 crontab 中,每分钟执行一次: crontab -e 添加:* * * * * /path/to/resource_alarm.sh >> /var/log/alarm.log 2>&1
  2. 修改阈值后,直接编辑 CPU_THRESHOLDMEM_THRESHOLD 等变量即可。

Python 脚本(更灵活,支持跨平台)

创建一个 resource_alarm.py 文件:

#!/usr/bin/env python3
import psutil
import smtplib
from email.mime.text import MIMEText
# ========== 配置区域:在这里修改阈值 ==========
CPU_THRESHOLD = 80.0        # int 或 float
MEM_THRESHOLD = 90.0
DISK_THRESHOLD = 85.0
ALARM_EMAIL = "admin@example.com"
SMTP_SERVER = "smtp.example.com"
SMTP_PORT = 587
EMAIL_USER = "noreply@example.com"
EMAIL_PASS = "your_password"
# ============================================
def send_alarm(subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = EMAIL_USER
    msg['To'] = ALARM_EMAIL
    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
        server.starttls()
        server.login(EMAIL_USER, EMAIL_PASS)
        server.send_message(msg)
# 1. CPU 使用率
cpu_usage = psutil.cpu_percent(interval=1)
if cpu_usage > CPU_THRESHOLD:
    message = f"CPU 使用率: {cpu_usage}% (阈值: {CPU_THRESHOLD}%)"
    print(f"[ALARM] {message}")
    # send_alarm("CPU Alert", message)
# 2. 内存使用率
mem = psutil.virtual_memory()
mem_usage = mem.percent
if mem_usage > MEM_THRESHOLD:
    message = f"内存使用率: {mem_usage}% (阈值: {MEM_THRESHOLD}%)"
    print(f"[ALARM] {message}")
# 3. 磁盘使用率
disk_usage = psutil.disk_usage('/').percent
if disk_usage > DISK_THRESHOLD:
    message = f"磁盘使用率: {disk_usage}% (阈值: {DISK_THRESHOLD}%)"
    print(f"[ALARM] {message}")
# 4. 网络流量、进程数等其他资源可类似添加

运行前准备:
pip install psutil


使用 Prometheus + Alertmanager(生产环境推荐)

如果你在云原生环境或需要更复杂的告警规则,通常通过配置文件设置阈值,脚本只是执行器。

Prometheus 告警规则示例(在 rules.yml 中):

groups:
- name: resource_alerts
  rules:
  - alert: HighCpuUsage
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100 > 80
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "CPU 使用率过高 {{ $value }}%"
      threshold: "80%"

优点:无需手动写脚本,通过表达式管理阈值,且支持动态调整。


常用阈值参考(通用建议)

资源 建议警告阈值(Warning) 建议严重阈值(Critical) 说明
CPU 80% 90% 长期超过 80% 需要扩容
内存 80% 95% 注意是否有 SWAP 抖动
磁盘 80% 90% 根据读写频率可调整
负载 等于 CPU 核心数 核心数 * 2 4 核 CPU 阈值设为 8
网络流量 带宽的 70% 带宽的 90% 需要提前知道带宽上限

脚本怎样设置”的具体说明

  1. 明确硬编码 vs 配置文件:直接在脚本中写死(如上示例)适合小规模;推荐将阈值写在 .envconfig.ini 或命令行参数中,方便动态调整。
  2. 通知方式:除了输出到控制台,可以集成邮件、钉钉/企业微信 Webhook 机器人、Slack、短信等,例如在脚本中加入 curl -X POST -d "msg=报警内容" https://qyapi.weixin.qq.com/...
  3. 防重复告警:设置一个状态文件(如 /tmp/alert_sent),若已经发送过告警且资源仍超标,则不再重复发送,直到恢复正常后再重置。
  4. 阈值分组:不同业务模块可以使用不同阈值,例如数据库服务器内存阈值设 80%,而 Web 服务器可以设 90%。
场景 推荐方式
临时/快速检测 Shell 脚本(crontab 定时执行)
需要跨平台或复杂逻辑 Python + psutil 库
生产环境/集群管理 Prometheus + Alertmanager / Zabbix / 云监控
微服务/容器化 Kubernetes HPA / 自定义 Operator

根据你的实际环境(Linux/Windows、单机/集群、是否需要可视化),选择最适合的一种方式即可,需要进一步示例请说明具体场景。

抱歉,评论功能暂时关闭!