本文目录导读:

- 方案一:Shell 脚本(最常用,适合 Linux 系统)
- 方案二:Python 脚本(更灵活,支持跨平台)
- 方案三:使用 Prometheus + Alertmanager(生产环境推荐)
- 常用阈值参考(通用建议)
- 关于“脚本怎样设置”的具体说明
在运维监控领域,设置资源告警阈值通常有几种方式,取决于你使用的工具(如自研脚本、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
使用方法:
- 将脚本添加到 crontab 中,每分钟执行一次:
crontab -e添加:* * * * * /path/to/resource_alarm.sh >> /var/log/alarm.log 2>&1 - 修改阈值后,直接编辑
CPU_THRESHOLD、MEM_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% | 需要提前知道带宽上限 |
脚本怎样设置”的具体说明
- 明确硬编码 vs 配置文件:直接在脚本中写死(如上示例)适合小规模;推荐将阈值写在
.env、config.ini或命令行参数中,方便动态调整。 - 通知方式:除了输出到控制台,可以集成邮件、钉钉/企业微信 Webhook 机器人、Slack、短信等,例如在脚本中加入
curl -X POST -d "msg=报警内容" https://qyapi.weixin.qq.com/...。 - 防重复告警:设置一个状态文件(如
/tmp/alert_sent),若已经发送过告警且资源仍超标,则不再重复发送,直到恢复正常后再重置。 - 阈值分组:不同业务模块可以使用不同阈值,例如数据库服务器内存阈值设 80%,而 Web 服务器可以设 90%。
| 场景 | 推荐方式 |
|---|---|
| 临时/快速检测 | Shell 脚本(crontab 定时执行) |
| 需要跨平台或复杂逻辑 | Python + psutil 库 |
| 生产环境/集群管理 | Prometheus + Alertmanager / Zabbix / 云监控 |
| 微服务/容器化 | Kubernetes HPA / 自定义 Operator |
根据你的实际环境(Linux/Windows、单机/集群、是否需要可视化),选择最适合的一种方式即可,需要进一步示例请说明具体场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播