#!/usr/bin/env bash # ══════════════════════════════════════════════════ # check_health.sh # 检查所有服务的健康状态和资源使用 # 用法:bash scripts/check_health.sh # ══════════════════════════════════════════════════ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_DIR" GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m' echo "" echo -e "${BLUE}══════════════════════════════════════════${NC}" echo -e "${BLUE} 服务健康检查报告${NC}" echo -e "${BLUE}══════════════════════════════════════════${NC}" echo "" # Docker 服务状态 echo -e "${BLUE}【Docker Compose 服务状态】${NC}" docker compose ps --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}" echo "" # HTTP 端点检查 echo -e "${BLUE}【HTTP 健康端点】${NC}" check_http() { local name=$1; local url=$2 if curl -sf --max-time 5 "$url" > /dev/null 2>&1; then echo -e " ${GREEN}[OK]${NC} $name ($url)" else echo -e " ${RED}[FAIL]${NC} $name ($url)" fi } check_http "API 网关" "http://localhost/health" check_http "业务后端" "http://localhost:8000/health" check_http "嵌入服务" "http://localhost:8010/health" check_http "解析服务" "http://localhost:8011/health" check_http "Milvus" "http://localhost:9091/healthz" check_http "Neo4j" "http://localhost:7474" echo "" # 资源使用 echo -e "${BLUE}【容器资源使用】${NC}" docker stats --no-stream --format \ "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" \ 2>/dev/null | head -15 echo "" # 磁盘使用 echo -e "${BLUE}【磁盘使用】${NC}" df -h . | tail -1 | awk '{print " 项目目录:已用 "$3",可用 "$4"(" $5 " 使用率)"}' docker system df 2>/dev/null | head -6 echo "" # LLM 配置检查 echo -e "${BLUE}【LLM API 配置】${NC}" source .env 2>/dev/null || true if [[ -n "${DEEPSEEK_API_KEY:-}" ]]; then echo -e " ${GREEN}[OK]${NC} DeepSeek API Key 已配置" elif [[ -n "${DASHSCOPE_API_KEY:-}" ]]; then echo -e " ${GREEN}[OK]${NC} DashScope (Qwen) API Key 已配置" else echo -e " ${YELLOW}[WARN]${NC} 未配置 LLM API Key(LLM 功能不可用)" fi echo ""