gomicro v2--04 链路追踪jaeger和监控Prometheus

环境准备

docker安装jaeger

docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp  -p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest

一、链路追踪jaeger

1.为什么使用链路追踪?

互联网时代,分布式已成主流。一个调用,往往涉及多个微服务,如何对,这些调用进行追踪,就成为了一个,重要问题。

2.链路追踪系统需要满足什么条件?

  1. 低消耗:对系统影响尽量小。
  2. 应用透明:应用程序员,不需要知道有链路追踪这回事。
  3. 延展性:应该能满足为了几年应用发展的需求。

3.opentracing是什么

opentracing 是实现链路追踪的一套标准,一组公共接口,java、php、go都有公共类库实现。具体实现,如jaeger 只需要把自己的功能,注入到接口中,就能无缝使用。

(1)tracer

实现opentracing 的具体记录分布式链路的系统,如jaeger

(2)span

链路追踪的单位,可以理解为一个盒子,一次链路追踪需要开启一个根盒子,其他的调用,创建一个子盒子,平级的盒子,并排在父盒子里,子调用,盒子的内部。形成一个类似树的结构。

4.jaeger是什么

Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API。分布式追踪系统用于记录请求范围内的信息。例如,一次远程方法调用的执行过程和耗时。是我们排查系统问题和系统性能的利器。
分布式追踪系统种类繁多,但是核心步骤有三个:代码埋点,数据存储和查询展示。

5.go micro中引入jaeger

(1)jaeger注入到opentracing中 的方法实现

jaeger/jaegerInit.go

package jeager

import (
	"github.com/opentracing/opentracing-go"
	"github.com/uber/jaeger-client-go"
	jaegercfg "github.com/uber/jaeger-client-go/config"
	"io"
	"time"
)

//NewJaegerTracer 初始化jaeger ,把jeager初始化到opentrace 中
func NewJaegerTracer(serviceName string, addr string) (opentracing.Tracer, io.Closer, error) {
	cfg := jaegercfg.Configuration{
		ServiceName: serviceName,
		Sampler: &jaegercfg.SamplerConfig{
			Type:  jaeger.SamplerTypeConst,
			Param: 1,
		},
		Reporter: &jaegercfg.ReporterConfig{
			LogSpans:            true,
			BufferFlushInterval: 1 * time.Second,
		},
	}
	sender, err := jaeger.NewUDPTransport(addr, 0)
	if err != nil {
		return nil, nil, err
	}
	reporter := jaeger.NewRemoteReporter(sender)
	tracer, closer, err := cfg.NewTracer(
		jaegercfg.Reporter(reporter),
	)
	opentracing.SetGlobalTracer(tracer)
	return tracer, closer, err
}

指明jeager 的地址,和当前实例的服务名

jeager的链路是跨系统,再那个系统里,如gateway或者customer 就是用,这这些系统下初始化给jeager 的服务名区分的。

(2) 服务端配置

a.启动时调用注入jaeger

b.初始化服务时,使用中间件开启span

 一般wraphandler 和wrapclient 中开启任意一个就可以,两个都开启和开启一个效果是一样的。

c.gomicro跨服务传送的特殊处理

openTracing 可以从context 中读取span 把链路连接在一起,但是,context再go micro的微服务之间是无法直接传递的。但是matedate可以,这方面 go micro的插件库已经帮我们处理好了

github.com/micro/go-plugins/wrapper/trace/opentracing/v2

import microOpentracing "github.com/micro/go-plugins/wrapper/trace/opentracing/v2"



ctx, startSpan, err := microOpentracing.StartSpanFromContext(context.Background(), opentracing.GlobalTracer(), "customer_test.start")
    defer startSpan.Finish()

这一部分应该,写成 gin的 middleware,已保证每次请求来的时候,都能开启一个span。

具体代码如下:

package jeager

import (
	"github.com/gin-gonic/gin"
	microOpentracing "github.com/micro/go-plugins/wrapper/trace/opentracing/v2"
	"github.com/opentracing/opentracing-go"
)

func JeagerGinMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		ctx := c.Request.Context()
		ctx, startSpan, _ := microOpentracing.StartSpanFromContext(ctx, opentracing.GlobalTracer(), "customer_test.start")
		c.Request = c.Request.WithContext(ctx)
		defer startSpan.Finish()
		c.Next()
	}
}

使用:

 调用接口,然后打开。http://127.0.0.1:16686/search 16686是jaeger的默认端口。

二、监控Prometheus

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jaeger追踪是一种用于监控追踪分布式系统中请求的工具。它可以帮助开发人员跟踪请求在系统中的传递径,并提供详细的性能指标和错误信息。Jaeger的安装可以参考官方地址\[1\]和相关教程\[2\]。Jaeger由多个组件组成,包括Agent、Collector、Query Service等\[2\]。 在使用Go语言进行Jaeger追踪时,可以通过Jaeger客户端发送单个或多个span来追踪请求\[3\]。同时,还可以使用grpc发送span消息\[3\]。在Gin框架中,可以通过添加拦截器实现Jaeger的注入\[3\]。此外,还可以修改grpc_opentracing源码来实现Gin和gRPC的追踪\[3\]。 总结来说,Jaeger追踪是一种用于监控追踪分布式系统中请求的工具,可以帮助开发人员跟踪请求的传递径和性能指标。在Go语言中,可以使用Jaeger客户端发送span来实现链追踪,并通过拦截器和修改源码来实现Gin和gRPC的追踪。 #### 引用[.reference_title] - *1* [【链追踪Jaeger基于go的「Gin」「gRPC」进行链追踪](https://blog.csdn.net/the_shy_faker/article/details/129044832)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [35、jaeger追踪](https://blog.csdn.net/qq23001186/article/details/126339369)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值