欢迎光临
我们一直在努力

基于 Docker-Compose 部署 Prometheus 监控系统(普罗米修斯)

文章目录

    • 一、项目概述:从零搭建监控平台
    • 二、环境准备与镜像导入
    • 三、构建 Node-Exporter 镜像(数据采集层)
    • 四、构建 Alertmanager 镜像(告警层)
    • 五、构建 Grafana 镜像(展示层)
    • 六、构建 Prometheus Server 镜像(核心层)
    • 七、Docker-Compose 编排部署
    • 八、启动与验证
    • 九、总结与避坑指南

一、项目概述:从零搭建监控平台

1.1 为什么选择 Prometheus?

Prometheus 是云原生时代的监控标准,相比 Zabbix 等传统工具,它具备:

  • 多维数据模型(标签体系)
  • 强大的 PromQL 查询语言
  • Pull 模型(主动拉取指标,易于扩展)
  • 完美的容器化支持

1.2 架构解析

本文将部署以下核心组件:

组件作用端口
Node-Exporter 采集主机硬件/OS 指标 9100
Prometheus 时序数据库 & 抓取引擎 9090
Alertmanager 告警分发与管理 9093
Grafana 数据可视化仪表盘 3000

二、环境准备与镜像导入

由于实验环境或者竞赛环境通常无外网,我们使用离线 Tar 包导入基础镜像。

2.1 解压资源包

tar -zxvf Monitor.tar.gz
cd Monitor

2.2 导入 CentOS 基础镜像

docker load -i /root/Monitor/CentOS_7.9.2009.tar

解释:docker load 将打包好的 CentOS 7.9 镜像加载到本地 Docker 仓库,作为后续所有服务的底座。

三、构建 Node-Exporter 镜像(数据采集层)

目标:部署 monitor-exporter:v1.0,用于采集 Linux 服务器的 CPU、内存、磁盘等指标。

3.1 编写 Dockerfile(Node-Exporter)

FROM centos:centos7.9.2009

# 解压二进制包(ADD 会自动解压 tar.gz)
ADD node_exporter-0.18.1.linux-amd64.tar.gz .

# 移动二进制文件到系统 PATH 中
RUN cp node_exporter-*/node_exporter /usr/local/bin/

EXPOSE 9100
# 直接前台运行,无需 systemd
CMD ["node_exporter"]

3.2 构建镜像

docker build -f Dockerfile-Monitor -t monitor-exporter:v1.0 .

解释:Node-Exporter 是一个无状态的 Go 二进制程序,直接运行即可暴露 /metrics 接口。

四、构建 Alertmanager 镜像(告警层)

目标:部署 monitor-alert:v1.0,用于处理 Prometheus 产生的告警并发送给邮箱/钉钉。

4.1 编写 Dockerfile(Alertmanager)

FROM centos:centos7.9.2009

ADD alertmanager-0.19.0.linux-amd64.tar.gz .

# 安装二进制文件
RUN cp alertmanager-*/alertmanager /usr/local/bin/

# 创建配置文件目录
RUN mkdir /etc/alertmanager

# 拷贝默认配置
RUN cp alertmanager-*/alertmanager.yml /etc/alertmanager/

EXPOSE 9093 9094
CMD ["alertmanager","–config.file=/etc/alertmanager/alertmanager.yml"]

4.2 构建镜像

docker build -t monitor-alert:v1.0 -f Dockerfile-Alertmanager .

解释:9093 是 Web UI 端口,9094 是集群通信端口。Alertmanager 负责“去重、分组、路由”告警。

五、构建 Grafana 镜像(展示层)

目标:部署 monitor-grafana:v1.0,提供炫酷的监控仪表盘。

5.1 编写 Dockerfile(Grafana)

FROM centos:centos7.9.2009

# 创建安装目录
RUN mkdir /opt/grafana

# 解压 Grafana
ADD grafana-6.4.1.linux-amd64.tar.gz /opt/grafana

EXPOSE 3000
# 指定家目录启动
CMD ["/opt/grafana/grafana-6.4.1/bin/grafana-server","-homepath","/opt/grafana/grafana-6.4.1"]

5.2 构建镜像

docker build -t monitor-grafana:v1.0 -f Dockerfile-Grafana .

解释:Grafana 本身不存数据,只做展示,数据源指向 Prometheus。

六、构建 Prometheus Server 镜像(核心层)

目标:部署 monitor-prometheus:v1.0,这是整个系统的大脑。

6.1 配置 prometheus.yml 在启动前,必须告诉 Prometheus 去哪里抓数据。

vi prometheus.yml
scrape_configs:
# Job 1: 监控 Prometheus 自身
– job_name: 'prometheus'
static_configs:
– targets: ['localhost:9090']

# Job 2: 监控 Node 节点
– job_name: 'node'
static_configs:
– targets: ['monitor-node:9100']

# Job 3: 监控 Alertmanager
– job_name: 'alertmanager'
static_configs:
– targets: ['monitor-alertmanager:9093']

关键点:这里的 monitor-node和 monitor-alertmanager是 Docker-Compose 的服务名,Docker 内置 DNS 会自动解析。

6.2 编写 Dockerfile(Prometheus)

FROM centos:centos7.9.2009

ADD prometheus-2.13.0.linux-amd64.tar.gz .

# 安装二进制
RUN cp prometheus-*/prometheus /usr/local/bin/

# 创建数据目录(存放 TSDB 数据)
RUN mkdir -p /data/prometheus

# 拷贝配置文件
COPY prometheus.yml /data/prometheus/

EXPOSE 9090
CMD ["prometheus", "–config.file=/data/prometheus/prometheus.yml"]

6.3 构建镜像

docker build -t monitor-prometheus:v1.0 -f Dockerfile-promethues .

七、Docker-Compose 编排部署

7.1 编写 docker-compose.yaml

将所有组件通过桥接网络连接起来。

version: "3"

services:
# 1. 节点采集器
monitor-node:
image: monitor-exporter:v1.0
container_name: monitor-node
ports:
– "9100:9100"
networks:
– monitoring
restart: unless-stopped

# 2. 告警管理器
monitor-alertmanager:
image: monitor-alert:v1.0
container_name: monitor-alertmanager
ports:
– "9093:9093"
– "9094:9094"
networks:
– monitoring
restart: unless-stopped

# 3. Grafana 可视化
monitor-grafana:
image: monitor-grafana:v1.0
container_name: monitor-grafana
ports:
– "3000:3000"
depends_on:
– monitor-prometheus
networks:
– monitoring
restart: unless-stopped
# 建议补充:Grafana 数据持久化(防止仪表盘丢失)
volumes:
– grafana_data:/var/lib/grafana

# 4. Prometheus 核心
monitor-prometheus:
image: monitor-prometheus:v1.0
container_name: monitor-prometheus
ports:
– "9090:9090"
depends_on:
– monitor-node
– monitor-alertmanager
networks:
– monitoring
restart: unless-stopped
# Prometheus 数据持久化(核心修正点)
volumes:
– prometheus_data:/data/prometheus

# ================= 持久化卷定义 =================
volumes:
prometheus_data:
grafana_data:

# ================= 自定义网络 =================
networks:
monitoring:
driver: bridge

如果是为了竞赛可达到题目给分点即可,不用太完善。

八、启动与验证

8.1 启动服务

docker-compose up -d

8.2 检查状态

docker-compose ps

8.3 访问验证

服务地址说明
Prometheus http://IP:9090 查看 Targets 是否 UP
Grafana http://IP:3000 默认 admin/admin
Node-Exporter http://IP:9100 查看原始指标

九、总结与避坑指南

9.1 核心技术点

  • 离线构建:使用 docker load + 本地 RPM 包解决无网环境。
  • 服务发现:利用 Docker-Compose 的服务名作为 DNS 进行动态寻址。
  • 分层解耦:采集、存储、展示、告警四层分离。

9.2 常见错误

  • Targets 显示 DOWN:检查防火墙是否放行端口,或 Compose 网络是否正常。
  • Grafana 无数据:检查 Prometheus 数据源地址是否填 http://monitor-prometheus:9090。
  • 权限问题:如果在生产环境,记得给 /data/prometheus挂载卷,防止容器删除数据丢失。
  • 赞(0)
    未经允许不得转载:171主机测评 » 基于 Docker-Compose 部署 Prometheus 监控系统(普罗米修斯)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址