trace

Micro通过Wrapper实现了三种trace接口,aswxray,opencensus,opentracing,这里主要关注opentracing,opentracing已成为行业标准。

opentracing

要引入OpenTracing方案,只需要opentracing.NewClientWrapper加入Client或者Server即可。

func NewClientWrapper(ot opentracing.Tracer) client.Wrapper {
return func(c client.Client) client.Client {
return &otWrapper{ot, c}
}
}

opentracing.NewClientWrapper方法入参是实现OpenTracing的接口opentracing.Tracer

type Tracer interface {
StartSpan(operationName string, opts ...StartSpanOption) Span
Inject(sm SpanContext, format interface{}, carrier interface{}) error
Extract(format interface{}, carrier interface{}) (SpanContext, error)
}

jaeger

部署一个测试的jaeger,服务器地址:192.168.8.144,Agent的默认端口是5775。

/home/service/base/jaeger
[root@localhost jaeger]# ll
total 158444
-rwxr-xr-x 1 root root 14565068 Nov 16 19:35 example-hotrod
-rwxr-xr-x 1 root root 20387089 Nov 16 19:35 jaeger-agent
-rwxr-xr-x 1 root root 38456594 Nov 16 19:35 jaeger-all-in-one
-rwxr-xr-x 1 root root 29731462 Nov 16 19:35 jaeger-collector
-rwxr-xr-x 1 root root 25523281 Nov 16 19:35 jaeger-ingester
-rwxr-xr-x 1 root root 33563911 Nov 16 19:35 jaeger-query
-rwxr-xr-x 1 root root 43 Nov 16 19:36 run
-rw-r--r-- 1 root root 1939 Nov 16 19:36 x.log
[root@localhost jaeger]# cat run
nohup ./jaeger-all-in-one >> x.log 2>&1 &

jaeger是一款分布式的追踪系统,实现了opentracingAPI标准,也是Go生态的,是CNCF成员。

func TestJaeger(t *testing.T) {
cfg := config.Configuration{
ServiceName: "MicroTestService",//自定义服务名称
Sampler: &config.SamplerConfig{
Type: "const",
Param: 1,
},
Reporter: &config.ReporterConfig{
LogSpans: true,
BufferFlushInterval: 1 * time.Second,
LocalAgentHostPort: "192.168.8.144:5775",//jaeger agent
},
}
tracer, closer, err := cfg.NewTracer()
if err != nil {
t.Error(err)
return
}
defer closer.Close() r := mock.NewRegistry()
s := selector.NewSelector(selector.Registry(r)) c := client.NewClient(
// set the selector
client.Selector(s),
// add the trace wrapper
client.Wrap(NewClientWrapper(tracer)),
) req := c.NewRequest("test.service", "Test.Method", map[string]string{
"foo": "bar",
}, client.WithContentType("application/json")) var rsp map[string]interface{}
c.Call(context.TODO(), req, rsp)
t.Log(rsp)
}

浏览器访问:http://192.168.8.144:16686/search可以发现有服务MicroTestService的访问追踪了

Golang微服务:Micro Trace使用opentracing jaeger的更多相关文章

  1. golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布

    本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-mi ...

  2. golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

    micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...

  3. golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

    micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.s ...

  4. golang微服务框架go-micro 入门笔记2.4 go-micro service解读

    本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...

  5. golang微服务框架go-micro 入门笔记1.搭建 go-micro环境

    微服务的本质是让专业的人做专业的事情,做出更好的东西. golang具备高并发,静态编译等特性,在性能.安全等方面具备非常大的优势.go-micro是基于golang的微服务编程框架,go-micro ...

  6. golang 微服务以及相关web框架

    golang 中国gocn golang Applicable to all database connection pools xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常 ...

  7. 【GoLang】GoLang 微服务、开源库等参考资料

    参考资料: GoLang书籍: https://github.com/dariubs/GoBooksGo名库: https://github.com/Unknwon/go-rock-libraries ...

  8. 【GoLang】golang 微服务框架 go-kit

    golang-Microservice Go kit - A toolkit for microservices kubernetes go-kit_百度搜索 Peter Bourgon谈使用Go和& ...

  9. Golang微服务:Micro介绍

    官方文档地址 https://micro.mu/docs/index.html Tookit API HTTP接入网关.反向代理或将HTTP转为RPC请求调用后端服务 Web 一个web应用程序,默认 ...

随机推荐

  1. Lapack求解线性方程组

    可参见这两个页面: 1. http://www.culatools.com/dense/lapack/ 2. http://www.netlib.org/lapack/lug/node1.html 根 ...

  2. 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER

    HResults计算字错率(WER).句错率(SER) 前言 好久没发文,看到仍有这么多关注的小伙伴,觉得不发篇文对不住.确实好久没有输出经验总结相关的文档,抽了个时间,整理了下笔记,发一篇关于ASR ...

  3. MVP技术沙龙上海站-SQL BI

    5月,微软爱好者们齐聚一起,在上海港汇中心,参加<MVP技术沙龙上海站-SQL BI>系列讲座,下面是现场图片.  

  4. MATLAB中a(:)和." ' "," ' "

    今天继续学习matlab看书时发现了一行代码 a=a(:).'; 起初可能不懂就百度一下 a(:)可以将向量转换为列向量,行向量相当于直接转置,列向量不变 而如果是n*m维向量则仍然是以列为主,即按照 ...

  5. 关于javascript中arguments的一个很好的例子

    金克斯的迫击炮! 实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值 函数中的有隐式的不确定个数的参数,而我们在函数中将会用到它,很显然,这需要我们在 argum ...

  6. servlet(3)

    常见的网络访问后缀: - .html : 网页 - .htm : 网页 - .php : php技术实现的动态网页 - .jsp : Java Server pages Java代码+HTML代码实现 ...

  7. python修炼第二天

    第二天的课程还是塞得满满的,一天下来充实也疲惫.那天听出金星师傅嗓子有些沙哑,想必是讲课说话太多导致.啥也不说了.唯有努力练功方可回报! 1 序: 今天主要是详细学习了绝大部分的数据类型,字符编码,边 ...

  8. JS 判断两个时间的大小(可自由选择精确度:天,小时,分钟,秒)

    //可自由选择精确度 如:签到时间:2018-11-07 11:00:00 签退时间:2018-11-07 10:59:59 //判断时间先后 //统一格式 var a = $("#fdtm ...

  9. Altium Designer 使用小技巧2

    (a)在没画原理图,直接在PCB上绘制时需要将Tools/Preferences/PCB Editor/Interactiver Routing 中的Current Mode 中的选项选择为 Igno ...

  10. LeetCode 547 朋友圈

    题目: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的 ...