阿里云轻量 2核2G 38元/年起 · 新客秒杀限量 去看看

Prometheus + Grafana 自建云服务器监控与告警(2026 实操)

WeHosts技术团队·2026年3月26日·更新于 2026年10月23日

云服务器监控与告警配置指南

本文讲自建监控栈(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基础监控免费,自定义监控按时间序列计费。

开启步骤:

  1. 登录控制台 -> 云监控 -> 主机监控
  2. 安装云监控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
  1. 创建报警规则

创建CPU告警规则:

{
  "RuleName": "CPU高使用率告警",
  "MetricName": "cpu_total",
  "Threshold": 80,
  "EvaluationCount": 3,
  "ContactGroups": ["运维组"],
  "NotifyType": 1
}

告警通知渠道: 短信、邮件、钉钉、企业微信

开通阿里云云监控

腾讯云云监控配置

腾讯云云监控同样提供免费的基础监控,支持多维度聚合分析。

特色功能:

  • 可视化大盘(Dashboard)支持多账号汇总
  • 智能告警(AI判断是否真正异常,减少误报)
  • 与企业微信机器人深度集成

开通腾讯云云监控

配置企业微信告警机器人:

  1. 在企业微信群创建机器人,获取Webhook URL
  2. 在腾讯云控制台 -> 云监控 -> 告警通知 -> 接收渠道 -> 添加企业微信机器人
  3. 填入Webhook URL

方案二:Prometheus + Grafana自建监控

对于需要自定义指标、多维度分析的团队,Prometheus + Grafana是业界标准。

架构概览

应用服务器(Node Exporter)
       ↓
  Prometheus(采集+存储)
       ↓
   Grafana(可视化)
       ↓
 AlertManager(告警)
       ↓
钉钉/微信/邮件/PagerDuty

Docker 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

告警设计最佳实践

避免告警疲劳

告警疲劳的危害: 告警太多 -> 团队开始忽视 -> 真正的严重告警被淹没

解决方案:

  1. 每条告警必须有明确的处理SOP
  2. 非工作时间只发最高优先级告警(P0/P1)
  3. 相同类型告警聚合为一条
  4. 定期审查告警,删除噪音告警

告警分级

级别名称响应要求通知方式
P0紧急5分钟内响应电话 + 短信 + 微信
P1严重30分钟内响应短信 + 微信
P2警告2小时内响应微信/钉钉
P3提示工作时间处理邮件

推荐方案总结

个人站长/小型网站:阿里云云监控免费基础监控 + 钉钉告警

中小团队:腾讯云云监控 + 企业微信机器人,5分钟配置完成

技术团队:Prometheus + Grafana自建,全面掌控监控体系

监控是运维的眼睛,没有监控就等于蒙眼开车。从今天开始配置你的第一条告警规则。

本文可能含联盟推广链接,购买不增加你的价格,详见联盟披露。

文中提到的云平台当前活动价

文中价格均来自各平台公开活动页。想直接对比在售机型,可以先看下面这些:价格核实日期与台账一致,以活动页为准。