Docker部署Prometheus监控全家桶

环境准备

  • CentOS Linux release 7.9
  • Docker version 23.0.6
  • Docker Compose version v2.33.1

安装Docker

配置国内镜像加速(可选)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[ -d /etc/docker/ ] || mkdir -p /etc/docker/
tee /etc/docker/daemon.json << 'EOF'
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "1"
},
"registry-mirrors": [
"https://x9r52uz5.mirror.aliyuncs.com",
"https://dockerhub.icu",
"https://docker.chenby.cn",
"https://docker.1panel.live",
"https://docker.awsl9527.cn",
"https://docker.anyhub.us.kg",
"https://dhub.kubesre.xyz"
]
}
EOF

下载安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 配置 Docker yum 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装必要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 列出可用版本,然后选择并安装指定版本
yum list docker-ce --showduplicates | sort -r

# 安装 Docker-CE 默认安装最新版
yum install -y docker-ce-23.0.6 docker-ce-cli-23.0.6 containerd.io

# 启动 Docker 服务并设为开机启动
systemctl enable --now docker

#确认docker服务运行正常,显示active (running)说明服务正常运行
systemctl status docker

安装Docker-compose

1
2
3
4
5
6
7
# 安装
LATEST_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')
sudo curl -L "https://github.com/docker/compose/releases/download/${LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋权
sudo chmod +x /usr/local/bin/docker-compose
# 执行
docker-compose --version

Docker Compose 部署 Prometheus 监控全家桶

前置条件

  1. 确保已安装 Docker 及 Docker Compose(官方安装指南
  2. 开放防火墙端口:9090, 9093, 3000, 9100, 8080
  3. 建议使用 2核CPU/4GB内存 及以上配置的服务器
1
2
# 验证环境
docker --version && docker-compose --version

快速部署流程

获取配置仓库

1
2
3
4
5
6
7
# 使用国内镜像源加速下载
sudo mkdir -p /opt/monitoring && cd /opt/monitoring
git clone https://gitee.com/jerrryWang/docker-prometheus.git --depth 1
cd docker-prometheus

# 创建必要目录(确保配置文件挂载)
mkdir -p {prometheus,alertmanager,grafana/provisioning}

启动监控服务

1
2
3
4
5
6
7
8
# 后台启动所有容器
docker-compose up -d

# 查看实时日志
docker-compose logs -f --tail=50

# 停止所有容器
docker-compose down

服务访问地址

服务访问地址默认认证监控对象
Prometheushttp://<服务器IP>:9090指标收集存储
Alertmanagerhttp://<服务器IP>:9093需配置(参见备注)告警管理
Grafanahttp://<服务器IP>:3000admin/password数据可视化
Node Exporterhttp://<服务器IP>:9100/metrics主机指标
cAdvisorhttp://<服务器IP>:8080容器指标

关键配置说明

Grafana 数据源配置

  1. 登录 Grafana 后进入 Configuration > Data Sources
  2. 选择 Prometheus 类型数据源
  3. URL 填写http://prometheus:9090 (使用Docker服务名,非IP地址)

告警规则配置

  1. 编辑 prometheus/prometheus.yml 添加监控目标
1
2
3
4
5
6
7
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'docker'
static_configs:
- targets: ['cadvisor:8080']

邮件报警配置

  1. 修改 alertmanager/config.yml 配置SMTP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
global:
#163服务器
smtp_smarthost: 'smtp.163.com:465'
#发邮件的邮箱
smtp_from: 'cdring@163.com'
#发邮件的邮箱用户名,也就是你的邮箱
smtp_auth_username: 'cdring@163.com'
#发邮件的邮箱密码
smtp_auth_password: 'your-password'
#进行tls验证
smtp_require_tls: false

route:
group_by: ['alertname']
# 当收到告警的时候,等待group_wait配置的时间,看是否还有告警,如果有就一起发出去
group_wait: 10s
# 如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待group_interval配置的时间才可以发送出去
group_interval: 10s
# 如果上次告警信息发送成功,且问题没有解决,则等待 repeat_interval配置的时间再次发送告警数据
repeat_interval: 10m
# 全局报警组,这个参数是必选的
receiver: email

receivers:
- name: 'email'
#收邮件的邮箱
email_configs:
- to: 'cdring@163.com'
inhibit_rules:
# 定义抑制源匹配条件
- source_match:
# 当告警的严重级别为 'critical' 时,作为抑制源
severity: 'critical'
target_match:
severity: 'warning' # 当告警的严重级别为 'warning' 时,可能被抑制
# 抑制规则,只有当 alertname、dev 和 instance 都相等时才进行抑制
equal: ['alertname', 'dev', 'instance']

日常维护命令

操作命令
更新配置后重启 Prometheusdocker-compose exec prometheus kill -HUP 1
查看存储空间使用docker system df
清理30天前旧数据docker system prune -a --filter "until=720h"
快速停止所有服务docker-compose down --remove-orphans

注意事项

  1. 数据持久化:确保 /opt/monitoring 挂载到独立磁盘分区

  2. 版本升级

    • 修改 docker-compose.yml 中的镜像版本号
    • 按顺序执行:docker-compose pull && docker-compose up -d
  3. 性能调优:当监控目标超过100个时,建议:

    • 增加 Prometheus 内存限制至 4GB
    • 调整抓取间隔:scrape_interval: 60s
  4. 报错

1
2
# docker-compose up -d
Error response from daemon: Get "https://docker.kubesre.xyz/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

多配置几个镜像加速地址/etc/docker/daemon.json或者配置自己知道的代理服务器proxy.example.com更换成自己的域名

编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件(如果不存在则创建)

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
Environment="HTTPS_PROXY=https://proxy.example.com:443/"
Environment="NO_PROXY=localhost,127.0.0.1"

然后重新加载 systemd 配置并重启 Docker 服务:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker