0x00 前言
前一篇文章 Kratos 源码分析:Tracing (一) 大致介绍了 Kratos 的 Opentracing 的实现,这篇文章看下如何在项目中使用 Tracing。
0x01 使用 zipkin 上报
上一节提到,如果需要使用 zipkin 方式上报 tracing 数据,则需要初始化时,执行 GlobalTracer
为 zipkin 方式,代码在 zipkin.Init()
方法 中,此一段代码就完成了神奇的功能,准确的说是 trace.SetGlobalTracer()
方法:
// Init init trace report.
func Init(c *Config) {
if c.BatchSize == 0 {
c.BatchSize = 100
}
if c.Timeout == 0 {
c.Timeout = xtime.Duration(200 * time.Millisecond)
}
// 设置全局 tracer 为 zipkin 方式
trace.SetGlobalTracer(trace.NewTracer(env.AppID, newReport(c), c.DisableSample))
}
上面这段代码中的 newReport
方法是使用 zipkin 初始化的方式,这样,我们的 Tracing 部分的上报接口就完全使用 zipkin 完成了,这就是接口统一的好处:
func newReport(c *Config) *report {
return &report{
rpt: http.NewReporter(c.Endpoint,
http.Timeout(time.Duration(c.Timeout)),
http.BatchSize(c.BatchSize),
),
}
}
业务代码嵌入
可以看 Zipkin
的协议上报实现,具体使用方式如下:
- 搭建可用
Zipkin
集群 - 在业务代码的
main
函数内进行初始化,如下:
import "github.com/bilibili/kratos/pkg/net/trace/zipkin"
func main(){
......
// 在代码中加入这行,表示使用 zipkin 方式上报 tracer 日志
zipkin.Init(&zipkin.Config{
Endpoint: "http://localhost:9411/api/v2/spans",
})
......
}
接下来,我们通过 RPC 和 HTTP 两种方式来分析下项目中如何调用 Tracing 逻辑。
0x02 Warden 的 RPC 调用链
0x03 Bm 的调用链(HTTP)
0x04 参考
- OpenTracing 语义标准规范及实现
- OpenTracing 语义标准
- 开放分布式追踪(OpenTracing)入门与 Jaeger 实现
- opentracing
- dapper
- bilibili 毛剑 - B 站微服务链路监控实践
- Open-zipkin:b3-propagation
FEATURED TAGS
Latex
gRPC
负载均衡
OpenSSH
Authentication
Consul
Etcd
Kubernetes
性能优化
Python
分布式锁
WebConsole
后台开发
Golang
OpenSource
Nginx
Vault
网络安全
Perl
分布式理论
Raft
正则表达式
Redis
分布式
限流
go-redis
微服务
反向代理
ReverseProxy
Cache
缓存
连接池
OpenTracing
GOMAXPROCS
GoMicro
微服务框架
日志
zap
Pool
Kratos
Hystrix
熔断
并发
Pipeline
证书
Prometheus
Metrics
PromQL
Breaker
定时器
Timer
Timeout
Kafka
Xorm
MySQL
Fasthttp
bytebufferpool
任务队列
队列
异步队列
GOIM
Pprof
errgroup
consistent-hash
Zinx
网络框架
设计模式
HTTP
Gateway
Queue
Docker
网关
Statefulset
NFS
Machinery
Teleport
Zero Trust
Oxy
存储
Confd
热更新
OAuth
SAML
OpenID
Openssl
AES
微服务网关
IM
KMS
安全
数据结构
hashtable
Sort
Asynq
基数树
Radix
Crontab
热重启
系统编程
sarama
Go-Zero
RDP
VNC
协程池
UDP
hashmap
网络编程
自适应技术
环形队列
Ring Buffer
Circular Buffer
InnoDB
timewheel
GroupCache
Jaeger
GOSSIP
CAP
Bash
websocket
事务
GC
TLS
singleflight
闭包
Helm
network
iptables
MITM
HTTPS
Tap
Tun
路由
wireguard
gvisor
Git
NAT
协议栈
Envoy
FRP
DPI
gopacket
Cgroup
Namespace
DNS
eBPF
GoZero
Gost
Clash
gopsutil
Linux
HIDS
ELKEID
XDP
TC
Systemd
netlink
Kernel