# 系统监控接口 **本文档引用的文件** - [internal/handler/health.go](file://internal/handler/health.go) - [internal/router/router.go](file://internal/router/router.go) - [internal/response/response.go](file://internal/response/response.go) - [cmd/server/main.go](file://cmd/server/main.go) - [internal/config/config.go](file://internal/config/config.go) - [internal/config/database.go](file://internal/config/database.go) - [internal/config/meilisearch.go](file://internal/config/meilisearch.go) - [internal/config/redis.go](file://internal/config/redis.go) - [internal/database/mysql.go](file://internal/database/mysql.go) - [internal/cache/redis.go](file://internal/cache/redis.go) - [internal/search/meilisearch.go](file://internal/search/meilisearch.go) - [pkg/logger/logger.go](file://pkg/logger/logger.go) - [README.md](file://README.md) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本项目是一个基于 Gin 框架的 Go HTTP API 脚手架,提供了系统监控接口功能。当前版本实现了基础的健康检查接口,用于监控应用的核心服务状态,包括数据库连接、缓存服务和搜索引擎的状态。 健康检查接口采用统一的响应格式,返回标准的 JSON 结构,便于与各种监控系统集成。接口设计遵循 RESTful API 规范,使用 HTTP GET 方法访问指定的 URL 路径。 ## 项目结构 该项目采用模块化的分层架构设计,主要分为以下几个层次: ```mermaid graph TB subgraph "应用入口层" Main[cmd/server/main.go] end subgraph "配置管理层" Config[internal/config/] ConfigGo[config.go] DatabaseGo[database.go] MeiliGo[meilisearch.go] RedisGo[redis.go] end subgraph "数据访问层" Database[internal/database/] MySQL[mysql.go] Cache[internal/cache/] Redis[redis.go] Search[internal/search/] Meili[meilisearch.go] end subgraph "业务逻辑层" Handler[internal/handler/] HealthHandler[health.go] Response[internal/response/] ResponseGo[response.go] end subgraph "网络层" Router[internal/router/] RouterGo[router.go] Middleware[middleware/] end subgraph "工具层" Logger[pkg/logger/] LoggerGo[logger.go] end Main --> Config Main --> Database Main --> Cache Main --> Search Main --> Router Router --> Handler Handler --> Response Config --> Database Config --> Cache Config --> Search ``` **图表来源** - [cmd/server/main.go:1-96](file://cmd/server/main.go#L1-L96) - [internal/router/router.go:1-42](file://internal/router/router.go#L1-L42) - [internal/handler/health.go:1-19](file://internal/handler/health.go#L1-L19) **章节来源** - [cmd/server/main.go:1-96](file://cmd/server/main.go#L1-L96) - [internal/router/router.go:1-42](file://internal/router/router.go#L1-L42) ## 核心组件 ### 健康检查处理器 健康检查处理器是系统监控的核心组件,负责处理健康检查请求并返回系统状态信息。 **章节来源** - [internal/handler/health.go:8-19](file://internal/handler/health.go#L8-L19) ### 统一响应格式 系统采用统一的 JSON 响应格式,确保所有 API 接口的一致性。 **章节来源** - [internal/response/response.go:9-37](file://internal/response/response.go#L9-L37) ### 路由配置 路由系统负责将 HTTP 请求映射到相应的处理器函数。 **章节来源** - [internal/router/router.go:27-30](file://internal/router/router.go#L27-L30) ## 架构概览 系统采用分层架构设计,各层职责明确,便于维护和扩展: ```mermaid graph TD Client[客户端] --> API[HTTP API 层] API --> Handler[处理器层] Handler --> Service[业务逻辑层] Service --> DataAccess[数据访问层] subgraph "数据访问层" MySQL[MySQL 数据库] Redis[Redis 缓存] Meili[Meilisearch 搜索引擎] end subgraph "配置管理" Config[配置加载] Env[环境变量] end subgraph "日志系统" Zap[Zap 日志] Logger[日志封装] end Handler --> MySQL Handler --> Redis Handler --> Meili Config --> Env Logger --> Zap ``` **图表来源** - [cmd/server/main.go:38-62](file://cmd/server/main.go#L38-L62) - [internal/router/router.go:14-30](file://internal/router/router.go#L14-L30) ## 详细组件分析 ### 健康检查接口规范 #### HTTP 接口定义 健康检查接口遵循 RESTful API 设计原则,提供简洁明了的接口规范: | 属性 | 描述 | |------|------| | HTTP 方法 | GET | | URL 路径 | `/api/v1/health` | | 内容类型 | `application/json` | | 认证要求 | 无需认证 | | 响应状态码 | 200 | #### 请求示例 ```bash # 基础请求 curl http://localhost:8080/api/v1/health # 指定主机和端口 curl http://127.0.0.1:8080/api/v1/health # 使用浏览器访问 http://localhost:8080/api/v1/health ``` #### 响应格式 健康检查接口返回统一的 JSON 格式响应: ```json { "code": 0, "message": "ok", "data": { "status": "up" } } ``` **章节来源** - [internal/router/router.go:29](file://internal/router/router.go#L29) - [internal/handler/health.go:14-18](file://internal/handler/health.go#L14-L18) - [internal/response/response.go:15-21](file://internal/response/response.go#L15-L21) ### 当前监控维度 目前系统健康检查接口仅提供基础的可用性检测,返回系统整体状态信息。完整的监控体系需要在现有基础上进行扩展。 #### 已支持的监控维度 1. **系统可用性检测** - 应用程序运行状态 - Web 服务器监听状态 - 基础服务连通性 #### 待扩展的监控维度 1. **数据库连接状态** - MySQL 连接池健康 - 数据库查询性能指标 - 连接数统计 2. **缓存服务状态** - Redis 连接状态 - 缓存命中率 - 内存使用情况 3. **搜索引擎状态** - Meilisearch 服务状态 - 索引同步状态 - 搜索性能指标 **章节来源** - [internal/handler/health.go:14-18](file://internal/handler/health.go#L14-L18) - [cmd/server/main.go:38-62](file://cmd/server/main.go#L38-L62) ### 扩展点设计 为了支持更全面的监控需求,系统提供了多个扩展点: ```mermaid classDiagram class HealthHandler { +Check(c *gin.Context) +extendDatabaseCheck() +extendRedisCheck() +extendSearchCheck() } class ExtendedHealthHandler { +Check(c *gin.Context) +checkDatabase() HealthStatus +checkRedis() HealthStatus +checkSearchEngine() HealthStatus +aggregateResults() HealthResponse } class HealthStatus { +string service +string status +string message +int statusCode +timestamp timestamp } class HealthResponse { +string overallStatus +HealthStatus[] checks +int totalChecks +int failedChecks +timestamp timestamp } HealthHandler <|-- ExtendedHealthHandler ExtendedHealthHandler --> HealthStatus ExtendedHealthHandler --> HealthResponse ``` **图表来源** - [internal/handler/health.go:8-19](file://internal/handler/health.go#L8-L19) ## 依赖关系分析 系统依赖关系清晰,各组件职责分离: ```mermaid graph LR subgraph "外部依赖" Gin[Gin Web Framework] MySQL[MySQL Driver] Redis[Redis Client] Meili[Meilisearch Client] Zap[Zap Logger] end subgraph "内部模块" Main[main.go] Router[router.go] Handler[health.go] Response[response.go] Config[config.go] MySQLModule[mysql.go] RedisModule[redis.go] MeiliModule[meilisearch.go] end Main --> Gin Main --> Config Main --> MySQLModule Main --> RedisModule Main --> MeiliModule Router --> Gin Router --> Handler Handler --> Response Handler --> Gin Config --> MySQL Config --> Redis Config --> Meili MySQLModule --> MySQL RedisModule --> Redis MeiliModule --> Meili Main --> Zap ``` **图表来源** - [cmd/server/main.go:3-20](file://cmd/server/main.go#L3-L20) - [internal/router/router.go:3-12](file://internal/router/router.go#L3-L12) **章节来源** - [cmd/server/main.go:3-20](file://cmd/server/main.go#L3-L20) - [internal/router/router.go:3-12](file://internal/router/router.go#L3-L12) ## 性能考虑 ### 健康检查性能特性 当前健康检查接口具有以下性能特点: 1. **低延迟响应** - 无数据库查询操作 - 无外部服务调用 - 直接返回预定义状态 2. **资源占用最小化** - 不建立新的数据库连接 - 不执行缓存操作 - 不进行搜索查询 3. **并发处理能力** - Gin 框架内置 goroutine 支持 - 无阻塞 I/O 操作 - 高并发请求处理 ### 性能优化建议 对于未来的扩展版本,建议考虑以下优化措施: 1. **连接池管理** - 实现数据库连接池健康检查 - 监控连接池使用率 - 动态调整连接数 2. **缓存性能监控** - 监控 Redis 连接状态 - 统计缓存命中率 - 分析响应时间 3. **异步检查机制** - 异步执行外部服务检查 - 实现超时控制 - 错误重试机制 ## 故障排除指南 ### 常见问题诊断 #### 健康检查失败 **症状**: 健康检查返回非 200 状态码或错误响应 **可能原因**: 1. 应用程序未正确启动 2. 网络连接问题 3. 端口被占用 **解决步骤**: 1. 检查应用程序日志 2. 验证端口监听状态 3. 测试本地回环连接 #### 数据库连接问题 **症状**: 数据库相关功能无法正常使用 **诊断方法**: 1. 检查数据库配置参数 2. 验证网络连通性 3. 测试数据库凭据 **章节来源** - [internal/database/mysql.go:37-43](file://internal/database/mysql.go#L37-L43) - [cmd/server/main.go:38-48](file://cmd/server/main.go#L38-L48) ### 日志分析 系统使用 Zap 日志库提供结构化日志输出: ```mermaid sequenceDiagram participant Client as 客户端 participant Server as 应用服务器 participant Logger as 日志系统 participant DB as 数据库 Client->>Server : 健康检查请求 Server->>Logger : 记录请求信息 Server->>Server : 处理健康检查 Server->>Logger : 记录处理结果 Server-->>Client : 返回健康检查响应 Logger->>DB : 记录数据库连接信息 ``` **图表来源** - [cmd/server/main.go:44-48](file://cmd/server/main.go#L44-L48) - [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19) **章节来源** - [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19) ### 监控集成配置 #### Prometheus 集成 ```yaml # Prometheus 配置示例 scrape_configs: - job_name: 'app-api' static_configs: - targets: ['localhost:8080'] metrics_path: '/api/v1/health' scrape_interval: 15s ``` #### Grafana 仪表板 ```json { "dashboard": { "title": "应用健康监控", "panels": [ { "type": "singlestat", "title": "系统状态", "targets": [ { "expr": "app_health_status{service='app-api'}", "legendFormat": "健康状态" } ] } ] } } ``` ## 结论 本系统监控接口为应用程序提供了基础的健康检查能力。当前版本专注于系统可用性检测,为后续扩展更全面的监控功能奠定了良好基础。 ### 主要优势 1. **简单易用**: 接口设计简洁,易于集成和使用 2. **标准化**: 采用统一的响应格式,便于自动化处理 3. **可扩展**: 提供清晰的扩展点,支持功能增强 4. **性能友好**: 低开销的设计适合高频监控场景 ### 发展方向 未来可以考虑以下改进方向: 1. 实现多维度健康检查 2. 集成更多监控系统 3. 提供更详细的性能指标 4. 增强告警和通知功能 ## 附录 ### 环境配置 系统支持多种环境配置,包括开发环境和生产环境: | 环境变量 | 默认值 | 说明 | |----------|--------|------| | `APP_ENV` | `development` | 运行环境 | | `APP_HOST` | `0.0.0.0` | 监听地址 | | `APP_PORT` | `8080` | 监听端口 | | `GIN_MODE` | `debug` | Gin 运行模式 | ### 数据库配置 | 环境变量 | 默认值 | 说明 | |----------|--------|------| | `DATABASE_HOST` | `localhost` | MySQL 主机 | | `DATABASE_PORT` | `3306` | MySQL 端口 | | `DATABASE_NAME` | `audio` | 数据库名称 | | `DATABASE_USER` | `root` | 用户名 | | `DATABASE_PASSWORD` | `root123` | 密码 | ### 缓存配置 | 环境变量 | 默认值 | 说明 | |----------|--------|------| | `REDIS_HOST` | `ec2-3-69-138-29.eu-central-1.compute.amazonaws.com` | Redis 主机 | | `REDIS_PORT` | `16279` | Redis 端口 | | `REDIS_PASSWORD` | `eafon123!` | 密码 | | `REDIS_DATABASE` | `1` | 数据库编号 | ### 搜索引擎配置 | 环境变量 | 默认值 | 说明 | |----------|--------|------| | `MEILISEARCH_HOST` | `http://ec2-18-184-205-87.eu-central-1.compute.amazonaws.com:7700` | 搜索引擎主机 | | `MEILISEARCH_API_KEY` | `young9#!UJsD219921031` | API 密钥 | | `MEILISEARCH_INDEX` | `models` | 索引名称 | **章节来源** - [README.md:39-73](file://README.md#L39-L73) - [internal/config/config.go:18-56](file://internal/config/config.go#L18-L56)