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