完善中央与边缘部署、远程写入与监控文档

- 增加中央与边缘完整配置和部署脚本
- 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明
- 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Super User
2026-02-25 04:24:40 -05:00
parent 9e37f79a36
commit 95a09fd9d8
52 changed files with 5978 additions and 0 deletions

140
doc/PROJECT_DEFECTS.md Normal file
View File

@@ -0,0 +1,140 @@
# 项目缺陷分析
基于 README、central-server 及相关文档的审查结果。
---
## 一、严重缺陷
### 1. Grafana 无法展示边缘节点数据(数据源缺失)【已修复】
**现象**:边缘节点通过 remote_write 将指标推送到 **VictoriaMetrics**,此前 Grafana 仅配置了 **Prometheus** 数据源。
**数据流与配置顺序**
- **边缘主动上报**:边缘节点上的 Prometheus/Agent 配置了 `remote_write` 指向中央服务器的 VictoriaMetrics`http://中央IP:8428/api/v1/write`),会主动推送指标到中央。
- **必须先配置边缘**:只有在边缘节点里配置好“中央服务器地址 + 8428 端口”并启动后,数据才会出现在 VictoriaMetrics 中;中央仅提供接收端,不会去拉边缘。
- **Grafana 看到边缘数据**:中央已增加 **VictoriaMetrics** 数据源(`grafana/provisioning/datasources/victoriametrics.yml`)后,在 Grafana 中选用 “VictoriaMetrics” 数据源即可查询这些上报上来的边缘数据;无需再配“边缘数据”本身,只需边缘按文档配置上报。
**已做修改**
-`grafana/provisioning/datasources/` 中新增 **victoriametrics.yml**,数据源 URL 为 `http://victoria-metrics:8428`
- 边缘数据可见的前提:边缘已配置并运行,且 remote_write 指向本中央 VM参见 `doc/EDGE_NODE_SETUP.md``doc/EDGE_AGENT_CONFIG.md`)。
---
### 2. docker-compose 网络名未设置默认值导致部署失败
**现象**`docker-compose.yml` 中默认网络名为 `${NETWORK_NAME}`,未提供默认值。
```yaml
networks:
default:
name: ${NETWORK_NAME}
```
**依据**`deploy.sh` 只 export 了部分变量,**未 export `NETWORK_NAME`**。若用户“使用默认配置”且没有 `.env`(脚本提示“未找到 .env 和 env.example”时`NETWORK_NAME` 为空Compose 会使用空字符串作为网络名,可能导致创建失败或行为异常。
**建议**
-`deploy.sh` 中为 `NETWORK_NAME` 设置默认值并 export例如
`NETWORK_NAME=${NETWORK_NAME:-central_default}` 或与 Traefik 一致时 `NETWORK_NAME=${NETWORK_NAME:-traefik}`
- 或在 `docker-compose.yml` 中写为:`name: ${NETWORK_NAME:-central_default}`
---
### 3. VictoriaMetrics 容器内监听端口与映射不一致
**现象**:容器内通过环境变量改变监听端口,与端口映射不一致。
**依据**`docker-compose.yml`
```yaml
ports:
- "${VICTORIAMETRICS_PORT:-8428}:8428"
command:
- "--httpListenAddr=:${VICTORIAMETRICS_PORT:-8428}"
```
- 端口映射为「主机 `${VICTORIAMETRICS_PORT}` → 容器 **8428**
- 若用户设置 `VICTORIAMETRICS_PORT=8430`,容器会监听 **8430**,而映射期望容器监听 **8428**,导致主机 8430 无法正确访问服务。
**建议**:容器内应固定监听 8428仅用环境变量控制主机端口。例如
```yaml
command:
- "--httpListenAddr=:8428"
```
---
## 二、中等问题
### 4. Alertmanager Webhook 在容器内不可达
**现象**`alertmanager/alertmanager.yml` 中 webhook 为 `http://127.0.0.1:5001/`
在容器内 `127.0.0.1` 指向 Alertmanager 自身,无法访问宿主机上的 webhook 服务,告警无法送达。
**建议**
- Linux 下可使用 `http://host.docker.internal:5001/`(若 Docker 支持)
- 或使用宿主机在 Docker 网桥上的 IP并在文档中说明需替换为实际地址
---
### 5. 默认启用 Traefik 且为示例域名,不利于“快速开始”
**现象**`env.example``TRAEFIK_ENABLED=true`,且域名为 `grafana.example.com` 等。README 的“快速开始”是 `http://localhost:3000`
**结果**:新用户若直接 `cp env.example .env` 并部署,会默认走 Traefik + 示例域名,本地浏览器无法用 localhost 访问,与文档体验不一致。
**建议**
- `env.example` 中默认设为 `TRAEFIK_ENABLED=false`,便于本地快速开始
- 或在 README/CONFIGURATION 中明确写:本地试用请将 `TRAEFIK_ENABLED=false`,并说明 Traefik 为可选
---
### 6. 部署脚本未导出 NETWORK_NAME
**现象**`deploy.sh` 中通过 `set -a; source .env` 可导出 .env 中的变量,但若没有 .env或 .env 中未写 `NETWORK_NAME`,则 Compose 收到的 `NETWORK_NAME` 可能为空。
**建议**:在 deploy.sh 的“设置默认值”或 export 段落中显式设置并 export
```bash
NETWORK_NAME=${NETWORK_NAME:-traefik}
export NETWORK_NAME
```
与第 2 点一起修复,可避免无 .env 或漏配时的部署问题。
---
## 三、文档/一致性问题
### 7. 架构文档与实现不一致
**现象**`doc/ARCHITECTURE.md` 描述“Prometheus 从 VictoriaMetrics 读取数据”,但当前 `prometheus.yml` 仅有 **remote_write** 到 VictoriaMetrics没有 **remote_read**
**建议**修改文档为“Prometheus 将本地抓取数据 remote_write 到 VictoriaMetrics边缘数据仅存在于 VictoriaMetrics”并说明 Grafana 如需查边缘数据应使用 VictoriaMetrics 数据源(与第 1 点修复一致)。
---
### 8. 示例密码与安全建议不一致
**现象**README 和配置中默认管理员密码为 `admin123`CONFIGURATION.md 建议“首次部署后请立即修改”“生产环境必须修改”。
**建议**:在 README 快速开始处增加一句:“默认密码仅用于首次登录,生产环境请立即修改”,并在部署成功输出中再次提醒。
---
## 四、小结
| 优先级 | 缺陷 | 建议 |
|--------|------|------|
| ~~高~~ | ~~Grafana 缺少 VictoriaMetrics 数据源~~ | ✅ 已增加 `victoriametrics.yml`;边缘需先配置 remote_write 指向中央 VM |
| 高 | Compose 网络名无默认值 | 为 NETWORK_NAME 设默认并 export |
| 高 | VictoriaMetrics 容器监听端口与端口映射不一致 | 容器内固定监听 8428 |
| 中 | Alertmanager webhook 127.0.0.1 在容器内无效 | 改为 host.docker.internal 或宿主机 IP并文档说明 |
| 中 | 默认启用 Traefik + 示例域名 | 默认关闭 Traefik 或文档明确本地试用步骤 |
| 中 | deploy 未导出 NETWORK_NAME | 在 deploy.sh 中设置并 export |
| 低 | 架构文档与实现不符 | 更新 ARCHITECTURE.md |
| 低 | 默认密码与安全建议 | 在 README 和部署输出中强调修改密码 |
以上为当前发现的主要缺陷与改进建议,优先修复前三条可显著提升部署成功率和“边缘+中央”统一监控的可用性。