go-kit 微服務 服務鏈路追蹤 (jaeger 實現)(2)
go-kit 微服務 服務鏈路追蹤(jaeger 實現)(2)
- 《go-kit 微服務 服務鏈路追蹤(jaeger 實現)(1)》 中實現了 grpc 服務端,客戶端的鏈路追蹤
- 在以前的 1.0 版本的基礎上我們加上對 service,endpoint 層的鏈路追蹤
endpoint 層
- 中介軟體
func NewTracerEndpointMiddleware(tracer opentracing.Tracer) endpoint.Middleware {
return func(next endpoint.Endpoint) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
span, ctxContext := opentracing.StartSpanFromContextWithTracer(ctx, tracer, "endpoint", opentracing.Tag{
Key: string(ext.Component),
Value: "NewTracerEndpointMiddleware",
})
defer span.Finish()
return next(ctxContext, request)
}
}
}
- 新增到登入 EndPoint 中
func NewEndPointServer(svc Service, limit *rate.Limiter,tracer opentracing.Tracer) EndPointServer {
var loginEndPoint endpoint.Endpoint
{
loginEndPoint = MakeLoginEndPoint(svc)
loginEndPoint = NewGolangRateAllowMiddleware(limit)(loginEndPoint)
loginEndPoint = NewTracerEndpointMiddleware(tracer)(loginEndPoint)
}
return EndPointServer{LoginEndPoint: loginEndPoint}
}
service 層修改
- 中介軟體
type tracerMiddlewareServer struct {
next Service
tracer opentracing.Tracer
}
func NewTracerMiddlewareServer(tracer opentracing.Tracer) NewMiddlewareServer {
return func(service Service) Service {
return tracerMiddlewareServer{
next: service,
tracer: tracer,
}
}
}
func (l tracerMiddlewareServer) Login(ctx context.Context, in *pb.Login) (out *pb.LoginAck, err error) {
span, ctxContext := opentracing.StartSpanFromContextWithTracer(ctx, l.tracer, "service", opentracing.Tag{
Key: string(ext.Component),
Value: "NewTracerServerMiddleware",
})
defer func() {
span.Finish()
}()
out, err = l.next.Login(ctxContext, in)
return
}
- 新增到 server 方法中
func NewService(log *zap.Logger, counter metrics.Counter, histogram metrics.Histogram, tracer opentracing.Tracer) Service {
var server Service
server = &baseServer{log}
server = NewTracerMiddlewareServer(tracer)(server)
server = NewMetricsMiddlewareServer(counter, histogram)(server)
server = NewLogMiddlewareServer(log)(server)
return server
}
執行
- 執行 TestNewUserAgentClient 方法
- 我們登入 http://127.0.0.1:16686/ jaeger 後臺查詢資訊
結語
- 通過後臺介面我們可以看到請求資訊裡面新增上了我們對 service,endpoint 層的鏈路追蹤
- jaeger 的用法還有很多,這裡只展示簡單的使用,更加高階的功能歡迎大家一起討論
- 歡迎新增 QQ 一起討論
完整程式碼地址
聯絡 QQ: 3355168235
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- go-kit 微服務 服務鏈路追蹤 (jaeger 實現)(1)Go微服務
- go-kit微服務:服務鏈路追蹤Go微服務
- (16)go-micro微服務jaeger鏈路追蹤Go微服務
- 分散式鏈路追蹤Jaeger + 微服務Pig在Rainbond上的實踐分享分散式微服務AI
- 利用Spring Boot實現微服務的鏈路追蹤Spring Boot微服務
- 微服務鏈路追蹤元件 SkyWalking微服務元件
- 詳解ElasticAPM實現微服務的鏈路追蹤(NET)AST微服務
- Asp.Net Core&Jaeger實現鏈路追蹤ASP.NET
- 微服務整合Spring Cloud Zipkin實現鏈路追蹤並整合Dubbo微服務SpringCloud
- go-zero docker-compose 搭建課件服務(八):整合jaeger鏈路追蹤GoDocker
- net core 微服務框架 Viper 呼叫鏈路追蹤微服務框架
- go-kit 微服務 服務監控 (prometheus 實現)Go微服務Prometheus
- 微服務呼叫鏈追蹤中心搭建微服務
- 微服務 Zipkin 鏈路追蹤原理(圖文詳解)微服務
- spring cloud構建網際網路分散式微服務雲平臺-服務鏈路追蹤SpringCloud分散式微服務
- 分散式服務呼叫鏈追蹤分散式
- 微服務追蹤SQL上報至Jaeger(支援Istio管控下的gorm查詢追蹤)微服務SQLGoORM
- SpringCloud分散式微服務雲架構第九篇: 服務鏈路追蹤(Finchley版本)SpringGCCloud分散式微服務架構
- go-kit微服務:服務註冊與發現Go微服務
- Spring Cloud實戰系列(七) - 服務鏈路追蹤Spring Cloud SleuthSpringCloud
- Zipkin — 微服務鏈路跟蹤.微服務
- Jaeger Client Go 鏈路追蹤|入門詳解clientGo
- go-kit微服務:服務熔斷Go微服務
- Jaeger鏈路追蹤在專案中的應用
- 全鏈路追蹤!微服務運維人員終於解放了微服務運維
- Go微服務框架go-kratos實戰05:分散式鏈路追蹤 OpenTelemetry 使用Go微服務框架分散式
- go-kit 微服務實踐Go微服務
- 帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)Go微服務
- 基於OpenTelemetry實現Java微服務呼叫鏈跟蹤Java微服務
- Go - 實現專案內鏈路追蹤Go
- 鏈路追蹤
- [jaeger] 四、微服務之呼叫鏈(Feign+SpringCloud)微服務SpringGCCloud
- Go - 實現專案內鏈路追蹤(二)Go
- go-kit微服務:限流Go微服務
- 萬字詳解!搜狐智慧媒體基於 Zipkin 和 StarRocks 的微服務鏈路追蹤實踐微服務
- 「Java分享客棧」隨時用隨時翻:微服務鏈路追蹤之zipkin搭建Java微服務
- ⑦SpringCloud 實戰:引入Sleuth元件,完善服務鏈路跟蹤SpringGCCloud元件
- 微服務追蹤SQL(支援Isto管控下的gorm查詢追蹤)微服務SQLGoORM