refactor: config/apps 目录重组、文档重构、架构图收窄

- 中央:config/(prometheus,alertmanager,grafana)、apps/(tile-cache,topology-editor)
- 边缘:config/(vmagent,blackbox,targets)、apps/(onvif-exporter)
- env: TRAEFIK_PROVIDER、prometheus/env.example 详细说明
- 文档:README/doc 重构,EDGE_CACHE 合并到 EDGE_AGENT_CONFIG
- targets.csv 更新流程说明,ARCHITECTURE 图收窄

Made-with: Cursor
This commit is contained in:
2026-02-28 22:05:43 -05:00
parent 650e5145f1
commit ab1515dffb
48 changed files with 2071 additions and 509 deletions

View File

@@ -1,8 +1,8 @@
# 多阶段构建:在镜像内编译,无需本机安装 Go
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod ./
COPY main.go ./
COPY apps/onvif-exporter/go.mod ./
COPY apps/onvif-exporter/main.go ./
RUN go mod tidy && CGO_ENABLED=0 GOOS=linux go build -o /onvif-exporter .
FROM alpine:3.19

View File

@@ -1,6 +1,10 @@
#!/bin/bash
# 边缘节点部署vmagent + 内存/磁盘缓存
# 用法: ./deploy.sh [--local] --local = 本机同机(中央与边缘同机)
#
# targets.csv部署时自动从 targets.csv 生成 target-onvif.json、target-ping.json
# 修改 targets.csv 后需手动执行 config/update-configs.sh或重新 deploy
# vmagent 每 5 分钟自动重载 JSON无需重启。
set -e
cd "$(dirname "${BASH_SOURCE[0]}")"
@@ -24,7 +28,7 @@ command -v jq &>/dev/null || { echo "❌ 需要 jq"; exit 1; }
[ -f config/targets.csv ] && (cd config && ./update-configs.sh) || true
[ ! -f config/target-onvif.json ] && echo '[]' > config/target-onvif.json
[ ! -f config/target-ping.json ] && echo '[]' > config/target-ping.json
[ ! -f prometheus-edge/vmagent-scrape.yml.template ] && { echo "❌ 缺少 vmagent-scrape.yml.template"; exit 1; }
[ ! -f config/vmagent/vmagent-scrape.yml.template ] && { echo "❌ 缺少 config/vmagent/vmagent-scrape.yml.template"; exit 1; }
# .env
[ ! -f .env ] && cp env.example .env

View File

@@ -13,7 +13,7 @@ services:
- CENTRAL_SERVER_PORT=${CENTRAL_SERVER_PORT:-8428}
volumes:
- vmagent-cache-data:/cache
- ./prometheus-edge/vmagent-scrape.yml.template:/etc/vmagent/scrape.yml:ro
- ./config/vmagent/vmagent-scrape.yml.template:/etc/vmagent/scrape.yml:ro
- ./config/target-onvif.json:/etc/prometheus/target-onvif.json:ro
- ./config/target-ping.json:/etc/prometheus/target-ping.json:ro
mem_limit: "256m"
@@ -38,8 +38,8 @@ services:
- onvif
image: onvif-exporter:local
build:
context: ./onvif-exporter
dockerfile: Dockerfile
context: .
dockerfile: apps/onvif-exporter/Dockerfile
container_name: onvif-exporter
restart: unless-stopped
environment:
@@ -57,7 +57,7 @@ services:
container_name: blackbox-exporter
restart: unless-stopped
volumes:
- ./blackbox/config.yml:/etc/blackbox_exporter/config.yml:ro
- ./config/blackbox/config.yml:/etc/blackbox_exporter/config.yml:ro
mem_limit: "64m"
cpus: "0.5"
networks:

View File

@@ -19,9 +19,10 @@ EDGE_NODE_ID=workernode_1
# 格式: http://域名或IP:端口/api/v1/write
# 默认端口: 8428 (VictoriaMetrics)
# 边缘缓存docker-compose.yaml 使用 vmagent含内存+磁盘缓存,详见 doc/EDGE_CACHE.md
# 边缘缓存docker-compose 使用 vmagent含内存+磁盘缓存,详见 doc/EDGE_AGENT_CONFIG.md
# 注意ONVIF 设备在 config/targets.csv 中配置(每行 ip、username、password 等)
# 配置与自建应用结构config/vmagent、blackbox、targets; apps/onvif-exporter
# ONVIF Exporter 镜像(仅在使用 --profile onvif 时需要)
# 公共 registry 无现成镜像,需自建或使用第三方镜像,参见 doc/ONVIF_ALTERNATIVES.md

View File

@@ -1,45 +0,0 @@
global:
scrape_interval: 120s
evaluation_interval: 120s
external_labels:
region: workernode_1 # 设置一个唯一边缘节点名称
remote_write:
- url: http://192.168.2.106:8428/api/v1/write
queue_config:
max_samples_per_send: 5000
capacity: 5000
max_shards: 5
scrape_configs:
- job_name: 'onvif-devices'
scrape_interval: 120s
file_sd_configs:
- files: ['/etc/prometheus/onvif-targets.json']
refresh_interval: 5m
metrics_path: /metrics
static_configs:
- targets: ['onvif-exporter:9600']
- job_name: 'network-ping'
scrape_interval: 300s
file_sd_configs:
- files: ['/etc/prometheus/ping-targets.json']
refresh_interval: 5m
metrics_path: /probe
params:
module: [icmp]
static_configs:
- targets: ['blackbox-exporter:9115']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
- job_name: 'prometheus-edge'
scrape_interval: 60s
static_configs:
- targets: ['localhost:9090']

View File

@@ -1,45 +0,0 @@
global:
scrape_interval: 120s
evaluation_interval: 120s
external_labels:
region: workernode_1 # 设置一个唯一边缘节点名称
remote_write:
- url: http://${CENTRAL_SERVER_HOST}:${CENTRAL_SERVER_PORT}/api/v1/write
queue_config:
max_samples_per_send: 5000
capacity: 10000
max_shards: 8
scrape_configs:
- job_name: 'onvif-devices'
scrape_interval: 120s
file_sd_configs:
- files: ['/etc/prometheus/onvif-targets.json']
refresh_interval: 5m
metrics_path: /metrics
static_configs:
- targets: ['onvif-exporter:9600']
- job_name: 'network-ping'
scrape_interval: 300s
file_sd_configs:
- files: ['/etc/prometheus/ping-targets.json']
refresh_interval: 5m
metrics_path: /probe
params:
module: [icmp]
static_configs:
- targets: ['blackbox-exporter:9115']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
- job_name: 'prometheus-edge'
scrape_interval: 60s
static_configs:
- targets: ['localhost:9090']