518 lines
13 KiB
Markdown
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) |