dev_1.0.0_sundp 完成Metric模块及模块e2e测试 (#18)

Co-authored-by: sundapeng.sdp <sundapeng@hashdata.cn>
Reviewed-on: #18
Reviewed-by: xuxt <xuxt@zgclab.edu.cn>
Reviewed-by: yuyr <yuyr@zgclab.edu.cn>
Reviewed-by: huhy <husteryezi@163.com>
This commit was merged in pull request #18.
This commit is contained in:
2025-10-11 17:15:06 +08:00
parent 1e5e91b193
commit c098f1d3ce
65 changed files with 10172 additions and 0 deletions

View File

@@ -0,0 +1,114 @@
# 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 配置会自动更新,无需手动干预