跳到主要内容

Docker Compose

2024年12月24日
柏拉文
越努力,越幸运

一、认识


基于 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 文件,定义 PrometheusAlertmanager 服务:

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 的网络,PrometheusAlertmanagerNode 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