Grafana 和 Prometheus 监控告警搭建
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.yml 的 scrape_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 数据源
- 浏览器访问
http://服务器IP:3000,使用admin/admin登录(首次登录需修改密码) - 左侧菜单 → Connections → Data sources → Add data source
- 选择 Prometheus,URL 填写
http://prometheus:9090 - 点击 Save & Test,确认连接成功
3. 导入预置仪表板
Prometheus 社区提供了丰富的仪表板模板。推荐 Node Exporter Full 仪表板:
- 左侧菜单 → Dashboards → Import
- 在
Import via grafana.com框内输入 ID1860,点击 Load - 选择 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)以及更复杂的告警路由规则。