当前位置: 首页 > news >正文

使用trace进行排查网络瓶颈

func NewHTTPTraceLogger(ctx context.Context, fileUrl string, fragmentID, attempt int) context.Context {traceStart := time.Now()var dnsStart, connectStart, tlsStart, gotConnTime time.Timetrace := &httptrace.ClientTrace{DNSStart: func(info httptrace.DNSStartInfo) {dnsStart = time.Now()},DNSDone: func(info httptrace.DNSDoneInfo) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d DNSDone: %+v cost=%v",fileUrl, fragmentID, attempt, info, time.Since(dnsStart))},ConnectStart: func(network, addr string) {connectStart = time.Now()},ConnectDone: func(network, addr string, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d ConnectDone: %s %s err=%v cost=%v",fileUrl, fragmentID, attempt, network, addr, err, time.Since(connectStart))},TLSHandshakeStart: func() {tlsStart = time.Now()},TLSHandshakeDone: func(cs tls.ConnectionState, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d TLSHandshakeDone err=%v cost=%v",fileUrl, fragmentID, attempt, err, time.Since(tlsStart))},GotConn: func(connInfo httptrace.GotConnInfo) {gotConnTime = time.Now()total := time.Since(traceStart)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotConn reused=%v idleTime=%v total=%v",fileUrl, fragmentID, attempt, connInfo.Reused, connInfo.IdleTime, total)},GotFirstResponseByte: func() {ttfb := time.Since(gotConnTime)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotFirstResponseByte TTFB=%v",fileUrl, fragmentID, attempt, ttfb)},}return httptrace.WithClientTrace(ctx, trace)
}

  使用:

func NewHTTPTraceLogger(ctx context.Context, fileUrl string, fragmentID, attempt int) context.Context {traceStart := time.Now()var dnsStart, connectStart, tlsStart, gotConnTime time.Timetrace := &httptrace.ClientTrace{DNSStart: func(info httptrace.DNSStartInfo) {dnsStart = time.Now()},DNSDone: func(info httptrace.DNSDoneInfo) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d DNSDone: %+v cost=%v",fileUrl, fragmentID, attempt, info, time.Since(dnsStart))},ConnectStart: func(network, addr string) {connectStart = time.Now()},ConnectDone: func(network, addr string, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d ConnectDone: %s %s err=%v cost=%v",fileUrl, fragmentID, attempt, network, addr, err, time.Since(connectStart))},TLSHandshakeStart: func() {tlsStart = time.Now()},TLSHandshakeDone: func(cs tls.ConnectionState, err error) {g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d TLSHandshakeDone err=%v cost=%v",fileUrl, fragmentID, attempt, err, time.Since(tlsStart))},GotConn: func(connInfo httptrace.GotConnInfo) {gotConnTime = time.Now()total := time.Since(traceStart)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotConn reused=%v idleTime=%v total=%v",fileUrl, fragmentID, attempt, connInfo.Reused, connInfo.IdleTime, total)},GotFirstResponseByte: func() {ttfb := time.Since(gotConnTime)g.Log().Infof(ctx, "[trace] fileUrl=%s fragment=%d attempt=%d GotFirstResponseByte TTFB=%v",fileUrl, fragmentID, attempt, ttfb)},}return httptrace.WithClientTrace(ctx, trace)
}

  

http://www.zskr.cn/news/11732.html

相关文章:

  • JavaEE 导读与环境配置 - 实践
  • 实用指南:uniapp x鸿蒙开发之运行到鸿蒙模拟器
  • Redis 监听过期Key - 指南
  • 为什么我选择了 PSM 敏捷认证?
  • 编写msyql8.0.21 数据库批量备份脚本
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 获取用户ip所在城市
  • 完整教程:JRE、JDK、JVM 及 JIT 之间有什么不同?
  • 微波雷达模块在智能家居中的具体应用案例有哪些?
  • 三分
  • 完整教程:微服务基础2-网关路由
  • nginx ipv6 proxy配置
  • (三)数仓人必看!ODS 到 DWS 各层设计规范全解析,含同步/存储/质量核心要点
  • 【shell】系统资源不足fork: retry: Resource temporarily unavailable
  • 【语文训练】女乃龙?田力乃龙?
  • 抖动分为3个方面
  • 关于ubuntu 用户切换的细节 su - user 和su user
  • 用 SeaTunnel 同步 MySQL 到 Doris:全量增量 + SQL 过滤
  • 在CodeBolcks下wxSmith的C++编程教程——使用自定义绘制和鼠标处理创建项目
  • 10_ select/poll/epoll实现服务端的io多路复用
  • 模拟实战配置实验
  • 基于MATLAB S函数实现多智能体间歇通信仿真
  • comfyui-数字人
  • 我天,前端岗要消亡了吗?
  • java8的集合新API - --
  • 基于MATLAB/Simulink的500kW三相光伏逆变器仿真
  • Docker Compose启动多个镜像实例
  • 深入解析:⸢ 伍-Ⅱ⸥ ⤳ 默认安全治理实践:水平越权检测 前端安全防控