文章目录
一、项目概述:从零搭建监控平台
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挂载卷,防止容器删除数据丢失。