argus/src/metric/grafana/build/start-grafana-supervised.sh

90 lines
3.9 KiB
Bash

#!/bin/bash
set -euo pipefail
echo "[INFO] Starting Grafana under supervisor..."
DOMAIN=grafana.metric.argus.com
# 记录容器 IP
IP=$(ifconfig | awk '/inet / && $2 != "127.0.0.1" {print $2; exit}')
echo "current IP: ${IP}"
echo "${IP}" > /private/argus/etc/${DOMAIN}
chmod +x /private/argus/etc/${DOMAIN}
# 确保必要目录存在(权限已在 Dockerfile 中设置)
mkdir -p /private/argus/metric/grafana/data
mkdir -p /private/argus/metric/grafana/logs
mkdir -p /private/argus/metric/grafana/plugins
mkdir -p /private/argus/metric/grafana/provisioning/datasources
mkdir -p /private/argus/metric/grafana/provisioning/dashboards
mkdir -p /private/argus/metric/grafana/data/sessions
mkdir -p /private/argus/metric/grafana/data/dashboards
mkdir -p /private/argus/metric/grafana/config
mkdir -p /var/log/grafana
mkdir -p /etc/grafana/provisioning/datasources
mkdir -p /var/lib/grafana
# 复制主配置文件到持久化目录
if [ -f "/tmp/grafana.ini" ]; then
echo "[INFO] Copying grafana.ini to /private/argus/metric/grafana/config/"
cp /tmp/grafana.ini /private/argus/metric/grafana/config/grafana.ini
echo "[INFO] Grafana configuration copied successfully"
fi
# 检查配置文件来源(优先级:挂载目录 > 容器内配置 > 默认配置)
if [ -f "/private/argus/metric/grafana/config/grafana.ini" ]; then
echo "[INFO] Using grafana.ini from /private/argus/metric/grafana/config/"
CONFIG_FILE="--config=/private/argus/metric/grafana/config/grafana.ini"
elif [ -f "/etc/grafana/grafana.ini" ]; then
echo "[INFO] Using custom grafana.ini from /etc/grafana/"
CONFIG_FILE="--config=/etc/grafana/grafana.ini"
else
echo "[INFO] Using default configuration"
CONFIG_FILE=""
fi
# 复制数据源配置文件到挂载目录
if [ -f "/tmp/datasources.yml" ]; then
echo "[INFO] Copying datasource configuration to /private/argus/metric/grafana/provisioning/datasources/"
cp /tmp/datasources.yml /private/argus/metric/grafana/provisioning/datasources/datasources.yml
echo "[INFO] Datasource configuration copied successfully"
elif [ -d "/private/argus/metric/grafana/provisioning/datasources" ] && [ "$(ls -A /private/argus/metric/grafana/provisioning/datasources)" ]; then
echo "[INFO] Found existing datasource provisioning files in /private/argus/metric/grafana/provisioning/datasources"
elif [ -d "/etc/grafana/provisioning/datasources" ] && [ "$(ls -A /etc/grafana/provisioning/datasources)" ]; then
echo "[INFO] Found datasource provisioning files in /etc/grafana/provisioning/datasources"
# 确保数据源配置目录权限正确
chown -R grafana:grafana /etc/grafana/provisioning/datasources
else
echo "[INFO] No datasource provisioning files found, using manual configuration"
fi
# 复制仪表板配置文件到挂载目录
if [ -f "/tmp/dashboards.yml" ]; then
echo "[INFO] Copying dashboard configuration to /private/argus/metric/grafana/provisioning/dashboards/"
cp /tmp/dashboards.yml /private/argus/metric/grafana/provisioning/dashboards/dashboards.yml
echo "[INFO] Dashboard configuration copied successfully"
fi
# 复制默认仪表板到挂载目录
if [ -f "/tmp/default_dashboard.json" ]; then
echo "[INFO] Copying default dashboard to /private/argus/metric/grafana/provisioning/dashboards/"
cp /tmp/default_dashboard.json /private/argus/metric/grafana/provisioning/dashboards/default_dashboard.json
echo "[INFO] Default dashboard copied successfully"
fi
# 启动 Grafana
if [ -n "$CONFIG_FILE" ]; then
echo "[INFO] Starting Grafana with custom configuration..."
exec /usr/share/grafana/bin/grafana server \
--homepath=/usr/share/grafana \
--packaging=docker \
$CONFIG_FILE
else
echo "[INFO] Starting Grafana with default configuration..."
exec /usr/share/grafana/bin/grafana server \
--homepath=/usr/share/grafana \
--packaging=docker \
cfg:default.log.mode=console \
cfg:default.log.level=info
fi