首页 > 系统相关 >trc golang 进程请求追踪包

trc golang 进程请求追踪包

时间:2023-06-11 10:05:18浏览次数:59  
标签:http trc req golang key rec eztrc 追踪

trc 是一个方便的golang 进程请求追踪框架,可以提供方便的请求追踪查看

参考使用

代码来说官方示例,完整的可以查看官方

package main

 

import (
"context"
"fmt"
"log"
"math/rand"
"net/http"
"net/http/httptest"
_ "net/http/pprof"
"strings"
"time"

 

"github.com/peterbourgon/trc/eztrc"
)

 

func main() {
// Create a `kv` service in memory.
kv := NewKV(NewStore())

 

// Serve the `kv` API over HTTP.
var apiHandler http.Handler
{
apiHandler = kv                                        // `kv` implements http.Handler
apiHandler = eztrc.Middleware(apiCategory)(apiHandler) // create a trace for each API request
}

 

// Generate random get/set/del requests to the API handler.
go func() {
load(context.Background(), apiHandler)
}()

 

// Serve the trace API over HTTP.
var tracesHandler http.Handler
{
tracesHandler = eztrc.Handler()                                                                 // this serves the singleton eztrc.Collector
tracesHandler = eztrc.Middleware(func(*http.Request) string { return "traces" })(tracesHandler) // create a trace for each trace request
}

 

// Here's how you would change the number of traces per category.
eztrc.Collector().Resize(context.Background(), 100)

 

// Create a single serve mux for both API endpoints.
mux := http.NewServeMux()
mux.Handle("/api", http.StripPrefix("/api", apiHandler)) // technically unnecessary as it's not used by the loader
mux.Handle("/traces", http.StripPrefix("/traces", tracesHandler))

 

// Run the server.
server := &http.Server{Addr: "localhost:8080", Handler: mux}
log.Printf("http://localhost:8080/traces")
log.Fatal(server.ListenAndServe())
}

 

func load(ctx context.Context, dst http.Handler) {
for ctx.Err() == nil {
f := rand.Float64()
switch {
case f < 0.6:
key := getWord()
url := fmt.Sprintf("http://irrelevant/%s", key)
req, _ := http.NewRequest("GET", url, nil)
rec := httptest.NewRecorder()
dst.ServeHTTP(rec, req)

 

case f < 0.9:
key := getWord()
val := getWord()
url := fmt.Sprintf("http://irrelevant/%s", key)
req, _ := http.NewRequest("PUT", url, strings.NewReader(val))
rec := httptest.NewRecorder()
dst.ServeHTTP(rec, req)

 

default:
key := getWord()
url := fmt.Sprintf("http://irrelevant/%s", key)
req, _ := http.NewRequest("DELETE", url, nil)
rec := httptest.NewRecorder()
dst.ServeHTTP(rec, req)
}
time.Sleep(5 * time.Millisecond)
}
}

效果

trc golang 进程请求追踪包_github

 

参考资料

https://github.com/peterbourgon/trc
https://github.com/peterbourgon/trc/tree/main/_examples/trc-basic
https://pkg.go.dev/golang.org/x/net/trace


标签:http,trc,req,golang,key,rec,eztrc,追踪
From: https://blog.51cto.com/rongfengliang/6457012

相关文章

  • Golang 定时任务 github/robfig/cron/v3
    robfig/cron/v3 是一个Golang的定时任务库,支持cron表达式。低耦合高内聚,其中涉及装饰器模式,并发处理等。packagemainimport"github.com/robfig/cron/v3"c:=cron.New()//添加一个任务,每30分钟执行一次c.AddFunc("30****",func(){fmt.Println("Everyho......
  • Golang的错误处理
    Golang的错误处理引言在软件开发中,错误处理是一个非常重要的方面。它涉及到识别、捕获和处理在程序执行期间可能发生的错误。在Golang中,错误处理是一个值得关注的主题,因为它为开发人员提供了一种优雅且高效的方式来处理错误情况。本文将深入探讨Golang的错误处理机制,并为您提供一......
  • golang之jwt
    golang-jwt是go语言中用来生成和解析jwt的一个第三方库。本文中使用目前最新的v5版本。安装goget-ugithub.com/golang-jwt/jwt/v5 在代码中引用import"github.com/golang-jwt/jwt/v5" 结构体假设jwt原始的payload如下,username,exp为过期时间,nbf为生效时间,iat为签......
  • SkyWalking分布式链路追踪工具的基本使用
    下载我们需要一个监控中心,还有一个javaagents工具apache-skywalking-apm(显示/存储多个程序的指标数据),APM是ApplicationPerformanceManagement的缩写和skywalking-agent(收集单个程序的指标数据)启动Skywalking和java程序apache-skywalking-apm\bin\startup.bat......
  • golang实现设计模式汇总-创建型 | 结构型 | 行为型
    历时一个多星期的常用设计模式暂告一段落,今天汇总下使用频率较高的几种常见设计模式。以下个人根据类型分为3种,不喜勿喷:创建型结构型行为型1.创建型常用如下:单例模式简单工厂模式工厂模式抽象工厂模式建造者模式2.结构型常用如下:装饰器模式代理模式组合模式......
  • golang实现设计模式之装饰器模式-优缺点,适用场景
    装饰器模式是一种结构型设计模式,简单概括就是:不改变先有对象结构下,动态给对象增加一些职责。装饰器模式通过组合方式实现,与继承的异同:使用继承方式,具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。使用组合方式,创建装饰对象来装饰真实对象,原对象功能不变,另外扩展。......
  • golang实现设计模式之组合模式-优缺点与适用场景
    组合模式是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。结构抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件......
  • golang实现设计模式之代理模式-优缺点,适用场景
    代理模式作为一种结构型的设计模式,因为某种原因,需要对访问的对象通过代理访问目标对象,访问对象不适合或者不能直接引用该目标对象,代理就成为访问对象和目标对象的中介。结构1.抽象主题(Subject)类。通过接口或抽象类声明真实主题和代理对象实现的业务方法。2.真实主题(RealSubje......
  • golang实现设计模式之责任链模式-优缺点,适用场景
    责任链模式是一种行为型的设计模式,也叫职责链,定义:在这样的场景中,请求需要经过一系列的处理者,通过列表或者链表将处理者组合起来,请求依次被处理者处理,如果需要中断,也可以及时退出处理。上述的这种的应用场景,典型的就是在web应用中的中间件或者拦截器,比如Gin框架的中间件。结......
  • golang实现设计模式之策略模式-优缺点,适用场景
    策略模式是一种行为型的设计模式,该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户,或者认为把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。结构1.抽象策略(Strategy)类。定义了一个公共接口,各种不......