115 lines
3.2 KiB
Bash
Executable File
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"
|