云服务器监控与告警配置指南
本文讲自建监控栈(Prometheus + Grafana)。只想快速盯几台机器的可用性,用现成工具的入门版本见云服务器监控与告警入门。
快速结论
- 起步方案:使用云厂商原生监控(免费),配置CPU/内存/磁盘/网络四大告警
- 进阶方案:Prometheus + Grafana自建监控,可视化更强大
- 告警原则:告警要有意义,避免"告警疲劳",每条告警必须对应处理动作
- 黄金指标:延迟(Latency)、流量(Traffic)、错误率(Errors)、饱和度(Saturation)—— Google SRE四黄金信号
为什么需要监控?
没有监控的典型场景:
用户反馈网站打不开 -> 运维人员SSH登服务器 -> 发现磁盘满了 -> 手动清理 -> 网站恢复 事故持续时间:2小时
有监控告警的场景:
监控系统发现磁盘使用率达80% -> 微信/邮件告警 -> 运维在10分钟内清理 -> 用户无感知 事故持续时间:0(预防性处置)
监控的核心价值:从被动响应到主动预防。
必须监控的核心指标
系统级指标
| 指标 | 告警阈值(建议) | 含义 |
|---|---|---|
| CPU使用率 | >80%持续5分钟 | 计算资源不足 |
| 内存使用率 | >85% | 内存压力大,可能OOM |
| 磁盘使用率 | >80% | 即将写满,影响服务 |
| 磁盘I/O等待 | >20% | 磁盘性能瓶颈 |
| 网络带宽使用率 | >70% | 带宽接近上限 |
| 系统负载(Load Average) | >核心数×2 | 系统过载 |
服务级指标
| 指标 | 告警阈值 | 含义 |
|---|---|---|
| HTTP错误率 | >1% | 接口异常 |
| P95响应时间 | >1000ms | 用户体验下降 |
| 服务进程存活 | 进程消失 | 服务崩溃 |
| 数据库连接数 | >80%上限 | 连接池即将耗尽 |
| 消息队列积压 | >10000条 | 消费速度跟不上 |
业务级指标
- 每分钟订单量(低于均值50%触发告警)
- 用户注册量(异常下降可能表示注册流程故障)
- 支付成功率(低于95%触发告警)
方案一:云厂商原生监控(推荐起步)
阿里云云监控配置
阿里云云监控对ECS基础监控免费,自定义监控按时间序列计费。
开启步骤:
- 登录控制台 -> 云监控 -> 主机监控
- 安装云监控Agent:
# CentOS/Aliyun Linux
wget http://cms-agent.oss-cn-hangzhou.aliyuncs.com/Aliyun-NMS/latest/aliyun-service-1.6.0-1.x86_64.rpm
rpm -ivh aliyun-service-1.6.0-1.x86_64.rpm
systemctl start aliyun.service- 创建报警规则
创建CPU告警规则:
{
"RuleName": "CPU高使用率告警",
"MetricName": "cpu_total",
"Threshold": 80,
"EvaluationCount": 3,
"ContactGroups": ["运维组"],
"NotifyType": 1
}告警通知渠道: 短信、邮件、钉钉、企业微信
腾讯云云监控配置
腾讯云云监控同样提供免费的基础监控,支持多维度聚合分析。
特色功能:
- 可视化大盘(Dashboard)支持多账号汇总
- 智能告警(AI判断是否真正异常,减少误报)
- 与企业微信机器人深度集成
配置企业微信告警机器人:
- 在企业微信群创建机器人,获取Webhook URL
- 在腾讯云控制台 -> 云监控 -> 告警通知 -> 接收渠道 -> 添加企业微信机器人
- 填入Webhook URL
方案二:Prometheus + Grafana自建监控
对于需要自定义指标、多维度分析的团队,Prometheus + Grafana是业界标准。
架构概览
应用服务器(Node Exporter)
↓
Prometheus(采集+存储)
↓
Grafana(可视化)
↓
AlertManager(告警)
↓
钉钉/微信/邮件/PagerDutyDocker Compose快速部署
# docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=30d'
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=your-password
volumes:
- grafana_data:/var/lib/grafana
alertmanager:
image: prom/alertmanager:latest
ports:
- "9093:9093"
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
node-exporter:
image: prom/node-exporter:latest
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
volumes:
prometheus_data:
grafana_data:Prometheus配置
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- "alert_rules.yml"
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100', '10.0.0.2:9100', '10.0.0.3:9100']
- job_name: 'myapp'
static_configs:
- targets: ['myapp:8080'] # 应用暴露的/metrics接口告警规则配置
# alert_rules.yml
groups:
- name: server_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU使用率过高 ({{ $value }}%)"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 20
for: 1m
labels:
severity: critical
annotations:
summary: "磁盘空间不足,剩余 {{ $value }}%"
- alert: ServiceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "服务 {{ $labels.instance }} 不可用"AlertManager钉钉告警
# alertmanager.yml
receivers:
- name: 'dingtalk'
webhook_configs:
- url: 'http://dingtalk-webhook:8060/dingtalk/ops/send'
send_resolved: true
route:
receiver: 'dingtalk'
group_wait: 30s
group_interval: 5m
repeat_interval: 12h告警设计最佳实践
避免告警疲劳
告警疲劳的危害: 告警太多 -> 团队开始忽视 -> 真正的严重告警被淹没
解决方案:
- 每条告警必须有明确的处理SOP
- 非工作时间只发最高优先级告警(P0/P1)
- 相同类型告警聚合为一条
- 定期审查告警,删除噪音告警
告警分级
| 级别 | 名称 | 响应要求 | 通知方式 |
|---|---|---|---|
| P0 | 紧急 | 5分钟内响应 | 电话 + 短信 + 微信 |
| P1 | 严重 | 30分钟内响应 | 短信 + 微信 |
| P2 | 警告 | 2小时内响应 | 微信/钉钉 |
| P3 | 提示 | 工作时间处理 | 邮件 |
推荐方案总结
个人站长/小型网站:阿里云云监控免费基础监控 + 钉钉告警
中小团队:腾讯云云监控 + 企业微信机器人,5分钟配置完成
技术团队:Prometheus + Grafana自建,全面掌控监控体系
监控是运维的眼睛,没有监控就等于蒙眼开车。从今天开始配置你的第一条告警规则。