#!/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