3.7 KiB
Executable File
3.7 KiB
Executable File
Prometheus Docker 镜像配置
环境变量配置
PROMETHEUS_BASE_PATH
设置 Prometheus 配置和数据的基础路径。
默认值: /private/argus/metric/prometheus
用途:
- 配置文件存储路径:
${PROMETHEUS_BASE_PATH}/prometheus.yml
- 规则文件路径:
${PROMETHEUS_BASE_PATH}/rules/*.yml
- 监控目标文件路径:
${PROMETHEUS_BASE_PATH}/targets/
目录结构
容器启动后会在 ${PROMETHEUS_BASE_PATH}
下创建以下目录结构:
${PROMETHEUS_BASE_PATH}/
├── prometheus.yml # 主配置文件
├── rules/ # 告警规则目录
│ └── *.yml
└── targets/ # 监控目标目录
├── node_exporter.json
└── dcgm_exporter.json
动态配置
- 规则文件: 在
rules/
目录下添加.yml
文件即可自动加载 - 监控目标: 修改
targets/
目录下的 JSON 文件即可动态更新监控目标 - 主配置: 修改
prometheus.yml
后可通过 Prometheus 的/-/reload
端点重新加载配置
权限管理
默认路径权限
- 默认路径
/private/argus/metric/prometheus
在 Dockerfile 中已设置正确的权限 - nobody 用户(UID: 2133, GID: 2015)拥有完全读写权限
自定义路径权限
- 当使用自定义
PROMETHEUS_BASE_PATH
时,启动脚本会自动创建目录并设置权限 - 确保 nobody 用户对自定义路径有读写权限
挂载卷注意事项
- 主机目录权限: 确保挂载的主机目录对 nobody 用户(UID: 2133)可写
- SELinux: 如果使用 SELinux,可能需要设置适当的上下文
- Docker 用户映射: 确保容器内的 nobody 用户与主机用户权限匹配
故障排除
权限问题
如果遇到权限错误,可以检查:
# 检查目录权限
ls -la /path/to/prometheus/data
# 检查用户映射
id nobody
# 手动修复权限
chown -R 2133:2015 /path/to/prometheus/data
chmod -R 755 /path/to/prometheus/data
动态 Targets 配置
配置流程
-
节点资源清单:
nodes.json
包含所有监控节点的基本信息[ { "node_id": "A1", "user_id": "user01", "ip": "1.2.3.4", "hostname": "dev-node-1", "labels": ["production", "us-west-1"] } ]
-
Exporter 配置:
exporter_config.json
定义各类型 exporter 的端口和标签模板- 支持 dcgm (GPU监控) 和 node (系统监控) 两种类型
- 配置端口映射和标签模板规则
-
自动拆分生成:
update_targets.py
脚本根据节点清单自动生成对应的 targets 文件- 读取
nodes.json
获取节点信息 - 按 exporter 类型拆分生成
targets/*_exporter.json
- 应用标签模板,生成完整的监控目标配置
- 读取
-
热加载机制:
- 脚本支持守护进程模式,定期检查
nodes.json
变化 - 文件内容变化时自动重新生成 targets 配置
- Prometheus 自动发现并重新加载新的监控目标
- 脚本支持守护进程模式,定期检查
使用方式
# 单次更新(注意用户权限,此方法用于测试,但生成文件是 root 权限)
python3 update_targets.py --config nodes.json --targets-dir targets/
# 守护进程模式, 该进程托管于supervisor
python3 update_targets.py --daemon --check-interval 30
注意事项
- 确保挂载的目录有适当的读写权限
- 配置文件会在容器启动时自动生成,无需手动创建
- 可以通过修改环境变量
PROMETHEUS_BASE_PATH
来改变所有相关路径,无需重新构建镜像 - 自定义路径的目录会在启动时自动创建并设置权限
nodes.json
文件变化后,targets 配置会自动更新,无需手动干预