零、目标:
搭建 1 台监控docker, 3台被监控docker
一、环境准备
1. 安装 Docker 和 Docker Compose
确保你的云服务器上已经安装了 Docker 和 Docker Compose。如果尚未安装,可以按照以下步骤进行:
安装 Docker
# 更新系统包列表
sudo apt update
# 安装必要的依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新系统包列表
sudo apt update
# 安装 Docker 引擎
sudo apt install docker-ce docker-ce-cli containerd.io
# 将当前用户添加到 docker 用户组,以便无需 sudo 运行 Docker 命令, 使用root解决一切
sudo usermod -aG docker $USER
# 重新登录以使更改生效
安装 Docker Compose
# 下载 Docker Compose 二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
tips: 建议不要用上述方法, 因为下载非常慢. 建议直接上github下载, 传到云服务器上
2. 创建工作目录
在宿主机上创建用于存放普罗米修斯和相关配置文件的目录:
mkdir -p ~/prometheus_monitoring/{prometheus,node_exporter,grafana}
cd ~/prometheus_monitoring
二、配置被监控机器(使用 Docker 容器)
我们将使用 Node Exporter 来收集被监控机器的系统指标。Node Exporter 是一个普罗米修斯的 exporter,用于收集主机的各种指标,如 CPU、内存、磁盘等。
1. 编写 Docker Compose 文件(docker-compose-nodes.yml
)
version: '3'
services:
node-exporter-1:
image: prom/node-exporter:v1.5.0
container_name: node-exporter-1
restart: always
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
node-exporter-2:
image: prom/node-exporter:v1.5.0
container_name: node-exporter-2
restart: always
ports:
- "9101:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
node-exporter-3:
image: prom/node-exporter:v1.5.0
container_name: node-exporter-3
restart: always
ports:
- "9102:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
2. 启动被监控节点容器
docker-compose -f docker-compose-nodes.yml up -d
三、配置监控机器(宿主机)
1. 配置普罗米修斯
创建普罗米修斯配置文件(prometheus/prometheus.yml
)
global:
scrape_interval: 15s # 每隔 15 秒收集一次指标
evaluation_interval: 15s # 每隔 15 秒评估一次告警规则
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'nodes'
static_configs:
- targets: ['localhost:9100', 'localhost:9101', 'localhost:9102']
tips: 不能写localhost, 建议改为真实IP地址
编写 Docker Compose 文件(docker-compose-prometheus.yml
)
version: '3'
services:
prometheus:
image: prom/prometheus:v2.45.0
container_name: prometheus
restart: always
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/data:/prometheus
tips: volumnes的磁盘映射文件, 一定要写对yml文件的地址
启动普罗米修斯容器
docker-compose -f docker-compose-prometheus.yml up -d
2. 配置 Grafana(可选,用于可视化监控数据)
编写 Docker Compose 文件(docker-compose-grafana.yml
)
version: '3'
services:
grafana:
image: grafana/grafana:9.5.8
container_name: grafana
restart: always
ports:
- "3000:3000"
volumes:
- ./grafana/data:/var/lib/grafana
启动 Grafana 容器
docker-compose -f docker-compose-grafana.yml up -d
四、验证监控配置
1. 验证普罗米修斯
打开浏览器,访问 http://宿主机IP:9090
,进入普罗米修斯的界面。点击 Status
-> Targets
,检查 nodes
任务下的三个目标(localhost:9100
、localhost:9101
、localhost:9102
)是否状态为 UP
。如果状态为 UP
,说明普罗米修斯已经成功连接到被监控节点并开始收集指标。
2. 配置 Grafana(如果安装了 Grafana)
- 打开浏览器,访问
http://宿主机IP:3000
,使用默认用户名admin
和密码admin
登录 Grafana。 - 登录后,点击左侧菜单栏的
Configuration
->Data Sources
,然后点击Add data source
,选择Prometheus
。 - 在
URL
字段中输入http://宿主机IP:9090
,然后点击Save & Test
,确保连接成功。 - 点击左侧菜单栏的
Create
->Import
,在Import via grafana.com
字段中输入1860
(这是一个常用的 Node Exporter 仪表盘 ID),然后点击Load
,选择之前配置的普罗米修斯数据源,最后点击Import
,即可看到可视化的监控图表。
五、其他注意事项
- 防火墙设置:确保云服务器的防火墙允许外部访问普罗米修斯(9090 端口)和 Grafana(3000 端口)的端口。
- 数据持久化:上述配置中已经为普罗米修斯和 Grafana 配置了数据持久化目录,避免容器重启后数据丢失。
- 告警配置:可以进一步配置普罗米修斯的告警规则和 Alertmanager 来实现告警功能。例如,当 CPU 使用率超过 80% 时发送告警通知。
六、遇到的问题
- docker安装镜像源失效
- 普罗米修斯yml文件格式写错
- 普罗米修斯监控机器无法访问被监控机器
七、解决问题
1. docker镜像源问题
建议去网上寻找最新可用的镜像源,
我使用的是: https://docker.1panel.live/ (2025-3-7可用)
2. yml文件格式问题
在windows上复制的配置, 粘贴到云服务器上后, 格式会乱. 所以先在windows上写好, 然后传过去
3. 无法访问被监控机器的原因是机器的网络ip解析失败
如果没有特定的配置, 直接写localhost 或 127.0.0.1 都是无法解析的. 所以需要在Prometheus.yml里面协商真实的ip地址