跳到主要内容

Docker

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

一、认识


为了基于 Docker 完整实现 PrometheusAlertmanager 的部署,并确保持久化存储、重启、更新、重置存储、配置信息等步骤,我们将按照以下步骤进行详细部署。我们将分别为 PrometheusAlertmanager 配置持久化存储,并实现告警功能。

二、目录结构


首先,创建一个工作目录用于存放 Prometheus 配置文件和持久化存储数据。

prometheus-docker/
├── prometheus/
│ ├── prometheus.yml # Prometheus 配置文件
├── alertmanager/
│ ├── alertmanager.yml # Alertmanager 配置文件
├── data/ # 数据存储目录

三、操作


3.1 创建 Prometheus 配置

Prometheus 的主要配置文件是 prometheus.yml,它定义了数据抓取和告警的设置。首先创建一个 prometheus.yml 文件:

global:
scrape_interval: 15s # 设置默认抓取间隔时间

scrape_configs:
- job_name: 'prometheus' # 抓取 Prometheus 自身指标
static_configs:
- targets: ['localhost:9090']

- job_name: 'node_exporter' # 抓取 Node Exporter 指标
static_configs:
- targets: ['node_exporter:9100'] # 请替换为实际的 Node Exporter 地址

- job_name: 'custom_service' # 自定义服务
static_configs:
- targets: ['custom-service: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_from: 'alertmanager@example.com'
smtp_auth_username: 'smtp-username'
smtp_auth_password: 'smtp-password'

3.4 部署 Prometheus 服务

通过 Docker 命令启动 Prometheus 容器,同时配置持久化存储和端口映射。

docker run -d \
--name prometheus \
--restart always \
-p 9090:9090 \
-v ~/prometheus-docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v ~/prometheus-docker/data/prometheus:/prometheus \
prom/prometheus
  • -d: 后台运行容器。

  • --name prometheus: 给容器指定一个名字 prometheus

  • -p 9090:9090: 将宿主机的 9090 端口映射到容器的 9090 端口,用于访问 Prometheus Web UI

  • -v ~/prometheus-docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:将宿主机上的配置文件 prometheus.yml 映射到容器内 /etc/prometheus/prometheus.yml 路径。

  • -v ~/prometheus-docker/data/prometheus:/prometheus:将宿主机上的 data 目录映射到容器内 /prometheus 目录,这样 Prometheus 数据将存储在宿主机的 data 目录中,实现持久化。

  • prom/prometheus:latest: 使用 Prometheus 官方最新版本的 Docker 镜像。

  • --restart always:配置容器在 Docker 重启后自动重启。

3.5 部署 Alertmanager 容器

docker run -d \
--name alertmanager \
--restart always \
-p 9093:9093 \
-v ~/prometheus-docker/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
-v ~/prometheus-docker/data/alertmanager:/alertmanager \
prom/alertmanager
  • -v ~/prometheus-docker/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:将本地的 Alertmanager 配置文件挂载到容器中。

  • -v ~/prometheus-docker/data/alertmanager:/alertmanager:将 Alertmanager 的数据持久化存储到宿主机目录。

3.6 验证服务

1. 确保 Prometheus 容器正在运行:

docker ps -a

3.7 停止服务(可选)

docker stop prometheus

3.8 重启服务(可选)

docker restart prometheus

3.9 清理资源(可选)

这个命令将删除所有未使用的容器、镜像和卷,包括数据,谨慎使用。

docker system prune -a --volumes

四、查看


4.1 访问页面

访问 Prometheus Web 界面: 在浏览器中访问 Prometheus: 打开 http://<主机IP>:9090(例如,http://localhost:9090)。

访问 Alertmanager 界面: 在浏览器中访问 Prometheus: 打开 http://<主机IP>:9093(例如,http://localhost:9093)。

4.2 查看状态

转到 Status -> Targets 页面,查看所有目标状态是否为 UP