Grafana 和 Prometheus 监控告警搭建

FreeGuideOnline 最新 2026-07-08

Grafana 与 Prometheus 监控告警搭建指南

本教程将手把手带您完成 Prometheus 与 Grafana 的安装、配置,并实现完整的指标采集、可视化以及邮件/钉钉告警通知。适合初次接触可观测性体系的运维与开发人员。

环境准备与架构说明

在开始之前,请确保您已经拥有:

  • 一台 Linux 服务器(CentOS 7/8 或 Ubuntu 20.04+),最低配置 2核4G
  • 服务器可正常访问外网,用于下载软件包
  • 已安装 Docker 与 Docker Compose(可选,但强烈推荐)
  • 基础的 YAML 与 Linux 命令行操作能力

架构预览
Prometheus Server 定期拉取 Exporter 暴露的指标 → Prometheus 存储时序数据并评估告警规则 → Alertmanager 接收告警并路由到通知渠道 → Grafana 查询 Prometheus 数据进行可视化。

Prometheus 安装与基本配置

我们将使用 Docker Compose 快速部署 Prometheus。

1. 创建目录与配置文件

mkdir -p /opt/prometheus && cd /opt/prometheus

编写 prometheus.yml 主配置文件:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

rule_files:
  - "alert_rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

2. Docker Compose 部署 Prometheus

创建 docker-compose.yml

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./alert_rules.yml:/etc/prometheus/alert_rules.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    restart: always

volumes:
  prometheus_data:

启动服务:

docker-compose up -d

访问 http://服务器IP:9090 验证 Prometheus 是否运行正常。

Node Exporter 安装与指标采集

Node Exporter 用于暴露主机硬件与操作系统的指标。

1. 使用 Docker 运行 Node Exporter

docker run -d \
  --name node_exporter \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  prom/node-exporter:latest \
  --path.rootfs=/host

2. 配置 Prometheus 抓取

prometheus.ymlscrape_configs 下添加新的 job:

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']

重启 Prometheus 使配置生效:

docker-compose restart prometheus

随后可在 Prometheus 的 Targets 页面确认 node_exporter 状态为 UP。

Grafana 安装与仪表板构建

1. 部署 Grafana

扩展 docker-compose.yml,添加 Grafana 服务:

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    restart: always

在文件底部声明数据卷:

volumes:
  prometheus_data:
  grafana_data:

启动 Grafana:docker-compose up -d

2. 添加 Prometheus 数据源

  1. 浏览器访问 http://服务器IP:3000,使用 admin/admin 登录(首次登录需修改密码)
  2. 左侧菜单 → Connections → Data sources → Add data source
  3. 选择 Prometheus,URL 填写 http://prometheus:9090
  4. 点击 Save & Test,确认连接成功

3. 导入预置仪表板

Prometheus 社区提供了丰富的仪表板模板。推荐 Node Exporter Full 仪表板:

  1. 左侧菜单 → Dashboards → Import
  2. Import via grafana.com 框内输入 ID 1860,点击 Load
  3. 选择 Prometheus 数据源,点击 Import

即可看到包含 CPU、内存、磁盘、网络等系统指标的完整看板。

告警规则与 Alertmanager 配置

1. 编写告警规则文件

创建 alert_rules.yml(已在 Prometheus 配置中引用):

groups:
  - name: node_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: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage is above 80% for more than 5 minutes."
          
      - alert: HostOutOfMemory
        expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Host out of memory (instance {{ $labels.instance }})"
          description: "Available memory is less than 10% for over 1 minute."

重启 Prometheus 使规则生效,可在 Prometheus 的 Alerts 页面看到已加载的规则。

2. 部署 Alertmanager

docker-compose.yml 中添加:

  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
    restart: always

创建 alertmanager.yml 配置文件:

global:
  resolve_timeout: 5m

route:
  receiver: 'default-receiver'
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

receivers:
  - name: 'default-receiver'
    email_configs: []

3. 配置邮件告警(以 QQ 邮箱为例)

修改 alertmanager.yml 中对应 receiver 的配置:

receivers:
  - name: 'default-receiver'
    email_configs:
      - to: 'your_receive@qq.com'
        from: 'your_send@qq.com'
        smarthost: 'smtp.qq.com:587'
        auth_username: 'your_send@qq.com'
        auth_password: 'your_authorization_code'   # QQ邮箱的授权码,非登录密码
        require_tls: true

重启 Alertmanager:docker-compose restart alertmanager

为避免邮件被拦截,请确保发送邮箱已开启 SMTP 服务并获取授权码。

4. 配置钉钉/Webhook 告警

对于钉钉通知,需借助第三方中间件(如 prometheus-webhook-dingtalk)。部署 webhook-dingtalk 服务:

  dingtalk:
    image: timonwong/prometheus-webhook-dingtalk:latest
    container_name: dingtalk
    ports:
      - "8060:8060"
    environment:
      - DINGTALK_TOKEN=your_dingtalk_robot_token
    restart: always

然后修改 alertmanager.yml 中的路由和接收器:

route:
  receiver: 'dingtalk'
  # ... 其余路由配置

receivers:
  - name: 'dingtalk'
    webhook_configs:
      - url: 'http://dingtalk:8060/dingtalk/webhook1/send'

重启 Alertmanager 即可。

告警验证与日常维护

1. 触发测试告警

可以手动生成 CPU 压力来触发 HighCPUUsage 告警:

dd if=/dev/zero of=/dev/null &

等待5分钟后,在 Prometheus Alerts 页面会看到告警状态变为 FIRING,随后邮件或钉钉会收到通知。

2. 常用命令与状态检查

  • 检查 Prometheus 配置:docker exec prometheus promtool check config /etc/prometheus/prometheus.yml
  • 查看 Alertmanager 静默规则:访问 http://IP:9093
  • Grafana 仪表板定期备份:可将导出的 JSON 模型保存到版本控制系统

3. 生产环境建议

  • 将所有数据卷挂载到宿主机特定路径,便于备份与迁移
  • 为 Prometheus 配置持久化存储、设置保留策略(--storage.tsdb.retention.time
  • 使用外部标签区分不同环境(production/staging)的指标
  • 设定合理的告警阈值和重复间隔,避免告警风暴

至此,您已经完成了一套基础但完整的监控告警体系搭建。随着业务发展,您可以继续扩展更多 Exporter(如 MySQL、Redis、Blackbox)以及更复杂的告警路由规则。