trc golang 进程请求追踪包
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)
}
}
效果
参考资料
https://github.com/peterbourgon/trc
https://github.com/peterbourgon/trc/tree/main/_examples/trc-basic
https://pkg.go.dev/golang.org/x/net/trace
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-06-03 nodejs 通过s3fs 处理文件
2022-06-03 nodejs 文件到s3的几种方法
2022-06-03 top10 nginx 配置问题
2019-06-03 Lightning Web Components 组件样式(四)
2019-06-03 Lightning Web Components html_templates(三)
2019-06-03 Lightning Web Components 开发指南(二)
2019-06-03 Lightning Web Components 安装试用(一)