golang 链路追踪

分布式链路追踪(Distributed Tracing),也叫分布式链路跟踪,分布式跟踪,分布式追踪等等。

问题

场景1:调用链过长,查询很慢
在这里插入图片描述
web-gin由A负责,服务A由B负责,某个接口出现异常了,先查询日志看是哪个地方出错了,发现服务A调用失败,依次找到D
场景2:接口相应很慢
在这里插入图片描述

解决方法

(1)打日志:慢(可能不看懂其他人写的日志)
(2)ELK:可以解决,也是日志需要写入
(3)第三方链路追踪系统可以解决

链路追踪系统技术选型

java使用zipkin和skywalking比较多,而go使用jaeger多

zipkin jaeger skywalking
OpenTracing
客户端支持语言 java、c#、php、python等 java、c#、go、php、python等 java、.Net Core、NodeJS、PHP、python
存储 ES、Mysql、Cassandra内存 ES、kafka、Cassandra内存 ES、H2、mysql、TIDB、shard sphere
传输协议支持 http、MQ udp/http gRPC
ui丰富程度
实现方式-代码侵入式 拦截请求,侵入 拦截请求,侵入 字节码注入,无侵入
扩展性
trace查询 支持 支持 支持
性能损失
选择jaeger:官方支持jaeger
技术选型原则:
客户端支持、综合考虑、什么语言开发的

安装jaeger

docker run \
  --rm \
  --name jaeger \
  -p6831:6831/udp \
  -p16686:16686 \
  jaegertracing/all-in-one:latest

架构

在这里插入图片描述
Jaeger组成
1.Jaeger Client - 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent
2.Agent - 它是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给 collector。它被设计成一个基础组件,部署到所有的宿主机上。Agent 将 client library 和 collector 解耦,为 client library 屏蔽了路由和发现 collector 的细节。
2.Collector - 接收 jaeger-agent 发送来的数据,然后将数据写入后端存储。Collector 被设计成无状态的组件,因此您可以同时运行任意数量的 jaeger-collector。
3.Data Store - 后端存储被设计成一个可插拔的组件,支持将数据写入 cassandra、elastic search。
4.Query - 接收查询请求,然后从后端存储系统中检索 trace 并通过 UI 进行展示。 Query 是无状态的,您可以启动多个实例,把它们部署在 nginx 这样的负载均衡器后面。
分布式追踪系统发展很快,种类繁多,但核心步骤一般有三个:代码埋点,数据存储、查询展示
订单调用过程
在这里插入图片描述

添加jaeger

sudo go get github.com/jaegertracing/jaeger-client-go

发送span

package main

import (
	"time"

	"github.com/uber/jaeger-client-go"
	jaegercfg "github.com/uber/jaeger-client-go/config"
)

func main() {
   
	cfg := jaegercfg.Configuration{
   
		Sampler: &jaegercfg.SamplerConfig{
   
			Type:  jaeger.SamplerTypeConst,
			Param: 1, //[0,1] 0不采样1一直采样
		},
		Reporter: &jaegercfg.ReporterConfig{
   
			LogSpans:           true
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值