示例代码地址:https://github.com/GOgf/gf/tree/master/example/trace/http
创新互联公司致力于成都做网站、成都网站制作,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择创新互联公司,就选择了安全、稳定、美观的网站建设服务!
package main
import (
"github.com/gogf/gf/contrib/trace/jaeger/v2"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/gtrace"
"github.com/gogf/gf/v2/os/gctx"
)
const (
ServiceName = "http-client"
JaegerUdpEndpoint = "localhost:6831"
)
func main() {
var ctx = gctx.New()
tp, err := jaeger.Init(ServiceName, JaegerUdpEndpoint)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
StartRequests()
}
func StartRequests() {
ctx, span := gtrace.NewSpan(gctx.New(), "StartRequests")
defer span.End()
ctx = gtrace.SetBaggageValue(ctx, "name", "john")
content := g.Client().GetContent(ctx, "http://127.0.0.1:8199/hello")
g.Log().Print(ctx, content)
}
客户端代码简要说明:
jaeger.Init
方法初始化Jaeger
。gtrace.SetBaggageValue(ctx, "name", "john")
方法设置了一个baggage
,该baggage
将会在该请求的所有链路中传递。不过我们该示例也有两个节点,因此该baggage
数据只会传递到服务端。该方法会返回一个新的context.Context
上下文变量,在随后的调用链中我们将需要传递这个新的上下文变量。g.Client()
创建一个HTTP
客户端请求对象,该客户端会自动启用链路跟踪特性,无需开发者显示调用任何方法或者任何设置。g.Log().Print(ctx, content)
方法打印服务端的返回内容,其中的ctx
便是将链路信息传递给日志组件,如果ctx
上下文对象中存在链路信息时,日志组件会同时自动将TraceId
输出到日志内容中。package main
import (
"github.com/gogf/gf/contrib/trace/jaeger/v2"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/net/gtrace"
"github.com/gogf/gf/v2/os/gctx"
)
const (
ServiceName = "http-server"
JaegerUdpEndpoint = "localhost:6831"
)
func main() {
var ctx = gctx.New()
tp, err := jaeger.Init(ServiceName, JaegerUdpEndpoint)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer tp.Shutdown(ctx)
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.GET("/hello", HelloHandler)
})
s.SetPort(8199)
s.Run()
}
func HelloHandler(r *ghttp.Request) {
ctx, span := gtrace.NewSpan(r.Context(), "HelloHandler")
defer span.End()
value := gtrace.GetBaggageVar(ctx, "name").String()
r.Response.Write("hello:", value)
}
服务端代码简要说明:
jaeger.Init
方法初始化Jaeger
。gtrace.GetBaggageVar(ctx, "name").String()
方法获取客户端提交的baggage
信息,并转换为字符串返回。启动服务端:
启动客户端:
可以看到,客户端提交的baggage
已经被服务端成功接收到并打印返回。并且客户端在输出日志内容的时候也同时输出的TraceId
信息。TraceId
是一条链路的唯一ID
,可以通过该ID
检索该链路的所有日志信息,并且也可以通过该TraceId
在Jaeger
系统上查询该调用链路详情。
在Jaeger
上查看链路信息:
可以看到在这里出现了两个服务名称:tracing-http-client
和tracing-http-server
,表示我们这次请求涉及到两个服务,分别是HTTP
请求的客户端和服务端,并且每个服务中分别涉及到2个span
链路节点。
我们点击这个trace
的详情,可以看得到调用链的层级关系。并且可以看得到客户端请求的地址、服务端接收的路由以及服务端路由函数名称。我们这里来介绍一下客户端的Atttributes
信息和Events
信息,也就是Jaeger
中展示的Tags
信息和Process
信息。
Attribute/Tag | 说明 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
otel.instrumentation_library.name | 当前仪表器名称,往往是当前span 操作的组件名称 | ||||||||||||||
otel.instrumentation_library.version | 当前仪表器组件版本 | ||||||||||||||
span.kind |
当前
| ||||||||||||||
status.code | 当前span 状态,0 为正常,非0 表示失败 | ||||||||||||||
status.message | 当前span 状态信息,往往在失败时会带有错误信息 | ||||||||||||||
hostname | 当前节点的主机名称 | ||||||||||||||
ip.intranet | 当前节点的主机内网地址列表 | ||||||||||||||
http.address.local | HTTP通信的本地地址和端口 | ||||||||||||||
http.address.remote | HTTP通信的目标地址和端口 | ||||||||||||||
http.dns.start | 当请求的目标地址带有域名时,开始解析的域名地址 | ||||||||||||||
http.dns.done | 当请求的目标地址带有域名时,解析结束之后的IP地址 | ||||||||||||||
http.connect.start | 开始创建连接的类型和地址 | ||||||||||||||
http.connect.done | 创建连接成功后的类型和地址 |
Event/Log | 说明 |
---|---|
http.request.headers | HTTP客户端请求提交的Header 信息,可能会比较大。 |
http.request.baggage | HTTP客户端请求提交的Baggage 信息,用于服务间链路信息传递。 |
http.request.body |
HTTP客户端请求提交的 |
http.response.headers | HTTP客户端请求接收返回的的Header 信息,可能会比较大。 |
http.response.body | HTTP客户端请求接收返回的Body 数据,可能会比较大,最大只记录512KB ,如果超过该大小则忽略。 |
HTTP Server
端的Attributes
含义同HTTP Client
,在同一请求中,打印的数据基本一致。
HTTP Server
端的Events
含义同HTTP Client
,在同一请求中,打印的数据基本一致。
网站名称:创新互联GoFrame教程:GoFrameHTTP示例-Baggage
文章转载:http://www.shufengxianlan.com/qtweb/news16/510916.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联