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:
@@ -45,6 +45,36 @@ PROMETHEUS_REMOTE_WRITE_CAPACITY=${PROMETHEUS_REMOTE_WRITE_CAPACITY:-20000}
|
||||
PROMETHEUS_REMOTE_WRITE_MAX_SHARDS=${PROMETHEUS_REMOTE_WRITE_MAX_SHARDS:-10}
|
||||
GRAFANA_DEFAULT_LANGUAGE=${GRAFANA_DEFAULT_LANGUAGE:-zh-Hans}
|
||||
GRAFANA_DEFAULT_THEME=${GRAFANA_DEFAULT_THEME:-light}
|
||||
TRAEFIK_PROVIDER=${TRAEFIK_PROVIDER:-external}
|
||||
|
||||
# 根据 TRAEFIK_ENABLED 与 TRAEFIK_PROVIDER 设置网络
|
||||
if [ "${TRAEFIK_ENABLED:-false}" = "true" ]; then
|
||||
case "${TRAEFIK_PROVIDER}" in
|
||||
internal)
|
||||
export NETWORK_NAME=${NETWORK_NAME:-central_default}
|
||||
export EXTERNAL_NETWORK=${EXTERNAL_NETWORK:-false}
|
||||
export TRAEFIK_NETWORK=${TRAEFIK_NETWORK:-central_default}
|
||||
export COMPOSE_PROFILES="${COMPOSE_PROFILES:-},traefik-internal"
|
||||
export COMPOSE_PROFILES="${COMPOSE_PROFILES#,}"
|
||||
;;
|
||||
external)
|
||||
export NETWORK_NAME=${NETWORK_NAME:-traefik}
|
||||
export EXTERNAL_NETWORK=${EXTERNAL_NETWORK:-true}
|
||||
export TRAEFIK_NETWORK=${TRAEFIK_NETWORK:-traefik}
|
||||
;;
|
||||
*)
|
||||
echo "⚠️ TRAEFIK_PROVIDER 应为 internal 或 external,当前为 ${TRAEFIK_PROVIDER}"
|
||||
export NETWORK_NAME=${NETWORK_NAME:-traefik}
|
||||
export EXTERNAL_NETWORK=${EXTERNAL_NETWORK:-true}
|
||||
export TRAEFIK_NETWORK=${TRAEFIK_NETWORK:-traefik}
|
||||
;;
|
||||
esac
|
||||
else
|
||||
# 不使用 Traefik:使用 compose 默认网络,直连端口访问
|
||||
export NETWORK_NAME=${NETWORK_NAME:-central_default}
|
||||
export EXTERNAL_NETWORK=${EXTERNAL_NETWORK:-false}
|
||||
export TRAEFIK_NETWORK=${TRAEFIK_NETWORK:-central_default}
|
||||
fi
|
||||
|
||||
# 将相对路径转换为绝对路径(Docker 需要绝对路径)
|
||||
# 获取脚本所在目录的绝对路径
|
||||
@@ -140,12 +170,12 @@ fi
|
||||
echo ""
|
||||
|
||||
# 从模板生成 prometheus.yml
|
||||
if [ -f "prometheus.yml.template" ]; then
|
||||
echo "📝 从模板生成 prometheus.yml..."
|
||||
if [ -f "config/prometheus/prometheus.yml.template" ]; then
|
||||
echo "📝 从模板生成 config/prometheus/prometheus.yml..."
|
||||
# 检查是否有 envsubst 命令
|
||||
if command -v envsubst &> /dev/null; then
|
||||
envsubst < prometheus.yml.template > prometheus.yml
|
||||
echo "✅ prometheus.yml 已生成"
|
||||
envsubst < config/prometheus/prometheus.yml.template > config/prometheus/prometheus.yml
|
||||
echo "✅ config/prometheus/prometheus.yml 已生成"
|
||||
else
|
||||
echo "⚠️ envsubst 命令未找到,尝试使用 sed 替换..."
|
||||
# 使用 sed 进行简单的变量替换
|
||||
@@ -156,22 +186,22 @@ if [ -f "prometheus.yml.template" ]; then
|
||||
-e "s/\${PROMETHEUS_REMOTE_WRITE_MAX_SAMPLES}/${PROMETHEUS_REMOTE_WRITE_MAX_SAMPLES}/g" \
|
||||
-e "s/\${PROMETHEUS_REMOTE_WRITE_CAPACITY}/${PROMETHEUS_REMOTE_WRITE_CAPACITY}/g" \
|
||||
-e "s/\${PROMETHEUS_REMOTE_WRITE_MAX_SHARDS}/${PROMETHEUS_REMOTE_WRITE_MAX_SHARDS}/g" \
|
||||
prometheus.yml.template > prometheus.yml
|
||||
echo "✅ prometheus.yml 已生成(使用 sed)"
|
||||
config/prometheus/prometheus.yml.template > config/prometheus/prometheus.yml
|
||||
echo "✅ config/prometheus/prometheus.yml 已生成(使用 sed)"
|
||||
fi
|
||||
elif [ ! -f "prometheus.yml" ]; then
|
||||
echo "❌ 配置文件 prometheus.yml 不存在,且未找到模板文件"
|
||||
elif [ ! -f "config/prometheus/prometheus.yml" ]; then
|
||||
echo "❌ 配置文件 config/prometheus/prometheus.yml 不存在,且未找到模板文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查配置文件
|
||||
if [ ! -f "alert_rules.yml" ]; then
|
||||
echo "❌ 配置文件 alert_rules.yml 不存在"
|
||||
if [ ! -f "config/prometheus/alert_rules.yml" ]; then
|
||||
echo "❌ 配置文件 config/prometheus/alert_rules.yml 不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "alertmanager/alertmanager.yml" ]; then
|
||||
echo "❌ 配置文件 alertmanager/alertmanager.yml 不存在"
|
||||
if [ ! -f "config/alertmanager/alertmanager.yml" ]; then
|
||||
echo "❌ 配置文件 config/alertmanager/alertmanager.yml 不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -199,18 +229,23 @@ export GRAFANA_DOMAIN
|
||||
export PROMETHEUS_DOMAIN
|
||||
export ALERTMANAGER_DOMAIN
|
||||
|
||||
# 检查 Traefik 网络(docker-compose.yml 中总是会引用此网络,无论是否启用)
|
||||
# 检查 Traefik 网络(仅 TRAEFIK_PROVIDER=external 时需已存在)
|
||||
echo "🔍 检查 Traefik 网络..."
|
||||
TRAEFIK_NET=${TRAEFIK_NETWORK:-traefik}
|
||||
if ! docker network inspect "$TRAEFIK_NET" &> /dev/null; then
|
||||
if [ "${TRAEFIK_ENABLED:-false}" != "true" ]; then
|
||||
echo "✅ 未启用 Traefik,使用 compose 默认网络"
|
||||
elif [ "${TRAEFIK_PROVIDER}" = "internal" ]; then
|
||||
echo "✅ 本编排启动 Traefik,将自动创建网络 $TRAEFIK_NET"
|
||||
elif ! docker network inspect "$TRAEFIK_NET" &> /dev/null; then
|
||||
echo "⚠️ Traefik 网络 '$TRAEFIK_NET' 不存在,正在创建..."
|
||||
if docker network create "$TRAEFIK_NET" 2>/dev/null; then
|
||||
echo "✅ Traefik 网络 '$TRAEFIK_NET' 已创建"
|
||||
else
|
||||
echo "❌ 无法创建 Traefik 网络 '$TRAEFIK_NET'"
|
||||
echo " 请确保:"
|
||||
echo " 1. Traefik 已运行并创建了网络"
|
||||
echo " 2. 或手动创建网络: docker network create $TRAEFIK_NET"
|
||||
echo " 1. 外部 Traefik 已运行并创建了网络"
|
||||
echo " 2. 或改为 TRAEFIK_PROVIDER=internal 由本编排启动 Traefik"
|
||||
echo " 3. 或手动创建网络: docker network create $TRAEFIK_NET"
|
||||
echo ""
|
||||
read -p "是否继续部署?(y/N): " -n 1 -r
|
||||
echo
|
||||
@@ -220,7 +255,7 @@ if ! docker network inspect "$TRAEFIK_NET" &> /dev/null; then
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "✅ Traefik 网络 '$TRAEFIK_NET' 已存在"
|
||||
echo "✅ Traefik 网络 '$TRAEFIK_NET' 已存在(外部 Traefik)"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
@@ -229,9 +264,9 @@ echo "📁 创建数据目录..."
|
||||
mkdir -p "${PROMETHEUS_DATA_DIR}"
|
||||
mkdir -p "${GRAFANA_DATA_DIR}"
|
||||
mkdir -p "${VICTORIAMETRICS_DATA_DIR}"
|
||||
mkdir -p grafana/dashboards
|
||||
mkdir -p grafana/provisioning/datasources
|
||||
mkdir -p grafana/provisioning/dashboards
|
||||
mkdir -p config/grafana/dashboards
|
||||
mkdir -p config/grafana/provisioning/datasources
|
||||
mkdir -p config/grafana/provisioning/dashboards
|
||||
|
||||
# 设置目录权限
|
||||
# Prometheus 需要写权限
|
||||
@@ -293,15 +328,17 @@ echo ""
|
||||
# 检查是否启用 Traefik
|
||||
if [ "${TRAEFIK_ENABLED:-false}" = "true" ]; then
|
||||
echo "🔗 访问地址(通过 Traefik 反向代理):"
|
||||
if [ "${TRAEFIK_PROVIDER}" = "internal" ]; then
|
||||
echo " - Traefik 由本编排启动,监听 80/443 端口"
|
||||
fi
|
||||
echo " - Grafana仪表板: http://${GRAFANA_DOMAIN:-grafana.example.com} (admin/${GRAFANA_ADMIN_PASSWORD}) [${GRAFANA_DEFAULT_LANGUAGE}界面]"
|
||||
echo " - Prometheus: http://${PROMETHEUS_DOMAIN:-prometheus.example.com} [英文界面]"
|
||||
echo " - Alertmanager: http://${ALERTMANAGER_DOMAIN:-alertmanager.example.com} [英文界面]"
|
||||
echo " - VictoriaMetrics: http://localhost:${VICTORIAMETRICS_PORT} [英文界面,边缘节点直接连接]"
|
||||
echo ""
|
||||
echo "⚠️ 请确保:"
|
||||
echo " 1. DNS 已正确解析域名到 Traefik 服务器"
|
||||
echo " 2. Traefik 网络 (${TRAEFIK_NETWORK:-traefik_default}) 已创建"
|
||||
echo " 3. 边缘节点可以访问此服务器的${VICTORIAMETRICS_PORT}端口(VictoriaMetrics 不通过 Traefik)"
|
||||
echo " 1. DNS 已正确解析域名到本机"
|
||||
echo " 2. 边缘节点可以访问此服务器的${VICTORIAMETRICS_PORT}端口(VictoriaMetrics 不通过 Traefik)"
|
||||
else
|
||||
echo "🔗 访问地址:"
|
||||
echo " - Grafana仪表板: http://localhost:${GRAFANA_PORT} (admin/${GRAFANA_ADMIN_PASSWORD}) [${GRAFANA_DEFAULT_LANGUAGE}界面]"
|
||||
|
||||
Reference in New Issue
Block a user