属于大家的
VPS知识分享站

Grafana + Prometheus 监控云服务器:告警配置实战

先说结论:云服务器监控的最小可用组合是 node_exporter + Prometheus + Grafana + Alertmanager。node_exporter 采集,Prometheus 存储和告警,Grafana 展示,Alertmanager 负责通知和分组。小团队一台 2 核 4G 就能跑,但监控数据会占磁盘,保留时间要设上限。

先看架构:

  • node_exporter:跑在每台被监控机器上,暴露 CPU、内存、磁盘、网络指标
  • Prometheus:定时拉取指标,存时间序列,按规则告警
  • Grafana:查询 Prometheus,画面板和图表
  • Alertmanager:接收告警,去重、分组、静默、路由到邮件/钉钉/飞书

部署方式

可以用 Docker Compose 一次拉起,也可以分开装。监控机建议独立,别和被监控业务抢资源;小规模可以和业务同机,但要限制 Prometheus 内存和保留时间。

services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prom-data:/prometheus
    ports: ["9090:9090"]
  grafana:
    image: grafana/grafana
    volumes: [grafana-data:/var/lib/grafana]
    ports: ["3000:3000"]
  node-exporter:
    image: prom/node-exporter
    ports: ["9100:9100"]
volumes:
  prom-data:
  grafana-data:
node exporter、Prometheus 与 Grafana 组成的监控链路
采集、存储、展示、通知,四层各司其职。

Prometheus 配置

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: app
    static_configs:
      - targets: ['app:8080']

被监控机器多时,用文件服务发现或各自跑 node_exporter,Prometheus 统一拉取。跨公网拉取要加 TLS 和鉴权,别把 9090 暴露公网。

看哪些指标

  • CPU:使用率、iowait、steal
  • 内存:available、swap、OOM
  • 磁盘:使用率、inode、await、IOPS
  • 网络:带宽、丢包、重传
  • 系统:load、文件描述符、进程数
  • 应用:QPS、错误率、延迟、队列长度

指标不在多,关键是能对应到业务。CPU 高不一定影响用户,错误率和延迟升高才是。

告警规则

groups:
  - name: server
    rules:
      - alert: HighCPU
        expr: 100 - avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100 > 85
        for: 10m
        labels: {severity: warning}
        annotations: {summary: "CPU 持续高于 85%"}
      - alert: DiskFull
        expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 15
        for: 10m
        labels: {severity: critical}
      - alert: TargetDown
        expr: up == 0
        for: 2m
        labels: {severity: critical}

for 很重要,避免瞬时抖动刷告警;阈值按业务基线调,别照抄。

告警规则与通知路由到手机和邮件
告警要有 for、分级和明确接收人。

通知怎么配

Alertmanager 负责分组、抑制、静默和路由。按 severity 分到不同渠道:critical 打电话/钉钉,warning 发群,info 只记录。配置 group_wait、group_interval、repeat_interval,避免半夜被同一告警刷屏。

Grafana 面板

先导入 Node Exporter Full 模板,再按业务加应用面板。面板分三层:总览(红绿灯)、资源(CPU/内存/磁盘/网络)、业务(QPS/错误率/延迟)。每块面板都要能回答问题,不是为了好看。

存储和保留

Prometheus 本地存储按时间保留,默认 15 天,数据量大时磁盘涨得快。设置 --storage.tsdb.retention.time=15d 或容量上限;长期存储接 Thanos/VictoriaMetrics,小团队先别上。

时间序列存储保留策略与面板
保留时间太长会吃满磁盘,按排障需求设上限。

安全

Prometheus、Grafana、node_exporter 都不要直接暴露公网。Grafana 改默认密码、开 HTTPS、限制来源;node_exporter 只让 Prometheus 访问;Alertmanager 的 webhook 也要鉴权。

常见坑

  • 监控和被监控业务同机,故障一起挂
  • 保留时间太长,磁盘先满
  • 告警没有 for,抖动刷屏
  • 只监控 CPU,不监控磁盘和证书
  • Grafana 默认密码不改,被扫到
  • 告警发到没人看的群

常见问题 FAQ

Q1:2 核 4G 能跑 Prometheus + Grafana 吗?

能,监控十几台机器没问题。注意保留时间和磁盘,数据量大了加内存或换远端存储。

Q2:node_exporter 要每台都装吗?

要,它采集主机指标。应用指标用各自的 exporter 或埋点。

Q3:告警发到哪里好?

按团队习惯:钉钉/飞书/企业微信/Slack/邮件。关键是有人响应,别只发到一个没人看的邮箱。

Q4:Prometheus 和 Zabbix 怎么选?

云原生、容器多、指标维度多,选 Prometheus;传统主机、网络设备、要开箱即用,Zabbix 也够。

Q5:监控数据要保留多久?

小团队 15 到 30 天够排障;合规或趋势分析再延长,并做降采样或远端存储。

总结

监控不是装个 Grafana 就完事:采集、存储、告警、通知、面板、保留策略、安全,每一环都要配。先监控核心指标,再逐步加应用和业务指标,别一开始铺太大。

需要一台独立监控机,可以按小时开一台萤光云香港 CN2 VPS,把 Prometheus 和 Grafana 先跑起来。

相关推荐

赞(0)
未经允许不得转载:VPS知识分享站 » Grafana + Prometheus 监控云服务器:告警配置实战