Files
app-api/.qoder/repowiki/zh/content/API 接口文档/系统监控接口.md
T
2026-05-27 18:07:55 +08:00

518 lines
13 KiB
Markdown

# 系统监控接口
<cite>
**本文档引用的文件**
- [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)
</cite>
## 目录
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)