# 系统架构图 ## 容器关系图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 边缘节点 (Edge Agents) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Edge Node 1 │ │ Edge Node 2 │ │ Edge Node N │ │ │ │ │ │ │ │ │ │ │ │ Prometheus │ │ Prometheus │ │ Prometheus │ │ │ │ Edge │ │ Edge │ │ Edge │ │ │ │ │ │ │ │ │ │ │ │ ONVIF │ │ ONVIF │ │ ONVIF │ │ │ │ Exporter │ │ Exporter │ │ Exporter │ │ │ │ │ │ │ │ │ │ │ │ Blackbox │ │ Blackbox │ │ Blackbox │ │ │ │ Exporter │ │ Exporter │ │ Exporter │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └──────────────────┼──────────────────┘ │ │ │ │ │ remote_write │ │ (HTTP POST) │ └────────────────────────────┼────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 中央服务器 (Central Server) │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ VictoriaMetrics (8428) │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ │ │ 远程写入接收器 │ │ │ │ │ │ - 接收边缘节点推送的指标数据 │ │ │ │ │ │ - 存储时序数据 │ │ │ │ │ │ - 提供查询接口 │ │ │ │ │ └────────────────────────────────────────────────────┘ │ │ │ └────────────────────┬───────────────────────────────────────┘ │ │ │ │ │ │ 数据查询 │ │ │ │ │ ┌────────────────────▼───────────────────────────────────────┐ │ │ │ Prometheus Central (9091) │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ │ │ 指标收集和查询引擎 │ │ │ │ │ │ - 从 VictoriaMetrics 读取数据 │ │ │ │ │ │ - 抓取本地服务指标 (自身、Grafana、Alertmanager) │ │ │ │ │ │ - 评估告警规则 │ │ │ │ │ │ - 提供 PromQL 查询接口 │ │ │ │ │ └────────────────────────────────────────────────────┘ │ │ │ └────────────┬───────────────────────────┬───────────────────┘ │ │ │ │ │ │ │ 告警触发 │ 数据查询 │ │ │ │ │ │ ┌────────────▼──────────┐ ┌─────────────▼──────────────┐ │ │ │ Alertmanager (9093) │ │ Grafana (3000) │ │ │ │ ┌──────────────────┐ │ │ ┌──────────────────────┐ │ │ │ │ │ 告警管理 │ │ │ │ 可视化仪表板 │ │ │ │ │ │ - 接收告警 │ │ │ │ - 从 Prometheus 查询 │ │ │ │ │ │ - 告警分组 │ │ │ │ - 创建图表和仪表板 │ │ │ │ │ │ - 发送通知 │ │ │ │ - 多用户管理 │ │ │ │ │ │ - 告警抑制 │ │ │ │ - 中文界面 │ │ │ │ │ └──────────────────┘ │ │ └──────────────────────┘ │ │ │ └───────────────────────┘ │ └──────────────────────────┘ │ │ │ │ └──────────────────────────────┼──────────────────────────────────┘ │ │ HTTP 访问 │ ┌───────────────┼───────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 管理员 │ │ 用户组A │ │ 用户组B │ │ (Admin) │ │ (Org A) │ │ (Org B) │ └─────────────┘ └─────────────┘ └─────────────┘ ``` ## 数据流向 ### 1. 数据收集流程 ``` 边缘节点设备 │ ├─ ONVIF 设备 (摄像头等) │ └─> ONVIF Exporter ──┐ │ │ ├─ 网络设备 (IP地址) │ │ └─> Blackbox Exporter ─┤ │ │ └─> Prometheus Edge ───────┘ │ │ remote_write (HTTP POST) ▼ VictoriaMetrics (8428) │ │ 数据存储 ▼ Prometheus Central (9091) │ ├─> 告警规则评估 │ └─> Alertmanager (9093) │ └─> 数据查询 └─> Grafana (3000) ``` ### 2. 告警流程 ``` 设备异常 │ ▼ Prometheus 检测到指标异常 │ ▼ 告警规则触发 (alert_rules.yml) │ ▼ 发送告警到 Alertmanager │ ▼ Alertmanager 处理告警 ├─> 告警分组 ├─> 告警抑制 └─> 发送通知 (webhook/邮件等) ``` ### 3. 查询流程 ``` 用户访问 Grafana │ ▼ Grafana 发送 PromQL 查询 │ ▼ Prometheus 处理查询 │ ├─> 从 VictoriaMetrics 读取数据 └─> 返回查询结果 │ ▼ Grafana 渲染图表 │ ▼ 用户查看监控数据 ``` ## 容器详细说明 ### 1. VictoriaMetrics (8428) - **作用**:远程写入接收器,存储时序数据 - **接收**:边缘节点通过 `remote_write` 推送的数据 - **提供**:数据查询接口 - **数据路径**:`/storage/victoria-metrics-data` ### 2. Prometheus Central (9091) - **作用**:指标收集、查询和告警评估 - **数据源**: - 从 VictoriaMetrics 读取边缘节点数据 - 抓取本地服务(自身、Grafana、Alertmanager、VictoriaMetrics) - **功能**: - 评估告警规则 (`alert_rules.yml`) - 提供 PromQL 查询接口 - 发送告警到 Alertmanager - **数据路径**:`/storage/prometheus-data` ### 3. Alertmanager (9093) - **作用**:告警管理和通知 - **接收**:来自 Prometheus 的告警 - **功能**: - 告警分组和去重 - 告警抑制 - 发送通知(当前配置:webhook `http://127.0.0.1:5001/`) ### 4. Grafana (3000) - **作用**:数据可视化和仪表板 - **数据源**:从 Prometheus 查询数据 - **功能**: - 创建图表和仪表板 - 多用户管理(组织隔离) - 中文界面 - 权限控制 - **数据路径**:`/storage/grafana-data` ## 网络关系 ``` monitoring_net (Docker Bridge Network) │ ├─ prometheus-central:9090 (内部) │ └─> 映射到宿主机:9091 │ ├─ grafana:3000 (内部) │ └─> 映射到宿主机:3000 │ ├─ alertmanager:9093 (内部) │ └─> 映射到宿主机:9093 │ └─ victoria-metrics:8428 (内部) └─> 映射到宿主机:8428 ``` ## 端口映射 | 容器 | 内部端口 | 外部端口 | 用途 | |------|---------|---------|------| | Prometheus | 9090 | 9091 | PromQL 查询和 Web UI | | Grafana | 3000 | 3000 | 可视化仪表板 | | Alertmanager | 9093 | 9093 | 告警管理界面 | | VictoriaMetrics | 8428 | 8428 | 远程写入和查询接口 | ## 数据存储 所有数据存储在 `/storage` 分区: ``` /storage/ ├── prometheus-data/ # Prometheus 时序数据 ├── grafana-data/ # Grafana 配置和仪表板 ├── victoria-metrics-data/ # VictoriaMetrics 时序数据 └── docker/ # Docker 数据 ``` ## 依赖关系 ``` VictoriaMetrics ↑ (数据查询) │ Prometheus ├─> (告警触发) ──> Alertmanager └─> (数据查询) ──> Grafana ``` **启动顺序**: 1. VictoriaMetrics(数据存储) 2. Prometheus(依赖 VictoriaMetrics) 3. Alertmanager(接收 Prometheus 告警) 4. Grafana(查询 Prometheus 数据)