Files
Distributed-Prometheus/doc/EDGE_AGENT_CONFIG.md
Super User 95a09fd9d8 完善中央与边缘部署、远程写入与监控文档
- 增加中央与边缘完整配置和部署脚本
- 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明
- 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-25 04:24:40 -05:00

324 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 边缘节点配置文件说明
## 边缘节点需要什么
| 类型 | 说明 | 对应组件 |
|------|------|----------|
| **必选** | **remote_write**:把边缘指标推到中央 | **prometheus-edge**(内配 remote_write 到中央 VictoriaMetrics |
| **必选** | **Blackbox**Ping/网络探测 | **blackbox-exporter** 容器 |
| **可选** | ONVIF、SNMP、Frigate 等 | **onvif-exporter**`--profile onvif`)、或自建/第三方镜像 |
默认部署只起 **prometheus-edge** + **blackbox-exporter**;需要 ONVIF 时再设 `ONVIF_EXPORTER_IMAGE``docker compose --profile onvif up -d`。参见 [ONVIF_ALTERNATIVES.md](ONVIF_ALTERNATIVES.md)。
---
## 边缘节点各容器分别做什么
| 容器 | 必选/可选 | 作用 | 端口/接口 |
|------|-----------|------|-----------|
| **prometheus-edge** | **必选** | 抓取 Blackbox及可选 ONVIF 等),通过 **remote_write** 推送到中央 VictoriaMetrics | 对外 9092内部抓取 blackbox:9115、可选 onvif:9600 |
| **blackbox-exporter** | **必选** | 网络 Ping/HTTP/TCP 探测,暴露 `/probe` 给 prometheus-edge 抓取 | 容器内 9115 |
| **onvif-exporter** | **可选** | 本项目自建:读取 `config/onvif-targets.json`ONVIF GetDeviceInformation 探测,暴露 `onvif_device_up``onvif_probe_duration_seconds`。启用:`docker compose --profile onvif up -d --build`。 | 容器内 9600 |
**数据流**Ping 目标 → blackbox-exporter:9115 → prometheus-edge 抓取 → **remote_write** → 中央 VictoriaMetrics。
若启用 ONVIFONVIF 设备 → onvif-exporter:9600 → prometheus-edge 抓取 → remote_write → 中央。
---
## ONVIF 镜像替代方案
**说明**:目前**没有**公开可用的 ONVIF→Prometheus 镜像(如 ghcr.io/atiek/onvif-exporter 已不存在)。可选做法:
| 方式 | 说明 |
|------|------|
| **用替代方案** | 摄像头支持 SNMP 时用 **prom/snmp-exporter**;已用 Frigate 时抓其 `/api/metrics`;仅需在线监控时用 **Blackbox** 对摄像头 IP 做 Ping/HTTP。详见 **[ONVIF_ALTERNATIVES.md](ONVIF_ALTERNATIVES.md)**。 |
| **ONVIF 可选** | 边缘默认不启动 ONVIF 服务(无可用镜像)。需要时自建镜像并在 `.env``ONVIF_EXPORTER_IMAGE=你的镜像:tag`,再执行 `docker compose --profile onvif up -d`。 |
| **自建镜像** | 基于 Go ONVIF 库编写 exporter 并构建镜像,见 ONVIF_ALTERNATIVES.md 中「ONVIF 自建 Exporter」。 |
---
## 目录结构
```
edge-agent/
├── docker-compose.yml # Docker Compose 服务编排配置
├── deploy.sh # 部署脚本
├── quick-setup.sh # 快速配置脚本
├── env.example # 环境变量示例
├── prometheus-edge/
│ └── prometheus.yml # Prometheus Edge 配置
├── blackbox/
│ └── config.yml # Blackbox Exporter 配置
└── config/
├── targets.csv # 统一监控目标配置(推荐)
├── devices.csv # ONVIF 设备配置(旧格式)
├── ping-targets.csv # Ping 目标配置(旧格式)
├── onvif-targets.json # ONVIF 设备 JSON 配置(自动生成)
├── ping-targets.json # Ping 目标 JSON 配置(自动生成)
├── update-configs.sh # 配置文件更新脚本
├── csv-to-targets.sh # 统一配置转换脚本
├── csv-to-json.sh # ONVIF 配置转换脚本
├── csv-to-ping-json.sh # Ping 配置转换脚本
├── setup-remote-write.sh # 远程写入配置脚本
└── test-connection.sh # 连接测试脚本
```
## 配置文件详解
### 1. docker-compose.yml
**作用**:定义边缘节点的 Docker 容器配置
**包含的服务**
- **必选**`prometheus-edge`(抓取 + remote_write`blackbox-exporter`Ping 探测)
- **可选**`onvif-exporter`(需 `--profile onvif` 且设置 `ONVIF_EXPORTER_IMAGE`
**关键配置**
- 资源限制:内存和 CPU 限制(适合边缘设备)
- 环境变量:中央服务器地址和端口
- 数据保留1 小时(边缘节点只做临时存储)
- 远程写入:自动推送到中央服务器
---
### 2. deploy.sh
**作用**:自动化部署脚本,一键部署边缘节点
**功能**
1. ✅ 检查 Docker 和 Docker Compose 环境
2. ✅ 检查 jq 工具(用于配置转换)
3. ✅ 生成配置文件(从 CSV 到 JSON
4. ✅ 验证配置文件存在性
5. ✅ 创建环境变量文件
6. ✅ 创建数据目录
7. ✅ 拉取 Docker 镜像
8. ✅ 启动所有服务
**使用**
```bash
bash deploy.sh
```
---
### 3. quick-setup.sh
**作用**:快速配置脚本,自动配置边缘节点
**功能**
- 自动检测本机 IP
- 创建 `.env` 文件
- 配置统一监控目标(`targets.csv`
- 生成配置文件
- 可选择立即部署
**使用**
```bash
bash quick-setup.sh
```
---
### 4. env.example / .env
**作用**:环境变量配置
**配置项**
```bash
CENTRAL_SERVER_HOST=192.168.2.21 # 中央服务器地址
CENTRAL_SERVER_PORT=8428 # 中央服务器端口
EDGE_NODE_ID=workernode_1 # 边缘节点标识
```
**说明**
- `env.example` 是示例文件
- 部署时会自动创建 `.env` 文件
- 需要根据实际情况修改
---
### 5. prometheus-edge/prometheus.yml
**作用**:边缘 Prometheus 主配置文件
**主要配置**
#### Global全局配置
```yaml
scrape_interval: 120s # 抓取间隔2分钟
evaluation_interval: 120s # 告警评估间隔
external_labels:
region: workernode_1 # 边缘节点标识
```
#### Remote Write远程写入
```yaml
remote_write:
- url: http://${CENTRAL_SERVER_HOST}:${CENTRAL_SERVER_PORT}/api/v1/write
```
- **作用**:将收集的数据推送到中央服务器 VictoriaMetrics
- **目的**:边缘节点不存储长期数据,只做数据收集和转发
#### Scrape Configs抓取配置
定义了 3 个抓取任务:
1. **onvif-devices** - 抓取 ONVIF 设备指标(通过 ONVIF Exporter
2. **network-ping** - 抓取网络探测指标(通过 Blackbox Exporter
3. **prometheus-edge** - 抓取自身指标
**数据保留**1 小时(边缘节点只做临时存储)
---
### 6. blackbox/config.yml
**作用**Blackbox Exporter 探测模块配置
**支持的探测类型**
- `icmp` - ICMP Ping 探测
- `tcp_connect` - TCP 连接探测
- `http_2xx` - HTTP 服务探测
- `http_post_2xx` - HTTP POST 探测
- `tcp_connect_tls` - TLS 连接探测
**当前使用**:主要使用 `icmp` 模块进行网络连通性探测
---
### 7. config/targets.csv
**作用**:统一监控目标配置文件(推荐使用)
**格式**
```csv
type,ip,device,group,network,device_type,model,location,username,password,onvif_port
ping,8.8.8.8,google_dns,external,external,,,,,,
onvif,192.168.1.100,,,front_door,camera,HIKVISION_DS-2CD2342WD-I,front_door,admin,password1,80
```
**说明**
- `type` 字段:`ping``onvif`
- 可以在一个文件中配置所有监控目标
- 详细说明参考:`doc/TARGETS_CSV_GUIDE.md`
---
### 8. config/update-configs.sh
**作用**:从 CSV 文件生成 JSON 配置文件
**功能**
- 优先使用 `targets.csv`(统一配置)
- 兼容旧格式(`devices.csv` + `ping-targets.csv`
- 自动生成 `onvif-targets.json``ping-targets.json`
**使用**
```bash
cd config
./update-configs.sh
```
---
### 9. config/csv-to-targets.sh
**作用**:统一配置转换脚本
**功能**
-`targets.csv` 读取配置
- 根据 `type` 字段分离 ONVIF 和 Ping 目标
- 生成对应的 JSON 配置文件
---
### 10. config/setup-remote-write.sh
**作用**:配置远程写入(已集成到部署脚本中)
---
### 11. config/test-connection.sh
**作用**:测试边缘节点与中央服务器的连接
**功能**
- 测试网络连通性
- 测试 VictoriaMetrics 写入接口
- 验证配置是否正确
---
## 配置文件关系图
```
.env (环境变量)
prometheus-edge/prometheus.yml ──> 使用环境变量
├─> config/onvif-targets.json ──> ONVIF Exporter
└─> config/ping-targets.json ────> Blackbox Exporter
└─> 从 targets.csv 生成
```
---
## 数据流向
```
监控目标
├─> ONVIF 设备 ──> ONVIF Exporter ──┐
│ │
├─> 网络设备 ──> Blackbox Exporter ──┤
│ │
└─> 边缘节点自身 ──────────────────────┤
Prometheus Edge
│ remote_write
VictoriaMetrics (中央服务器)
```
---
## 配置文件修改指南
### 修改监控目标
1. 编辑 `config/targets.csv`
2. 运行 `cd config && ./update-configs.sh`
3. 等待 5 分钟自动重载,或重启容器
### 修改中央服务器地址
1. 编辑 `.env` 文件
2. 重启容器:`docker compose restart prometheus-edge`
### 修改 Prometheus 配置
1. 编辑 `prometheus-edge/prometheus.yml`
2. 重启容器:`docker compose restart prometheus-edge`
---
## 重要提示
1. **数据保留**:边缘节点只保留 1 小时数据,长期数据存储在中央服务器
2. **资源限制**:配置了内存和 CPU 限制,适合边缘设备
3. **端口冲突**Prometheus Edge 使用 9092避免与中央服务器冲突
4. **网络连通性**:确保可以访问中央服务器的 8428 端口
5. **配置更新**:修改 CSV 后需要运行 `update-configs.sh` 生成 JSON
---
## 相关文档
- **边缘节点配置**`doc/EDGE_NODE_SETUP.md`
- **监控目标说明**`doc/MONITORING_TARGETS.md`
- **统一配置指南**`doc/TARGETS_CSV_GUIDE.md`
- **系统架构**`doc/ARCHITECTURE.md`