feat: 天地图瓦片缓存(tile-cache)、拓扑标注助手与文档更新

- tile-cache: 瓦片缓存服务(vec/cva)、启动探针、详细日志、上游超时可配置(UPSTREAM_TIMEOUT_MS)
- central: docker-compose 集成 tile-cache,env.example 增加 TILE_CACHE_* / TIANDITU_TK
- topology-editor: 天地图/缓存加载、GPS 安全来源错误提示、TIANDITU 文档(403/白名单、localhost 测试说明)
- doc: README 部署步骤与 GPS 安全来源说明,TIANDITU_CONFIG 完善

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Super User
2026-02-25 11:11:38 -05:00
parent 84d2bcc2cf
commit 72a5bf30b4
32 changed files with 2496 additions and 1941 deletions

View File

@@ -4,323 +4,40 @@
```
central-server/
├── docker-compose.yml # Docker Compose 服务编排配置
├── docker-compose.yml # 服务编排
├── deploy.sh # 部署脚本
├── prometheus.yml # Prometheus 主配置文件
├── alert_rules.yml # 告警规则定义
├── alertmanager/
│ └── alertmanager.yml # Alertmanager 告警管理配置
├── prometheus.yml # Prometheus 主配置
├── alert_rules.yml # 告警规则
├── alertmanager/alertmanager.yml
└── grafana/
├── setup-users.sh # 多用户配置脚本
├── provisioning/
│ ├── datasources/ # 数据源自动配置
│ │ ├── prometheus.yml # Prometheus 数据源
│ │ └── prometheus-admin.yml # 管理员全局数据源
│ └── dashboards/ # 仪表板自动配置
│ └── dashboard.yml # 仪表板配置
├── setup-users.sh
├── provisioning/datasources/ # prometheus.yml, victoriametrics.yml
└── dashboards/
└── onvif-monitoring.json # ONVIF 监控仪表板
```
## 配置文件详解
## 主要服务与端口
### 1. docker-compose.yml
| 服务 | 端口 | 说明 |
|------|------|------|
| prometheus-central | 9091 | 自抓 + 告警评估;边缘数据由 Grafana 从 VictoriaMetrics 查询 |
| grafana | 3000 | 数据源Prometheus中央自抓、VictoriaMetrics边缘数据 |
| victoria-metrics | 8428 | 接收边缘 remote_write |
| alertmanager | 9093 | 告警路由与通知 |
**作用**:定义所有 Docker 容器的配置和编排
## 关键配置摘要
**包含的服务**
- `prometheus-central` - Prometheus 中央服务器(端口 9091
- `grafana` - Grafana 可视化仪表板(端口 3000中文界面
- `alertmanager` - 告警管理器(端口 9093
- `victoria-metrics` - 远程写入接收器(端口 8428
- **prometheus.yml**`remote_write` 指向 VictoriaMetrics`rule_files: alert_rules.yml`抓取自身、VM、Alertmanager、Grafana。
- **告警规则与通知**:见 [ALERTING.md](ALERTING.md)。
- **Grafana 数据源**Provisioning 下配置 Prometheus、VictoriaMetrics查边缘指标请选 **VictoriaMetrics**
- **Grafana Geomap 使用天地图缓存**:在 Geomap 面板中将 Base layer 选为 **XYZ Tile layer**,底图 URL 填 `http://<central>:4080/tiles/vec/{z}/{x}/{y}`,再添加一层 XYZ 填 `http://<central>:4080/tiles/cva/{z}/{x}/{y}`中文注记。key 仅需在 central 配置 `TIANDITU_TK`,无需在 Grafana 中填写。详见 [TIANDITU_CONFIG.md](TIANDITU_CONFIG.md)。
- **多用户**`grafana/setup-users.sh`,见 [USER_MANAGEMENT.md](USER_MANAGEMENT.md)。
**关键配置**
- 数据存储:所有数据存储在 `/storage` 分区
- 网络:所有容器在 `monitoring_net` 网络中
- 卷挂载:配置文件、数据目录、仪表板等
## 修改与重载
**使用**
```bash
docker compose up -d # 启动所有服务
docker compose down # 停止所有服务
```
---
### 2. deploy.sh
**作用**:自动化部署脚本,一键部署中央服务器
**功能**
1. ✅ 检查 Docker 和 Docker Compose 环境
2. ✅ 检查磁盘空间(根分区和 /storage 分区)
3. ✅ 验证配置文件存在性
4. ✅ 创建数据目录并设置权限
5. ✅ 拉取 Docker 镜像
6. ✅ 启动所有服务
7. ✅ 检查服务状态
**使用**
```bash
bash deploy.sh
```
**输出信息**
- 服务访问地址
- 管理命令
- 防火墙提示
- 下一步操作建议
---
### 3. prometheus.yml
**作用**Prometheus 主配置文件,定义数据收集和查询规则
**主要配置**
#### Global全局配置
```yaml
scrape_interval: 15s # 抓取间隔
evaluation_interval: 15s # 告警规则评估间隔
external_labels:
cluster: 'central-monitoring' # 集群标识
```
#### Remote Write远程写入
```yaml
remote_write:
- url: http://victoria-metrics:8428/api/v1/write
```
- **作用**:将 Prometheus 收集的数据写入 VictoriaMetrics
- **目的**:接收边缘节点推送的数据
#### Scrape Configs抓取配置
定义了 4 个抓取任务:
1. **prometheus-central** - 抓取自身指标
2. **victoria-metrics** - 抓取 VictoriaMetrics 指标
3. **alertmanager** - 抓取 Alertmanager 指标
4. **grafana** - 抓取 Grafana 指标
#### Rule Files告警规则文件
```yaml
rule_files:
- "alert_rules.yml"
```
- 引用 `alert_rules.yml` 文件中的告警规则
#### Alerting告警配置
```yaml
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
```
- 配置 Alertmanager 地址,用于发送告警
---
### 4. alert_rules.yml
**作用**:定义告警规则,当监控指标满足条件时触发告警
**告警组**
#### onvif_alertsONVIF 设备告警组)
- **ONVIFDeviceDown** - 设备离线告警critical
- **ONVIFDeviceHighTemperature** - 设备温度过高告警warning
- **ONVIFDeviceLowStorage** - 设备存储空间不足告警warning
#### network_alerts网络设备告警组
- **NetworkDeviceDown** - 网络设备离线告警critical
- **HighNetworkLatency** - 网络延迟过高告警warning
**告警规则格式**
```yaml
- alert: AlertName
expr: promql_query # PromQL 查询表达式
for: 1m # 持续时间
labels:
severity: critical # 严重程度
annotations:
summary: "告警摘要"
description: "详细描述"
```
**详细说明**:参考 `doc/ALERT_RULES_EXPLANATION.md`
---
### 5. alertmanager/alertmanager.yml
**作用**Alertmanager 配置,定义告警路由和通知方式
**主要配置**
#### Global全局配置
- SMTP 邮件服务器配置(当前未使用)
#### Route路由配置
- 告警分组规则
- 告警发送间隔
- 默认接收器
#### Receivers接收器
- 当前配置Webhook `http://127.0.0.1:5001/`
- 可配置:邮件、企业微信、钉钉等
#### Inhibit Rules抑制规则
- 避免重复告警
- 当 critical 告警存在时,抑制 warning 告警
**详细说明**:参考 `doc/ALERTMANAGER_CONFIG.md`
---
### 6. grafana/provisioning/
**作用**Grafana 自动配置目录,容器启动时自动加载
#### datasources/prometheus.yml
**作用**:自动配置 Prometheus 数据源
**配置内容**
- 数据源名称Prometheus
- 数据源类型prometheus
- 访问方式proxy通过 Grafana 代理)
- URL`http://prometheus-central:9090`
- 默认数据源:是
#### datasources/prometheus-admin.yml
**作用**:管理员全局数据源(可选)
**特点**
- 允许管理员查看所有数据(不受标签过滤限制)
- 用于管理员查看全局监控数据
#### dashboards/dashboard.yml
**作用**:自动加载仪表板配置
**配置内容**
-`/var/lib/grafana/dashboards` 目录自动加载仪表板
- 更新间隔10 秒
- 允许 UI 更新:是
---
### 7. grafana/dashboards/onvif-monitoring.json
**作用**ONVIF 设备监控仪表板
**内容**
- ONVIF 设备状态面板
- 设备在线率仪表
- 其他监控图表
**自动加载**:通过 `dashboard.yml` 配置自动加载
---
### 8. grafana/setup-users.sh
**作用**:自动化配置 Grafana 多用户和组织
**功能**
- 创建 Grafana 组织
- 创建用户并分配到组织
- 通过 Grafana API 批量配置
**使用**
```bash
cd central-server/grafana
bash setup-users.sh
```
**详细说明**:参考 `doc/USER_MANAGEMENT.md`
---
## 配置文件关系图
```
docker-compose.yml
├─> prometheus.yml ──┐
│ │
├─> alert_rules.yml ──┤──> Prometheus 容器
│ │
└─> alertmanager.yml ─┘──> Alertmanager 容器
└─> grafana/
├─> provisioning/ ──> Grafana 自动配置
└─> dashboards/ ────> 仪表板文件
```
---
## 数据流向
```
边缘节点数据
VictoriaMetrics (8428) ──> 存储数据
Prometheus (9091) ──┬──> 查询数据 ──> Grafana (3000)
│ │
└──> 评估告警规则 (alert_rules.yml)
Alertmanager (9093) ──> 发送通知
```
---
## 配置文件修改指南
### 修改 Prometheus 配置
1. 编辑 `prometheus.yml`
2. 重启容器:`docker compose restart prometheus-central`
3. 或使用热重载:`curl -X POST http://localhost:9091/-/reload`
### 修改告警规则
1. 编辑 `alert_rules.yml`
2. 重启容器:`docker compose restart prometheus-central`
3. 或使用热重载:`curl -X POST http://localhost:9091/-/reload`
### 修改 Alertmanager 配置
1. 编辑 `alertmanager/alertmanager.yml`
2. 重启容器:`docker compose restart alertmanager`
### 修改 Grafana 配置
1. 编辑 `grafana/provisioning/` 下的配置文件
2. 重启容器:`docker compose restart grafana`
3. 或通过 Grafana Web UI 修改(会持久化到数据库)
---
## 重要提示
1. **数据存储**:所有数据存储在 `/storage` 分区,避免根分区空间不足
2. **端口映射**Prometheus 使用 9091避免与 cockpit 冲突)
3. **配置文件权限**:确保配置文件有正确的读取权限
4. **网络连通性**:确保边缘节点可以访问 8428 端口VictoriaMetrics
5. **告警通知**:当前配置使用 webhook需要部署接收服务或修改为其他通知方式
---
- Prometheus`prometheus.yml``alert_rules.yml``docker compose restart prometheus-central`,或 `curl -X POST http://localhost:9091/-/reload`(若启用 lifecycle
- Alertmanager`alertmanager/alertmanager.yml``docker compose restart alertmanager`
- Grafana改 provisioning 后重启;或通过 Web UI 修改(持久化到库)。
## 相关文档
- **系统架构**`doc/ARCHITECTURE.md`
- **告警规则**`doc/ALERT_RULES_EXPLANATION.md`
- **Alertmanager 配置**`doc/ALERTMANAGER_CONFIG.md`
- **用户管理**`doc/USER_MANAGEMENT.md`
- [ARCHITECTURE.md](ARCHITECTURE.md) | [ALERTING.md](ALERTING.md) | [USER_MANAGEMENT.md](USER_MANAGEMENT.md) | [central-server/CONFIGURATION.md](../central-server/CONFIGURATION.md)