Files
ljwx-k8s/import-database-dashboards.sh
2026-02-20 22:50:45 +08:00

115 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# 导入 PostgreSQL 和 Redis Grafana Dashboards
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_error() { echo -e "${RED}[✗]${NC} $1"; }
# Grafana 配置
GRAFANA_URL="http://localhost:30300"
GRAFANA_USER="admin"
GRAFANA_PASS="admin123"
# 检查 Grafana 是否可访问
log_info "检查 Grafana 连接..."
if ! curl -sf "${GRAFANA_URL}/api/health" > /dev/null; then
log_error "无法连接到 Grafana: ${GRAFANA_URL}"
exit 1
fi
log_success "Grafana 连接正常"
# 获取 Prometheus 数据源 UID
log_info "获取 Prometheus 数据源..."
DATASOURCE_UID=$(curl -sf -u "${GRAFANA_USER}:${GRAFANA_PASS}" \
"${GRAFANA_URL}/api/datasources" | \
jq -r '.[] | select(.type=="prometheus") | .uid' | head -1)
if [ -z "$DATASOURCE_UID" ]; then
log_error "未找到 Prometheus 数据源"
exit 1
fi
log_success "Prometheus 数据源 UID: ${DATASOURCE_UID}"
# Dashboard IDs from grafana.com
# PostgreSQL Database: 9628 (PostgreSQL Database)
# Redis Dashboard: 11835 (Redis Dashboard for Prometheus Redis Exporter)
import_dashboard() {
local dashboard_id=$1
local dashboard_name=$2
log_info "导入 Dashboard: ${dashboard_name} (ID: ${dashboard_id})"
# 下载 dashboard JSON
local dashboard_json=$(curl -sf "https://grafana.com/api/dashboards/${dashboard_id}/revisions/latest/download")
if [ -z "$dashboard_json" ]; then
log_error "无法下载 Dashboard ${dashboard_id}"
return 1
fi
# 准备导入payload
local import_payload=$(echo "$dashboard_json" | jq -c "{
dashboard: (. |
.id = null |
.uid = null |
(.panels[]? | select(.datasource) | .datasource) |= {\"type\": \"prometheus\", \"uid\": \"${DATASOURCE_UID}\"}
),
overwrite: true,
inputs: [{
name: \"DS_PROMETHEUS\",
type: \"datasource\",
pluginId: \"prometheus\",
value: \"${DATASOURCE_UID}\"
}]
}")
# 导入 dashboard
local response=$(curl -sf -X POST \
-H "Content-Type: application/json" \
-u "${GRAFANA_USER}:${GRAFANA_PASS}" \
-d "$import_payload" \
"${GRAFANA_URL}/api/dashboards/import")
if echo "$response" | jq -e '.uid' > /dev/null 2>&1; then
local uid=$(echo "$response" | jq -r '.uid')
log_success "成功导入: ${dashboard_name}"
log_info "访问地址: ${GRAFANA_URL}/d/${uid}"
return 0
else
log_error "导入失败: ${dashboard_name}"
echo "$response" | jq . 2>/dev/null || echo "$response"
return 1
fi
}
echo ""
log_info "开始导入数据库监控 Dashboards..."
echo ""
# 导入 PostgreSQL Dashboard
import_dashboard "9628" "PostgreSQL Database"
echo ""
# 导入 Redis Dashboard
import_dashboard "11835" "Redis Dashboard"
echo ""
log_success "Dashboard 导入完成!"
echo ""
log_info "访问 Grafana:"
echo " URL: ${GRAFANA_URL}"
echo " 用户: ${GRAFANA_USER}"
echo " 密码: ${GRAFANA_PASS}"
echo ""
log_info "查看 Dashboards:"
echo " ${GRAFANA_URL}/dashboards"