diff --git a/src/log/kibana/build/kibana-post-start.sh b/src/log/kibana/build/kibana-post-start.sh index d4b30e0..8b96945 100644 --- a/src/log/kibana/build/kibana-post-start.sh +++ b/src/log/kibana/build/kibana-post-start.sh @@ -2,7 +2,7 @@ set -euo pipefail ES_HOST="${ELASTICSEARCH_HOSTS:-http://es:9200}" -KB_HOST="http://localhost:5601" +KB_HOST="${KB_HOST:-http://127.0.0.1:5601}" echo "[INFO] Starting Kibana post-start configuration..." @@ -83,50 +83,37 @@ fix_replicas_idempotent() { } # 幂等创建数据视图 +create_or_ensure_data_view() { + local name="$1" + local title="$2" + + local list_response + list_response=$(curl -fsS "$KB_HOST/api/data_views" -H 'kbn-xsrf: true' 2>/dev/null || echo "") + + if [ -z "$list_response" ]; then + echo "[WARN] Failed to list data views, skipping creation check for $title" + return + fi + + if echo "$list_response" | grep -Fq "\"title\":\"$title\""; then + echo "[INFO] Data view $title already exists, skipping" + return + fi + + echo "[INFO] Creating data view for $title indices (allowNoIndex)" + + curl -fsS -X POST "$KB_HOST/api/data_views/data_view?allowNoIndex=true" \ + -H 'kbn-xsrf: true' \ + -H 'Content-Type: application/json' \ + -d "{\"data_view\":{\"name\":\"$name\",\"title\":\"$title\",\"timeFieldName\":\"@timestamp\",\"allowNoIndex\":true}}" \ + >/dev/null && echo "[OK] Created $name data view" || echo "[WARN] Failed to create $name data view" +} + create_data_views_idempotent() { echo "[INFO] Checking and creating data views..." - # 检查是否存在匹配的索引 - local train_indices=$(curl -s "$ES_HOST/_cat/indices/train-*?h=index" 2>/dev/null | wc -l || echo "0") - local infer_indices=$(curl -s "$ES_HOST/_cat/indices/infer-*?h=index" 2>/dev/null | wc -l || echo "0") - - # 创建 train 数据视图 - if [ "$train_indices" -gt 0 ]; then - # 检查数据视图是否已存在 - local train_exists=$(curl -s "$KB_HOST/api/data_views" -H 'kbn-xsrf: true' 2>/dev/null | grep '"title":"train-\*"' | wc -l ) - - if [ "$train_exists" -eq 0 ]; then - echo "[INFO] Creating data view for train-* indices" - curl -fsS -X POST "$KB_HOST/api/data_views/data_view" \ - -H 'kbn-xsrf: true' \ - -H 'Content-Type: application/json' \ - -d '{"data_view":{"name":"train","title":"train-*","timeFieldName":"@timestamp"}}' \ - >/dev/null && echo "[OK] Created train data view" || echo "[WARN] Failed to create train data view" - else - echo "[INFO] Train data view already exists, skipping" - fi - else - echo "[INFO] No train-* indices found, skipping train data view creation" - fi - - # 创建 infer 数据视图 - if [ "$infer_indices" -gt 0 ]; then - # 检查数据视图是否已存在 - local infer_exists=$(curl -s "$KB_HOST/api/data_views" -H 'kbn-xsrf: true' 2>/dev/null | grep '"title":"infer-\*"' | wc -l ) - - if [ "$infer_exists" -eq 0 ]; then - echo "[INFO] Creating data view for infer-* indices" - curl -fsS -X POST "$KB_HOST/api/data_views/data_view" \ - -H 'kbn-xsrf: true' \ - -H 'Content-Type: application/json' \ - -d '{"data_view":{"name":"infer","title":"infer-*","timeFieldName":"@timestamp"}}' \ - >/dev/null && echo "[OK] Created infer data view" || echo "[WARN] Failed to create infer data view" - else - echo "[INFO] Infer data view already exists, skipping" - fi - else - echo "[INFO] No infer-* indices found, skipping infer data view creation" - fi + create_or_ensure_data_view "train" "train-*" + create_or_ensure_data_view "infer" "infer-*" } # 主逻辑 diff --git a/src/log/tests/scripts/e2e_test.sh b/src/log/tests/scripts/e2e_test.sh index fbe5197..ed88803 100755 --- a/src/log/tests/scripts/e2e_test.sh +++ b/src/log/tests/scripts/e2e_test.sh @@ -115,20 +115,32 @@ show_step "Health" "Check service health" echo "[INFO] Checking service health..." # 检查 Elasticsearch 健康状态 +health_check_ok=1 es_health=$(curl -s "http://localhost:9200/_cluster/health" | grep -o '"status":"[^"]*"' | cut -d'"' -f4) if [ "$es_health" = "green" ] || [ "$es_health" = "yellow" ]; then echo "✅ Elasticsearch health: $es_health" else echo "❌ Elasticsearch health: $es_health" + health_check_ok=0 fi # 检查 Kibana 状态 if curl -fs "http://localhost:5601/api/status" >/dev/null 2>&1; then kb_status="available" echo "✅ Kibana status: $kb_status" + + data_views_json=$(curl -fs "http://localhost:5601/api/data_views" -H 'kbn-xsrf: true' 2>/dev/null || true) + if echo "$data_views_json" | grep -F '"title":"train-*"' >/dev/null 2>&1 && \ + echo "$data_views_json" | grep -F '"title":"infer-*"' >/dev/null 2>&1; then + echo "✅ Kibana data views: train-* and infer-* present" + else + echo "❌ Kibana data views missing: train-* or infer-*" + health_check_ok=0 + fi else kb_status="unavailable" echo "⚠️ Kibana status: $kb_status" + health_check_ok=0 fi # 检查 Fluent-Bit 指标 @@ -139,6 +151,13 @@ if [ "$fb_host01_uptime" -gt 0 ] && [ "$fb_host02_uptime" -gt 0 ]; then echo "✅ Fluent-Bit services: host01 uptime=${fb_host01_uptime}s, host02 uptime=${fb_host02_uptime}s" else echo "⚠️ Fluent-Bit services: host01 uptime=${fb_host01_uptime}s, host02 uptime=${fb_host02_uptime}s" + health_check_ok=0 +fi + +if [ "$health_check_ok" -eq 1 ]; then + true +else + false fi verify_step "Service health check"