Docker Compose
一、认识
基于 Docker Compose
部署 Prometheus
主要是为了简化多容器的管理和配置,并且可以方便地进行集群部署、服务发现等操作。Docker Compose
允许我们在一个配置文件中定义多个容器服务,包括 Prometheus
容器、存储卷以及必要的网络配置、配置 告警规则,并且将告警发送至 Alertmanager
。
下面是一个基于 Docker Compose
部署 Prometheus
的完整步骤,涵盖持久化存储、容器重启、更新、销毁存储等操作。
二、目录结构
创建一个工作目录 prometheus-docker-compose
,该目录用于存放 Prometheus
配置文件和 Docker Compose
配置文件。
prometheus-docker-compose/
│
├── prometheus.yml # Prometheus 配置文件
├── docker-compose.yml # Docker Compose 配置文件
└── data/ # 持久化存储目录
三、操作
3.1 创建 Prometheus 配置
Prometheus
的主要配置文件是 prometheus.yml
,它定义了数据抓取和告警的设置。首先创建一个 prometheus.yml
文件:
# prometheus/prometheus.yml
global:
scrape_interval: 15s # 默认抓取间隔时间
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] # Prometheus 自身的指标
- job_name: 'node_exporter'
static_configs:
- targets: ['node_exporter:9100'] # Node Exporter 地址(需要替换为实际的服务地址)
- job_name: 'custom_service'
static_configs:
- targets: ['127.0.0.1:4000'] # 自定义服务的地址
rule_files:
- "alerts.yml" # 告警规则文件
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093'] # Alertmanager 的地址
将此文件保存为 prometheus.yml
,并确保它与 Docker
容器路径的映射一致。
3.2 创建 Alert 配置
在 prometheus/alerts.yml
中定义告警规则。例如,创建一个当 CPU
使用率超过 80%
时触发的告警:
groups:
- name: example_alert
rules:
- alert: HighCpuUsage
expr: process_cpu_seconds_total > 1
for: 1m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
3.3 创建 Alertmanager 配置
在 alertmanager/
目录下创建 alertmanager.yml
配置文件:
# alertmanager/alertmanager.yml
global:
resolve_timeout: 5m # 告警解决超时
route:
group_by: ['alertname'] # 按照告警名称分组
receiver: 'default-receiver' # 默认接收器
receivers:
- name: 'default-receiver'
email_configs:
- to: 'your-email@example.com' # 替换为接收告警的邮箱
from: 'alertmanager@example.com'
smtp_smarthost: 'smtp.example.com:587' # SMTP 服务器
smtp_from: 'alertmanager@example.com'
smtp_auth_username: 'smtp-username'
smtp_auth_password: 'smtp-password'
3.4 创建 Docker Compose 配置
在 ~/prometheus-docker
目录下,创建 docker-compose.yml
文件,定义 Prometheus
和 Alertmanager
服务:
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.43.0
container_name: prometheus
restart: always
ports:
- "9090:9090" # Prometheus Web UI
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/alerts.yml:/etc/prometheus/alerts.yml # 挂载告警规则文件
- ./data/prometheus:/prometheus # 持久化存储
networks:
- monitoring
node_exporter:
image: prom/node-exporter:v1.5.0
container_name: node_exporter
restart: always
ports:
- "9100:9100"
networks:
- monitoring
alertmanager:
image: prom/alertmanager:v0.24.0
container_name: alertmanager
restart: always
ports:
- "9093:9093" # Alertmanager Web UI
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
- ./data/alertmanager:/alertmanager # 持久化存储
networks:
- monitoring
networks:
monitoring:
driver: bridge
-
prometheus
:配置了Prometheus
服务,挂载了配置文件prometheus.yml
和告警规则文件alerts.yml
,并设置了持久化存储路径/prometheus
。 -
node_exporter
:用于暴露系统指标,Prometheus
将从该服务抓取数据。 -
alertmanager
:配置了告警管理器,设置告警接收器。 -
networks
:定义了一个名为monitoring
的网络,Prometheus
、Alertmanager
和Node Exporter
都连接到这个网络中。
3.5 启动服务
在项目根目录下(即 prometheus-docker-compose
目录)运行以下命令来启动容器:
docker-compose up -d
3.6 检测服务
你可以使用以下命令查看 Prometheus
容器的状态:
docker-compose ps
如果要查看 Prometheus
的日志:
docker-compose logs prometheus
3.7 重启服务(可选)
Prometheus
容器的重启可以通过 docker-compose restart
命令来实现:
docker-compose restart prometheus
3.8 清理资源(可选)
docker-compose down -v
docker system prune -a --volumes
docker-compose up -d
四、查看
4.1 访问页面
访问 Prometheus Web
界面: 在浏览器中访问 Prometheus
: 打开 http://<主机IP>:9090
(例如,http://localhost:9090
)。
访问 Alertmanager
界面: 在浏览器中访问 Prometheus
: 打开 http://<主机IP>:9093
(例如,http://localhost:9093
)。
4.2 查看状态
转到 Status -> Targets
页面,查看所有目标状态是否为 UP
。