1. 项目概述
监控系统是现代IT基础设施中不可或缺的组成部分,而Prometheus作为云原生时代的监控解决方案标杆,已经成为众多企业的首选。这套全家桶部署方案将Prometheus与周边生态工具整合,通过Docker Compose实现一键式部署,极大简化了传统监控系统的搭建流程。
我在实际生产环境中多次部署这套系统后发现,相比传统分步安装方式,使用Docker Compose可以将部署时间从数小时缩短到15分钟以内。更重要的是,这种容器化部署方式保证了环境的一致性,避免了"在我机器上能跑"的典型问题。
整套系统包含以下核心组件:
- Prometheus:负责指标采集和存储
- Alertmanager:专业告警管理
- Grafana:数据可视化
- Blackbox Exporter:黑盒监控
- Node Exporter:主机监控
- cAdvisor:容器监控
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与架构设计
2.1 硬件与软件需求
建议的服务器配置:
- CPU:至少4核(处理告警规则时需要足够计算能力)
- 内存:8GB以上(Prometheus对内存需求较高)
- 存储:100GB+ SSD(TSDB存储时间序列数据)
软件依赖:
- Docker 20.10+
- Docker Compose 2.0+
- 操作系统:任何支持Docker的Linux发行版
注意:生产环境务必配置监控数据的持久化存储,避免容器重启导致数据丢失。
2.2 架构设计解析
这套部署方案采用分层架构设计:
code复制[数据采集层]
├─ Node Exporter (主机指标)
├─ cAdvisor (容器指标)
└─ Blackbox Exporter (服务探活)
[核心层]
├─ Prometheus (采集+存储)
└─ Alertmanager (告警管理)
[展示层]
└─ Grafana (可视化)
网络通信设计:
- 所有组件通过自定义Docker网络互联
- Prometheus作为中心节点主动拉取各Exporter数据
- Grafana通过HTTP API连接Prometheus
- Alertmanager接收Prometheus的告警推送
3. Docker Compose文件详解
3.1 完整compose文件
yaml复制version: '3.8'
networks:
monitoring:
driver: bridge
volumes:
prometheus_data: {}
grafana_data: {}
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--storage.tsdb.retention.time=30d'
ports:
- "9090:9090"
networks:
- monitoring
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
restart: unless-stopped
volumes:
- ./alertmanager:/etc/alertmanager
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
ports:
- "9093:9093"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
- GF_USERS_ALLOW_SIGN_UP=false
ports:
- "3000:3000"
networks:
- monitoring
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
ports:
- "9100:9100"
networks:
- monitoring
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8080:8080"
networks:
- monitoring
blackbox-exporter:
image: prom/blackbox-exporter:latest
container_name: blackbox-exporter
restart: unless-stopped
volumes:
- ./blackbox:/config
command:
- '--config.file=/config/blackbox.yml'
ports:
- "9115:9115"
networks:
- monitoring
3.2 关键配置解析
-
数据持久化:
- Prometheus数据:使用命名卷
prometheus_data - Grafana数据:使用命名卷
grafana_data - 配置文件:通过bind mount挂载主机目录
- Prometheus数据:使用命名卷
-
网络配置:
- 所有服务接入
monitoring自定义网络 - 内部通过服务名通信(如Prometheus访问
node-exporter:9100)
- 所有服务接入
-
重要参数:
--storage.tsdb.retention.time=30d:控制数据保留周期GF_SECURITY_ADMIN_PASSWORD:设置Grafana管理员密码--collector.filesystem.ignored-mount-points:排除系统目录监控
4. Prometheus核心配置
4.1 prometheus.yml详解
yaml复制global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- 'alert.rules'
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
metrics_path: '/metrics'
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://example.com
- http://prometheus:9090
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
4.2 关键配置说明
-
全局参数:
scrape_interval:指标抓取间隔(生产环境建议30s-1min)evaluation_interval:告警规则评估间隔
-
告警集成:
- 通过
alerting配置连接Alertmanager rule_files指定告警规则文件路径
- 通过
-
监控目标:
- 每个
job_name定义一个监控任务 static_configs.targets指定Exporter地址- Blackbox配置较复杂,需要
relabel_configs重写标签
- 每个
5. Alertmanager告警配置
5.1 config.yml配置
yaml复制route:
group_by: ['alertname']
group_wait: 10s
group_interval: 5m
repeat_interval: 3h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'your-email@example.com'
from: 'alertmanager@yourdomain.com'
smarthost: 'smtp.yourdomain.com:587'
auth_username: 'smtp-user'
auth_password: 'smtp-password'
require_tls: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
5.2 告警路由策略
-
分组策略:
group_wait:等待相同告警聚合的时间repeat_interval:重复发送告警的最小间隔
-
抑制规则:
- 当出现
critical级别告警时,抑制相同alertname的warning告警 - 避免告警风暴
- 当出现
-
邮件通知:
- 支持TLS加密SMTP
- 可配置多个接收人
实操技巧:测试环境可以先配置Slack或Webhook接收告警,避免邮件服务器配置问题影响验证。
6. Grafana集成与告警配置
6.1 数据源配置
- 登录Grafana(默认admin/admin123)
- 进入Configuration → Data Sources
- 添加Prometheus数据源:
- URL: http://prometheus:9090
- Access: Server (默认)
6.2 告警规则配置
通过Grafana UI配置告警:
- 创建/打开仪表板
- 编辑Panel → Alert选项卡
- 设置告警条件,例如:
plaintext复制
avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) < 0.2 - 配置通知渠道:
- 支持Email、Slack、Webhook等
- 可设置告警级别和自定义消息
6.3 推荐仪表板
可导入以下社区仪表板:
- Node Exporter: 1860
- cAdvisor: 14282
- Prometheus: 3662
- Blackbox: 7587
导入方法:
- 点击"+" → Import
- 输入仪表板ID
- 选择Prometheus数据源
7. 常见问题排查
7.1 组件启动问题
问题现象:Prometheus容器不断重启
- 检查项:
docker logs prometheus查看日志- 确认prometheus.yml语法正确(可用
promtool check config验证) - 检查挂载目录权限(特别是SELinux环境)
问题现象:Grafana无法连接Prometheus
- 检查项:
- 确认两者在同一个Docker网络
- 在Grafana容器内执行
curl http://prometheus:9090测试连通性 - 检查Prometheus的
targets页面是否正常
7.2 告警不触发
排查步骤:
- 检查Prometheus的
alerts页面,确认规则已加载 - 查看规则表达式在当前值:
http://prometheus:9090/graph中输入表达式 - 检查Alertmanager日志:
docker logs alertmanager - 测试邮件服务器:
telnet smtp.yourdomain.com 587
7.3 性能优化建议
-
Prometheus调优:
- 调整
scrape_interval(不要低于15s) - 增加
--storage.tsdb.retention.time减少数据量 - 使用recording rules预计算常用指标
- 调整
-
资源限制:
yaml复制# 在compose文件中添加 prometheus: deploy: resources: limits: cpus: '2' memory: 4G
8. 生产环境增强建议
-
高可用部署:
- 运行多个Prometheus实例
- 配置Alertmanager集群模式
- 使用Grafana的多个数据源实现故障转移
-
安全加固:
- 为各组件启用HTTPS
- 配置Grafana的LDAP/SSO集成
- 使用Vault管理敏感配置
-
监控扩展:
- 添加Redis/MongoDB等exporter
- 配置业务应用的自定义指标
- 集成日志系统(Loki+Promtail)
-
备份策略:
bash复制# Prometheus数据备份示例 docker exec prometheus tar czf /tmp/backup.tar.gz /prometheus docker cp prometheus:/tmp/backup.tar.gz .
这套方案经过多个生产环境验证,能够支撑日均千万级指标的监控需求。根据实际业务规模,可以灵活调整组件配置和部署架构。
