- 增加中央与边缘完整配置和部署脚本 - 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明 - 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例 Co-authored-by: Cursor <cursoragent@cursor.com>
423 lines
9.7 KiB
Markdown
423 lines
9.7 KiB
Markdown
# 故障排查指南
|
||
|
||
## 常见问题及解决方案
|
||
|
||
### 1. 边缘节点 ONVIF Exporter 镜像
|
||
|
||
#### 问题:需要监控 ONVIF 摄像头,但原镜像 `ghcr.io/atiek/onvif-exporter` 不存在或拉取失败
|
||
|
||
**说明**:该镜像在公共 registry **不存在**,且暂无可直接替代的公开 ONVIF→Prometheus 镜像。
|
||
|
||
**建议**:采用替代方案,详见 **[ONVIF_ALTERNATIVES.md](ONVIF_ALTERNATIVES.md)**:
|
||
|
||
1. **摄像头支持 SNMP**:使用 **prom/snmp-exporter**(Docker Hub 有镜像),按设备 MIB 配置后由边缘 Prometheus 抓取。
|
||
2. **已用 Frigate NVR**:直接抓 Frigate 的 `http://<frigate>:5000/api/metrics`。
|
||
3. **仅需在线/可达性**:用现有 **Blackbox Exporter** 对摄像头 IP 做 Ping 或 HTTP/TCP 探测。
|
||
4. **必须用 ONVIF**:自建 exporter 镜像(如基于 Go 的 gonvif/onvif 库),在 `.env` 中设置 `ONVIF_EXPORTER_IMAGE=你的镜像:tag`,并执行 `docker compose --profile onvif up -d`。
|
||
|
||
---
|
||
|
||
### 2. 服务启动失败
|
||
|
||
#### 问题:容器无法启动
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 查看容器状态
|
||
docker compose ps
|
||
|
||
# 2. 查看容器日志
|
||
docker compose logs <服务名>
|
||
|
||
# 3. 检查端口占用
|
||
netstat -tulpn | grep <端口>
|
||
```
|
||
|
||
**常见原因**:
|
||
- 端口被占用
|
||
- 配置文件语法错误
|
||
- 磁盘空间不足
|
||
- 权限问题
|
||
|
||
**解决方案**:
|
||
- 修改端口映射或停止占用端口的服务
|
||
- 检查配置文件语法
|
||
- 清理磁盘空间
|
||
- 检查文件权限
|
||
|
||
---
|
||
|
||
### 3. 数据未推送到中央服务器
|
||
|
||
#### 问题:边缘节点数据未出现在中央服务器
|
||
|
||
**如何确认是否已写入远程(remote_write 是否成功)**:
|
||
|
||
- **重要**:若边缘和中央是**不同机器**(例如边缘 192.168.2.106、中央 192.168.1.10),则 `.env` 里必须填**中央服务器的 IP 或域名**,不能填 `host.docker.internal`(在边缘机上该主机名指向边缘自己,VictoriaMetrics 不在边缘上,导致无法写入)。本机同机部署时才用 `host.docker.internal`。
|
||
|
||
1. **在边缘 Prometheus 看推送指标**
|
||
打开边缘 Prometheus 的 Graph 页面(如 `http://<边缘IP>:9092/graph`),执行:
|
||
- `prometheus_remote_storage_succeeded_samples_total` — 成功写入远程的样本数(有增长说明在推送)。
|
||
- `prometheus_remote_storage_failed_samples_total` — 失败的样本数(若持续增加说明推送失败,需看日志)。
|
||
- `prometheus_remote_storage_queue_length` — 待发送队列长度(长时间很大说明推送跟不上或失败)。
|
||
|
||
2. **在中央直接查 VictoriaMetrics**
|
||
在**中央服务器**上执行(或浏览器访问):
|
||
```bash
|
||
curl -sG 'http://localhost:8428/api/v1/series' --data-urlencode 'match[]=probe_success{job="network-ping"}'
|
||
```
|
||
- 若返回 `"data":[]` 表示还没有收到边缘数据(可能是网络不通、刚启动未到抓取周期、或 remote_write 失败)。
|
||
- 若 `data` 里有元素(带 `__name__`、`job`、`region` 等),说明边缘数据已写入中央。
|
||
|
||
3. **在 Grafana 用 VictoriaMetrics 数据源**
|
||
数据源选 **VictoriaMetrics**,查询例如:
|
||
- `probe_success{job="network-ping", region="workernode_1"}`
|
||
有曲线即表示远程写入且可查询。
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查边缘节点 Prometheus
|
||
curl http://localhost:9092/api/v1/query?query=up
|
||
|
||
# 2. 检查网络连通性
|
||
ping <中央服务器IP>
|
||
telnet <中央服务器IP> 8428
|
||
|
||
# 3. 检查环境变量
|
||
cat edge-agent/.env
|
||
|
||
# 4. 查看边缘节点日志
|
||
docker compose logs prometheus-edge
|
||
```
|
||
|
||
**常见原因**:
|
||
- 中央服务器地址配置错误
|
||
- 网络不通
|
||
- 防火墙阻止
|
||
- VictoriaMetrics 服务未运行
|
||
|
||
**解决方案**:
|
||
- 检查 `.env` 文件中的 `CENTRAL_SERVER_HOST`
|
||
- 测试网络连通性
|
||
- 检查防火墙规则
|
||
- 确认中央服务器 VictoriaMetrics 正常运行
|
||
|
||
---
|
||
|
||
### 4. 告警规则未激活
|
||
|
||
#### 问题:告警规则显示为 inactive
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 在 Prometheus 中查询指标
|
||
# 访问 http://localhost:9091
|
||
# 查询: up{job="onvif-devices"}
|
||
# 查询: probe_success{job="network-ping"}
|
||
|
||
# 2. 检查告警规则文件
|
||
cat central-server/alert_rules.yml
|
||
|
||
# 3. 检查 Prometheus 配置
|
||
cat central-server/prometheus.yml
|
||
```
|
||
|
||
**常见原因**:
|
||
- 指标不存在(边缘节点未推送数据)
|
||
- 告警规则表达式错误
|
||
- 告警规则文件未加载
|
||
|
||
**解决方案**:
|
||
- 部署边缘节点并配置监控目标
|
||
- 检查告警规则表达式
|
||
- 确认 `prometheus.yml` 中引用了 `alert_rules.yml`
|
||
- 重启 Prometheus 容器
|
||
|
||
---
|
||
|
||
### 4. Grafana 无法查询数据
|
||
|
||
#### 问题:Grafana 中查询不到数据
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查数据源配置
|
||
# 访问 Grafana: http://localhost:3000
|
||
# 进入: Configuration -> Data Sources
|
||
|
||
# 2. 测试数据源连接
|
||
# 在数据源配置页面点击 "Test" 按钮
|
||
|
||
# 3. 检查 Prometheus 是否运行
|
||
docker compose ps prometheus-central
|
||
|
||
# 4. 直接在 Prometheus 查询
|
||
curl http://localhost:9091/api/v1/query?query=up
|
||
```
|
||
|
||
**常见原因**:
|
||
- 数据源 URL 配置错误
|
||
- Prometheus 服务未运行
|
||
- 网络问题(容器间通信)
|
||
|
||
**解决方案**:
|
||
- 检查数据源 URL(应为 `http://prometheus-central:9090`)
|
||
- 重启 Prometheus 容器
|
||
- 检查 Docker 网络配置
|
||
|
||
---
|
||
|
||
### 5. 磁盘空间不足
|
||
|
||
#### 问题:容器启动失败,提示空间不足
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查磁盘空间
|
||
df -h
|
||
|
||
# 2. 检查 Docker 数据目录
|
||
du -sh /storage/docker
|
||
du -sh /storage/containerd
|
||
|
||
# 3. 检查应用数据目录
|
||
du -sh /storage/prometheus-data
|
||
du -sh /storage/grafana-data
|
||
du -sh /storage/victoria-metrics-data
|
||
```
|
||
|
||
**解决方案**:
|
||
- 清理 Docker 资源:`docker system prune -a --volumes`
|
||
- 清理系统日志:`journalctl --vacuum-time=3d`
|
||
- 清理包缓存:`dnf clean all` 或 `apt-get clean`
|
||
- 确保数据存储在 `/storage` 分区
|
||
|
||
---
|
||
|
||
### 6. 端口冲突
|
||
|
||
#### 问题:容器启动失败,端口已被占用
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查端口占用
|
||
netstat -tulpn | grep <端口>
|
||
# 或
|
||
ss -tulpn | grep <端口>
|
||
|
||
# 2. 查看占用端口的进程
|
||
lsof -i :<端口>
|
||
```
|
||
|
||
**解决方案**:
|
||
- 停止占用端口的服务
|
||
- 或修改 `docker-compose.yml` 中的端口映射
|
||
- 常见端口冲突:
|
||
- 9090 - cockpit(已改为 9091)
|
||
- 9092 - 边缘节点 Prometheus
|
||
|
||
---
|
||
|
||
### 7. 配置文件语法错误
|
||
|
||
#### 问题:容器启动失败,提示配置错误
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查 Prometheus 配置
|
||
docker exec prometheus-central promtool check config /etc/prometheus/prometheus.yml
|
||
|
||
# 2. 检查 Alertmanager 配置
|
||
docker exec alertmanager amtool check-config /etc/alertmanager/alertmanager.yml
|
||
|
||
# 3. 检查 JSON 配置文件
|
||
jq . config/*.json
|
||
```
|
||
|
||
**解决方案**:
|
||
- 修复配置文件语法错误
|
||
- 验证 YAML 格式(注意缩进)
|
||
- 验证 JSON 格式
|
||
|
||
---
|
||
|
||
### 8. 权限问题
|
||
|
||
#### 问题:容器无法写入数据目录
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查目录权限
|
||
ls -ld /storage/prometheus-data
|
||
ls -ld /storage/grafana-data
|
||
|
||
# 2. 检查容器用户
|
||
docker exec prometheus-central id
|
||
docker exec grafana id
|
||
```
|
||
|
||
**解决方案**:
|
||
```bash
|
||
# Prometheus 数据目录
|
||
chmod 777 /storage/prometheus-data
|
||
|
||
# Grafana 数据目录(UID 472)
|
||
chown -R 472:472 /storage/grafana-data
|
||
|
||
# VictoriaMetrics 数据目录
|
||
chmod 777 /storage/victoria-metrics-data
|
||
```
|
||
|
||
---
|
||
|
||
### 9. 网络问题
|
||
|
||
#### 问题:容器间无法通信
|
||
|
||
**检查步骤**:
|
||
```bash
|
||
# 1. 检查 Docker 网络
|
||
docker network ls
|
||
docker network inspect <网络名>
|
||
|
||
# 2. 测试容器间连通性
|
||
docker exec prometheus-central ping victoria-metrics
|
||
docker exec grafana ping prometheus-central
|
||
```
|
||
|
||
**解决方案**:
|
||
- 确保所有容器在同一 Docker 网络中
|
||
- 检查 `docker-compose.yml` 中的网络配置
|
||
- 重启所有容器
|
||
|
||
---
|
||
|
||
### 10. 镜像拉取失败
|
||
|
||
#### 问题:`docker compose pull` 失败
|
||
|
||
**常见原因**:
|
||
- 网络连接问题
|
||
- Docker Hub 速率限制
|
||
- 镜像不存在
|
||
|
||
**解决方案**:
|
||
- 配置 Docker 镜像加速器
|
||
- 检查网络连接
|
||
- 使用国内镜像源
|
||
- 稍后重试
|
||
|
||
---
|
||
|
||
## 日志查看命令
|
||
|
||
### 查看所有服务日志
|
||
```bash
|
||
docker compose logs -f
|
||
```
|
||
|
||
### 查看特定服务日志
|
||
```bash
|
||
docker compose logs -f prometheus-central
|
||
docker compose logs -f grafana
|
||
docker compose logs -f alertmanager
|
||
docker compose logs -f victoria-metrics
|
||
```
|
||
|
||
### 查看最近 100 行日志
|
||
```bash
|
||
docker compose logs --tail=100
|
||
```
|
||
|
||
---
|
||
|
||
## 性能问题排查
|
||
|
||
### 高 CPU 使用率
|
||
|
||
**检查**:
|
||
```bash
|
||
# 查看容器资源使用
|
||
docker stats
|
||
|
||
# 检查 Prometheus 抓取目标数量
|
||
# 访问 http://localhost:9091/targets
|
||
```
|
||
|
||
**解决**:
|
||
- 减少抓取间隔
|
||
- 减少监控目标数量
|
||
- 增加资源限制
|
||
|
||
### 高内存使用率
|
||
|
||
**检查**:
|
||
```bash
|
||
docker stats
|
||
```
|
||
|
||
**解决**:
|
||
- 减少数据保留时间
|
||
- 减少抓取目标
|
||
- 增加内存限制
|
||
|
||
---
|
||
|
||
## 数据问题排查
|
||
|
||
### 数据丢失
|
||
|
||
**检查**:
|
||
```bash
|
||
# 检查数据目录
|
||
ls -lh /storage/prometheus-data
|
||
ls -lh /storage/victoria-metrics-data
|
||
|
||
# 检查数据保留配置
|
||
grep retention prometheus.yml
|
||
```
|
||
|
||
**解决**:
|
||
- 检查数据保留时间配置
|
||
- 检查磁盘空间
|
||
- 检查数据目录权限
|
||
|
||
### 数据不一致
|
||
|
||
**检查**:
|
||
- 在 Prometheus 和 VictoriaMetrics 中查询相同指标
|
||
- 检查时间范围
|
||
- 检查标签匹配
|
||
|
||
---
|
||
|
||
## 获取帮助
|
||
|
||
如果以上方法无法解决问题:
|
||
|
||
1. **查看详细日志**:
|
||
```bash
|
||
docker compose logs --tail=200 > logs.txt
|
||
```
|
||
|
||
2. **收集系统信息**:
|
||
```bash
|
||
docker info > docker-info.txt
|
||
docker compose ps > services-status.txt
|
||
df -h > disk-usage.txt
|
||
```
|
||
|
||
3. **检查配置文件**:
|
||
- 验证所有配置文件语法
|
||
- 检查环境变量
|
||
- 检查网络配置
|
||
|
||
---
|
||
|
||
## 相关文档
|
||
|
||
- **部署指南**:`doc/DEPLOYMENT_GUIDE.md`
|
||
- **中央服务器配置**:`doc/CENTRAL_SERVER_CONFIG.md`
|
||
- **边缘节点配置**:`doc/EDGE_AGENT_CONFIG.md`
|
||
- **系统架构**:`doc/ARCHITECTURE.md`
|