13 KiB
系统监控接口
**本文档引用的文件** - [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)目录
简介
本项目是一个基于 Gin 框架的 Go HTTP API 脚手架,提供了系统监控接口功能。当前版本实现了基础的健康检查接口,用于监控应用的核心服务状态,包括数据库连接、缓存服务和搜索引擎的状态。
健康检查接口采用统一的响应格式,返回标准的 JSON 结构,便于与各种监控系统集成。接口设计遵循 RESTful API 规范,使用 HTTP GET 方法访问指定的 URL 路径。
项目结构
该项目采用模块化的分层架构设计,主要分为以下几个层次:
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
图表来源
章节来源
核心组件
健康检查处理器
健康检查处理器是系统监控的核心组件,负责处理健康检查请求并返回系统状态信息。
章节来源
统一响应格式
系统采用统一的 JSON 响应格式,确保所有 API 接口的一致性。
章节来源
路由配置
路由系统负责将 HTTP 请求映射到相应的处理器函数。
章节来源
架构概览
系统采用分层架构设计,各层职责明确,便于维护和扩展:
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
图表来源
详细组件分析
健康检查接口规范
HTTP 接口定义
健康检查接口遵循 RESTful API 设计原则,提供简洁明了的接口规范:
| 属性 | 描述 |
|---|---|
| HTTP 方法 | GET |
| URL 路径 | /api/v1/health |
| 内容类型 | application/json |
| 认证要求 | 无需认证 |
| 响应状态码 | 200 |
请求示例
# 基础请求
curl http://localhost:8080/api/v1/health
# 指定主机和端口
curl http://127.0.0.1:8080/api/v1/health
# 使用浏览器访问
http://localhost:8080/api/v1/health
响应格式
健康检查接口返回统一的 JSON 格式响应:
{
"code": 0,
"message": "ok",
"data": {
"status": "up"
}
}
章节来源
当前监控维度
目前系统健康检查接口仅提供基础的可用性检测,返回系统整体状态信息。完整的监控体系需要在现有基础上进行扩展。
已支持的监控维度
- 系统可用性检测
- 应用程序运行状态
- Web 服务器监听状态
- 基础服务连通性
待扩展的监控维度
-
数据库连接状态
- MySQL 连接池健康
- 数据库查询性能指标
- 连接数统计
-
缓存服务状态
- Redis 连接状态
- 缓存命中率
- 内存使用情况
-
搜索引擎状态
- Meilisearch 服务状态
- 索引同步状态
- 搜索性能指标
章节来源
扩展点设计
为了支持更全面的监控需求,系统提供了多个扩展点:
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
图表来源
依赖关系分析
系统依赖关系清晰,各组件职责分离:
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
图表来源
章节来源
性能考虑
健康检查性能特性
当前健康检查接口具有以下性能特点:
-
低延迟响应
- 无数据库查询操作
- 无外部服务调用
- 直接返回预定义状态
-
资源占用最小化
- 不建立新的数据库连接
- 不执行缓存操作
- 不进行搜索查询
-
并发处理能力
- Gin 框架内置 goroutine 支持
- 无阻塞 I/O 操作
- 高并发请求处理
性能优化建议
对于未来的扩展版本,建议考虑以下优化措施:
-
连接池管理
- 实现数据库连接池健康检查
- 监控连接池使用率
- 动态调整连接数
-
缓存性能监控
- 监控 Redis 连接状态
- 统计缓存命中率
- 分析响应时间
-
异步检查机制
- 异步执行外部服务检查
- 实现超时控制
- 错误重试机制
故障排除指南
常见问题诊断
健康检查失败
症状: 健康检查返回非 200 状态码或错误响应
可能原因:
- 应用程序未正确启动
- 网络连接问题
- 端口被占用
解决步骤:
- 检查应用程序日志
- 验证端口监听状态
- 测试本地回环连接
数据库连接问题
症状: 数据库相关功能无法正常使用
诊断方法:
- 检查数据库配置参数
- 验证网络连通性
- 测试数据库凭据
章节来源
日志分析
系统使用 Zap 日志库提供结构化日志输出:
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 : 记录数据库连接信息
图表来源
章节来源
监控集成配置
Prometheus 集成
# Prometheus 配置示例
scrape_configs:
- job_name: 'app-api'
static_configs:
- targets: ['localhost:8080']
metrics_path: '/api/v1/health'
scrape_interval: 15s
Grafana 仪表板
{
"dashboard": {
"title": "应用健康监控",
"panels": [
{
"type": "singlestat",
"title": "系统状态",
"targets": [
{
"expr": "app_health_status{service='app-api'}",
"legendFormat": "健康状态"
}
]
}
]
}
}
结论
本系统监控接口为应用程序提供了基础的健康检查能力。当前版本专注于系统可用性检测,为后续扩展更全面的监控功能奠定了良好基础。
主要优势
- 简单易用: 接口设计简洁,易于集成和使用
- 标准化: 采用统一的响应格式,便于自动化处理
- 可扩展: 提供清晰的扩展点,支持功能增强
- 性能友好: 低开销的设计适合高频监控场景
发展方向
未来可以考虑以下改进方向:
- 实现多维度健康检查
- 集成更多监控系统
- 提供更详细的性能指标
- 增强告警和通知功能
附录
环境配置
系统支持多种环境配置,包括开发环境和生产环境:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
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 |
索引名称 |
章节来源