#!/bin/bash
echo "=== 开始配置 Grafana ==="
# 生成随机端口的函数
generate_random_port() {
while true; do
port=$((RANDOM % 55535 + 10000)) # 生成10000-65535之间的端口
if ! netstat -tuln 2>/dev/null | grep -q ":$port "; then
echo $port
break
fi
done
}
# 检查本地配置
if [ -d "grafana-data" ]; then
echo "警告:检测到本地已存在 Grafana 配置"
read -p "是否清除现有配置并重新初始化?(y/N) " answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
echo "清理现有配置..."
rm -rf grafana-data .env-grafana
echo "现有配置已清理"
else
echo "保留现有配置,退出脚本"
exit 0
fi
fi
# 检查 docker-compose-grafana.yml
if [ -f "docker-compose-grafana.yml" ]; then
echo "发现现有的 docker-compose-grafana.yml"
read -p "是否覆盖现有的 docker-compose-grafana.yml?(y/N) " answer
if [ "$answer" != "y" ] && [ "$answer" != "Y" ]; then
echo "保留现有 docker-compose-grafana.yml,退出脚本"
exit 0
fi
fi
echo -e "\n1. 生成随机端口..."
GRAFANA_PORT=$(generate_random_port)
echo "Grafana 端口: $GRAFANA_PORT"
echo -e "\n2. 创建环境变量文件..."
cat > .env-grafana << EOL
GRAFANA_PORT=$GRAFANA_PORT
EOL
echo "环境变量文件创建完成"
echo -e "\n3. 创建本地配置目录..."
mkdir -p grafana-data
echo "目录创建完成"
echo -e "\n4. 创建 docker-compose-grafana.yml..."
cat > docker-compose-grafana.yml << EOL
version: "3.8"
services:
grafana:
image: grafana/grafana:latest
container_name: grafana-\${GRAFANA_PORT}
restart: unless-stopped
ports:
- "\${GRAFANA_PORT}:3000"
volumes:
- ./grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_USERS_ALLOW_SIGN_UP=false
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
networks:
- monitoring
networks:
monitoring:
driver: bridge
external: false
EOL
echo "配置文件创建完成"
echo -e "\n5. 设置目录权限..."
# Grafana 需要特定的用户权限
sudo chown -R 472:472 grafana-data 2>/dev/null || chown -R 472:472 grafana-data 2>/dev/null || echo "权限设置可能需要sudo"
echo "权限设置完成"
echo -e "\n6. 创建管理脚本..."
cat > manage-grafana.sh << EOL
#!/bin/bash
source .env-grafana
case \$1 in
start)
echo "启动 Grafana..."
docker compose -f docker-compose-grafana.yml --env-file .env-grafana up -d
echo "Grafana 已启动!"
echo "访问地址: http://localhost:\$GRAFANA_PORT"
echo "默认账号: admin/admin"
;;
stop)
echo "停止 Grafana..."
docker compose -f docker-compose-grafana.yml down
;;
restart)
echo "重启 Grafana..."
docker compose -f docker-compose-grafana.yml restart
;;
status)
docker compose -f docker-compose-grafana.yml ps
;;
logs)
docker compose -f docker-compose-grafana.yml logs -f
;;
info)
echo "Grafana 信息:"
echo "访问地址: http://localhost:\$GRAFANA_PORT"
echo "默认账号: admin/admin"
echo "数据目录: ./grafana-data"
echo "添加数据源示例:"
echo " - Prometheus: http://prometheus:9090 (如果在同一网络)"
echo " - Prometheus: http://host.docker.internal:PROMETHEUS_PORT (本地)"
;;
backup)
echo "备份 Grafana 数据..."
tar -czf "grafana-backup-\$(date +%Y%m%d-%H%M%S).tar.gz" grafana-data/
echo "备份完成"
;;
*)
echo "用法: \$0 {start|stop|restart|status|logs|info|backup}"
;;
esac
EOL
chmod +x manage-grafana.sh
echo "管理脚本创建完成"
echo -e "\n7. 创建数据源配置模板..."
mkdir -p config-templates
cat > config-templates/prometheus-datasource.json << EOL
{
"name": "Prometheus",
"type": "prometheus",
"url": "http://prometheus:9090",
"access": "proxy",
"isDefault": true,
"jsonData": {
"timeInterval": "5s"
}
}
EOL
echo "数据源配置模板创建完成"
echo -e "\n=== Grafana 配置完成! ==="
echo "随机分配的端口: $GRAFANA_PORT"
echo -e "\n你可以:"
echo "1. 使用 './manage-grafana.sh start' 启动服务"
echo "2. 使用 './manage-grafana.sh info' 查看信息"
echo "3. 访问 http://localhost:$GRAFANA_PORT 使用 Grafana"
echo "4. 默认登录账号: admin/admin"
echo "5. 编辑 docker-compose-grafana.yml 修改设置"
echo -e "\n管理命令:"
echo "- ./manage-grafana.sh start # 启动服务"
echo "- ./manage-grafana.sh stop # 停止服务"
echo "- ./manage-grafana.sh restart # 重启服务"
echo "- ./manage-grafana.sh status # 查看状态"
echo "- ./manage-grafana.sh logs # 查看日志"
echo "- ./manage-grafana.sh info # 查看信息"
echo "- ./manage-grafana.sh backup # 备份数据"
echo -e "\n配置提示:"
echo "- 首次登录请修改默认密码"
echo "- 数据源配置模板保存在 config-templates/ 目录"
echo "- 如需连接本地 Prometheus,请使用 host.docker.internal:端口"
echo "- 端口信息保存在 .env-grafana 文件中"
# 询问是否立即启动服务
read -p "是否立即启动 Grafana?(y/N) " answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
echo "启动 Grafana..."
docker compose -f docker-compose-grafana.yml --env-file .env-grafana up -d
echo -e "\nGrafana 已启动!"
echo "访问地址: http://localhost:$GRAFANA_PORT"
echo "默认账号: admin/admin"
echo -e "\n等待服务完全启动后再访问..."
echo "首次启动可能需要1-2分钟来初始化"
fi 上一篇
【教程】RSSHub 安装【教程】RSSHub 安装
2025-09-06
下一篇
【教程】Prometheus 安装【教程】Prometheus 安装
2025-09-05