当下监控已成为保障服务器稳定运行的核心手段,Prometheus具有高效时间序列和灵活查询语言,实际部署中单独运行Prometheus并不足够还要配合Node Exporter、Grafana以及Alertmanager,形成一个完整的监控告警栈。Docker Compose能够用最少的命令,一次性编排并运行整个监控体系。下面是通过Docker Compose构建一套Prometheus + Node Exporter + Grafana + Alertmanager的完整监控栈。
传统部署方式通常需要逐一安装和配置各个组件,这不仅耗时,还容易出现版本不一致和配置冲突。而Docker Compose有几个天然优势。其支持一键启动与停止,用一份 docker-compose.yml描述所有服务,部署和关闭只需一个命令。环境隔离中,每个组件运行在独立的容器中,避免系统级别的依赖冲突。还有就是易于迁移,只要保留 docker-compose.yml 和配置文件,就能在任何支持Docker的服务器上快速恢复环境。
监控栈的组件构成中,我们的目标是搭建以下监控架构:
Prometheus:核心监控数据采集与存储系统
Node Exporter:采集服务器CPU、内存、磁盘等主机指标
Grafana:数据可视化与仪表盘展示
Alertmanager:告警管理与通知
首先在服务器上准备一个项目目录,例如 /opt/monitoring:
mkdir -p /opt/monitoring/{prometheus,grafana,alertmanager}
cd /opt/monitoring
目录结构参考:
monitoring/
├── docker-compose.yml
├── prometheus/
│ └── prometheus.yml
├── grafana/
├── alertmanager/
│ └── alertmanager.yml
编写 Prometheus 配置,在prometheus/prometheus.yml中写入基础配置,让它能抓取自身和Node Exporter的数据:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['prometheus:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['node_exporter:9100']
编写 Alertmanager 配置,在 alertmanager/alertmanager.yml 中添加一个简单的通知方式,例如打印到日志(生产环境可改成邮件、Slack等):
route:
receiver: 'default'
receivers:
- name: 'default'
webhook_configs:
- url: 'http://example.com/webhook'
编写 Docker Compose 文件,docker-compose.yml 内容如下:
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.54.0
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: unless-stopped
node_exporter:
image: prom/node-exporter:v1.8.1
container_name: node_exporter
ports:
- "9100:9100"
restart: unless-stopped
grafana:
image: grafana/grafana:11.2.0
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
restart: unless-stopped
alertmanager:
image: prom/alertmanager:v0.27.0
container_name: alertmanager
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- "9093:9093"
restart: unless-stopped
volumes:
grafana_data:
启动服务
docker compose up -d
验证运行状态
docker ps
访问各个组件
Prometheus: http://服务器IP:9090
Node Exporter: http://服务器IP:9100/metrics
Grafana: http://服务器IP:3000 (账号 admin / admin)
Alertmanager: http://服务器IP:9093
Grafana配置数据源与仪表盘,登录Grafana后进入 Configuration → Data Sources,添加Prometheus数据源,URL填写 http://prometheus:9090。导入官方提供的Node Exporter仪表盘模板(ID:1860),即可看到CPU、内存、网络等实时数据。
将Prometheus和Grafana的存储目录挂载到宿主机,避免容器删除后数据丢失。还可以配置Prometheus的 alerting.rules 文件,将CPU、内存、磁盘等阈值写入规则文件。使用反向代理(如Nginx)并启用HTTPS,限制外部直接访问监控接口。在其他服务器部署Node Exporter,并在Prometheus配置中添加这些节点。
上面给大家的方案适合本地测试机、云服务器或混合云环境,通过以上提供的配置文件可以几分钟内实现搭建,缩短了监控系统的部署周期。