115 lines
3.7 KiB
Markdown
Executable File
115 lines
3.7 KiB
Markdown
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 用户对自定义路径有读写权限
|
||
|
||
### 挂载卷注意事项
|
||
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 配置会自动更新,无需手动干预
|