3.7 KiB
Executable File
Raw Blame History

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 用户与主机用户权限匹配

故障排除

权限问题

如果遇到权限错误,可以检查:

# 检查目录权限
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 包含所有监控节点的基本信息

    [
      {
        "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 自动发现并重新加载新的监控目标

使用方式

# 单次更新(注意用户权限,此方法用于测试,但生成文件是 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 配置会自动更新,无需手动干预