当前位置: 首页 > 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.jsqmd.com/news/3705/

相关文章:

  • 五项能力斩获满分!天翼云云WAF获IDC权威认可!
  • 什么样的代码可以称得上是好代码? - 浪矢
  • 抖胆代理商,DD3118S芯片,USB3.0读卡方案,替代GL3213S方案
  • JavaEE 导读与环境配置 - 实践
  • 微软Teams Channel Agent上线:中国卖家AI赋能品牌出海新机遇与实战策略(2025前瞻) - 详解
  • docker制作
  • lvgl 9.3 style使用导致内存泄漏问题
  • 【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南 - 详解
  • king3399 编译报错
  • 实用指南:uniapp x鸿蒙开发之运行到鸿蒙模拟器
  • Redis 监听过期Key - 指南
  • 11_Reactor网络模型
  • 「LNOI2022」盒
  • 【文摘随笔】从业开发工作五年后,再读短篇《孔乙己》——年少不懂孔乙己,长大已成孔乙己
  • 为什么我选择了 PSM 敏捷认证?
  • Hive SQL - INSERT
  • 编写msyql8.0.21 数据库批量备份脚本
  • 完整教程:基础算法---【差分】
  • Android 源码中如何生成一个platform JKS 文件?
  • 后端面试八股(go 方向)
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • C++设计模式之创建型模式:工厂方法模式(Factory Method) - 教程
  • 【铸网-2025】线下赛 web 详细题解
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?
  • 完整教程:Spring Boot 核心注解分类与应用指南
  • 分布式数据库迁移OceanBase——基于网易云音乐自研CDC服务的平滑迁移方案
  • 获取用户ip所在城市
  • 【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践