- 优化API参考文档的段落排版和表格对齐 - 补充签名机制和支付接口的详细说明- 完善错误码与解决方案的描述 - 统一文档中的代码引用和示例格式 docs(beego):优化Beego框架集成文档结构 - 改进Beego框架文档的换行和段落布局 - 完善控制器继承和中间件集成的说明 - 优化ORM模型注册和路由机制的描述- 统一文档中的技术术语表达方式 docs(docker): 改进Docker部署指南文档格式 - 优化Dockerfile多阶段构建的描述 - 完善docker-compose配置文件说明 - 改进本地部署步骤和故障排除指南- 统一文档中的命令行示例格式feat(supplier): 新增LianIns卡发送任务类型- 在枚举中添加SendCardTaskTypeEnumLianIns类型 - 更新GetAllSendCardTaskType函数返回值 - 实现LianIns任务类型的工厂方法 chore(deps): 更新项目依赖版本 - 升级github.com/bytedance/sonic至v1.14.2 - 升级github.com/duke-git/lancet/v2至v2.3.8 - 升级github.com/bytedance/sonic/loader至v0.4.0 - 移除natefinch/lumberjack和yaml.v2依赖- 清理间接依赖中的toml库引用
8.0 KiB
监控与故障排除
**本文档引用的文件** - [logs.go](file://internal/otelTrace/logs.go) - [init.go](file://internal/otelTrace/init.go) - [middleware.go](file://internal/otelTrace/middleware.go) - [simple.go](file://internal/otelTrace/simple.go) - [consts.go](file://internal/otelTrace/consts.go) - [utils.go](file://internal/otelTrace/utils.go) - [span.go](file://internal/otelTrace/span.go) - [pay_solve_test.go](file://internal/service/pay_solve_test.go) - [payfor_solve.go](file://internal/service/pay_for/payfor_solve.go) - [pay_service.go](file://internal/service/pay_service.go) - [order_controller.go](file://internal/controllers/order_controller.go) - [router.go](file://internal/routers/router.go) - [metrics.go](file://internal/service/supplier/third_party/pool/metrics.go)目录
分布式追踪
本系统使用OpenTelemetry(otelTrace包)实现分布式追踪,通过otelTrace.InitTracer()
函数初始化追踪器,配置了生产环境优化的Trace导出器、资源标识、采样策略和批量处理器。追踪器使用gRPC协议将数据发送到指定的收集器,支持gzip压缩以减少网络传输量。
系统通过otelTrace.Middleware中间件实现请求级别的追踪。该中间件在请求处理开始时创建一个Span,从请求头中提取上游的trace
context,并注入到当前context中。Span记录了HTTP方法、URL、状态码、响应大小、处理时长等关键性能指标。当请求处理时间超过5秒时,会自动标记为慢请求并记录警告日志。
sequenceDiagram
participant Client as "客户端"
participant Middleware as "追踪中间件"
participant Span as "Span"
participant Exporter as "导出器"
Client->>Middleware : 发起HTTP请求
Middleware->>Span : 创建Span并提取上下文
Span->>Span : 记录HTTP基础信息
Middleware->>Client : 处理业务逻辑
Span->>Span : 记录响应状态码和处理时长
Span->>Exporter : 结束Span并导出
Exporter->>Collector : 发送追踪数据
Diagram sources
Section sources
日志诊断
系统使用otelTrace.Logger进行日志记录,该Logger集成了OpenTelemetry的日志导出功能。日志信息不仅会输出到标准输出,还会通过OTLP协议发送到日志收集器,实现日志的集中管理和分析。
otelTrace.logs.go文件定义了CustomLogger结构体,它包装了Zap日志库,并提供了WithContext
方法,可以将OpenTelemetry的context与日志记录关联起来。这使得在查看日志时,可以轻松地关联到相应的追踪信息,实现日志与追踪的联动分析。
classDiagram
class CustomLogger {
+logger *zap.Logger
+WithContext(ctx context.Context) *zap.Logger
}
class Logger {
+CustomLogger
}
Logger --> CustomLogger : "全局实例"
Diagram sources
Section sources
关键指标与Prometheus集成
系统通过otelTrace.InitTracer()函数配置了Metrics导出器,将关键指标通过OTLP协议发送到收集器。同时,
internal/service/supplier/third_party/pool/metrics.go文件定义了Metrics结构体,用于监控订单处理相关的指标。
这些指标包括:
order_pool_processed_total: 已处理的订单总数order_pool_failed_total: 处理失败的订单总数order_pool_processing_seconds: 订单处理时间分布order_pool_size: 当前订单池大小order_queue_length: 当前订单队列长度order_query_seconds: 订单查询时间分布order_query_failed_total: 订单查询失败总数
flowchart TD
A[业务代码] --> B[记录指标]
B --> C{指标类型}
C --> |计数器| D[OrderProcessed]
C --> |计数器| E[OrderFailed]
C --> |直方图| F[ProcessingTime]
C --> |仪表盘| G[PoolSize]
C --> |仪表盘| H[OrderQueueLength]
D --> I[Prometheus]
E --> I
F --> I
G --> I
H --> I
I --> J[监控面板]
Diagram sources
Section sources
常见问题排查
支付请求超时
当支付请求超时时,首先检查otelTrace.Middleware中记录的Span,查看处理时长是否超过5秒。如果超过,说明存在慢请求。可以通过以下步骤排查:
- 检查数据库连接池是否耗尽,查看
order_pool_size和order_queue_length指标。 - 检查Redis连接是否正常,查看
TotalRedisErrors指标。 - 检查上游供应商接口是否响应缓慢,查看
order_query_seconds指标。
回调失败
当回调失败时,首先检查order_controller.go中的OrderUpdate方法。该方法处理手动修正订单状态的请求。可以通过以下步骤排查:
- 检查
bankOrderId是否正确,通过order.GetOrderByBankOrderId查询订单信息。 - 检查
solveType是否正确,确保是SUCCESS或FAIL。 - 检查
service.SolvePaySuccess或service.SolvePayFail方法的执行结果。
数据库连接池耗尽
当数据库连接池耗尽时,系统会记录相关错误日志。可以通过以下步骤排查:
- 检查
otelTrace.Logger中的错误日志,查找database connection pool exhausted等关键词。 - 检查
order_pool_size和order_queue_length指标,查看订单池和队列的大小。 - 检查
CurrentChannelConcurrency、CurrentRoadConcurrency和CurrentFaceValueConcurrency指标,查看当前并发数。
Section sources
性能监控与优化
系统通过otelTrace.Middleware和Metrics结构体实现了全面的性能监控。关键性能指标包括HTTP响应时间、订单处理时间、数据库查询时间等。
对于慢查询的识别,系统在otelTrace.Middleware中设置了5秒的阈值。当请求处理时间超过5秒时,会自动记录警告日志,并标记为慢请求。开发者可以通过分析这些日志,定位性能瓶颈。
优化建议:
- 优化数据库查询,添加必要的索引。
- 使用缓存减少数据库访问。
- 优化上游供应商接口调用,减少网络延迟。
- 调整订单池大小和队列长度,平衡性能和资源使用。
Section sources
告警配置
系统通过otelTrace.monitorExporterHealth函数实现了导出器健康状态的监控。该函数每30秒检查一次导出失败次数,如果失败次数超过10次,会记录警告日志。
告警规则建议:
- 当
exportFailures超过10次时,发送告警通知。 - 当
order_query_failed_total在5分钟内增加超过100次时,发送告警通知。 - 当
order_pool_processing_seconds的95分位数超过5秒时,发送告警通知。 - 当
order_pool_size接近最大值时,发送告警通知。
Section sources