日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈路跟蹤-基本示例

單進(jìn)程示例

單進(jìn)程的鏈路跟蹤即進(jìn)程內(nèi)方法之間的調(diào)用鏈關(guān)系。這種場(chǎng)景的跟蹤沒(méi)有涉及到分布式跟蹤,比較簡(jiǎn)單,以該示例作為我們?nèi)腴T(mén)的一個(gè)例子吧。示例代碼地址:https://github.com/GOgf/gf/tree/master/example/trace/inprocess

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的瑞麗網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

Root Span

?root span?即鏈路中第一個(gè)?span?對(duì)象。在這里的單進(jìn)程場(chǎng)景中,往往需要手動(dòng)創(chuàng)建一個(gè)。隨后在方法內(nèi)部創(chuàng)建的?span?都會(huì)作為它的子級(jí)?span?。

在分布式架構(gòu)的服務(wù)間通信場(chǎng)景中,往往不需要開(kāi)發(fā)者手動(dòng)創(chuàng)建?root span?,而是由客戶端/服務(wù)端請(qǐng)求的攔截器來(lái)自動(dòng)創(chuàng)建。

創(chuàng)建?tracer?,生成?root span?:

func main() {
	var ctx = gctx.New()
	tp, err := jaeger.Init(ServiceName, JaegerUdpEndpoint)
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	defer tp.Shutdown(ctx)

	ctx, span := gtrace.NewSpan(ctx, "main")
	defer span.End()

	// Trace 1.
	user1 := GetUser(ctx, 1)
	g.Dump(user1)

	// Trace 2.
	user100 := GetUser(ctx, 100)
	g.Dump(user100)
}

上述代碼創(chuàng)建了一個(gè)?root span?,并將該?span?通過(guò)?context?傳遞給?GetUser?方法,以便在?GetUser?方法中將追蹤鏈繼續(xù)延續(xù)下去。

方法間Span創(chuàng)建

// GetUser retrieves and returns hard coded user data for demonstration.
func GetUser(ctx context.Context, id int) g.Map {
	ctx, span := gtrace.NewSpan(ctx, "GetUser")
	defer span.End()
	m := g.Map{}
	gutil.MapMerge(
		m,
		GetInfo(ctx, id),
		GetDetail(ctx, id),
		GetScores(ctx, id),
	)
	return m
}

// GetInfo retrieves and returns hard coded user info for demonstration.
func GetInfo(ctx context.Context, id int) g.Map {
	ctx, span := gtrace.NewSpan(ctx, "GetInfo")
	defer span.End()
	if id == 100 {
		return g.Map{
			"id":     100,
			"name":   "john",
			"gender": 1,
		}
	}
	return nil
}

// GetDetail retrieves and returns hard coded user detail for demonstration.
func GetDetail(ctx context.Context, id int) g.Map {
	ctx, span := gtrace.NewSpan(ctx, "GetDetail")
	defer span.End()
	if id == 100 {
		return g.Map{
			"site":  "https://GoFrame.org",
			"email": "john@goframe.org",
		}
	}
	return nil
}

// GetScores retrieves and returns hard coded user scores for demonstration.
func GetScores(ctx context.Context, id int) g.Map {
	ctx, span := gtrace.NewSpan(ctx, "GetScores")
	defer span.End()
	if id == 100 {
		return g.Map{
			"math":    100,
			"english": 60,
			"chinese": 50,
		}
	}
	return nil
}

該示例代碼展示了多層級(jí)方法間的鏈路信息傳遞,即是把?ctx?上下文變量作為第一個(gè)方法參數(shù)傳遞即可。在方法內(nèi)部,我們通過(guò)的固定語(yǔ)法來(lái)創(chuàng)建/開(kāi)始一個(gè)?Span?:

ctx, span := gtrace.NewSpan(ctx, "xxx")
defer span.End()

并通過(guò)?defer?的方式調(diào)用?span.End?來(lái)結(jié)束一個(gè)?Span?,這樣可以很好地記錄?Span?生命周期(開(kāi)始和結(jié)束)信息,這些信息都將會(huì)展示到鏈路跟蹤系統(tǒng)中。其中?gtrace.NewSpan?方法的第二個(gè)參數(shù)?spanName?我們直接給定方法的名稱即可,這樣在鏈路展示中比較有識(shí)別性。

效果查看

執(zhí)行完上面的程序后,終端輸出:

打開(kāi)?Jaeger UI?: http://localhost:16686/search,可以看到鏈路追蹤的結(jié)果:

點(diǎn)擊詳情可以查看具體信息,包括?span?的調(diào)用順序、調(diào)用關(guān)系,執(zhí)行時(shí)間軸,以及記錄一些?Attributes?和?Events?信息,極大的方便我們定位系統(tǒng)中的異常和發(fā)現(xiàn)性能瓶頸:

其中的?tracing-inprocess?是我們?tracer?的名稱,該名稱往往是服務(wù)名稱,由于我們這里只有一個(gè)進(jìn)程和一個(gè)?tracer?,因此這里只看得到一個(gè)服務(wù)名稱。其中的?main?為我們創(chuàng)建的?root span?名稱,其他的?span?為基于該?root span?創(chuàng)建的子級(jí)?span?。由于我們?cè)诔绦蛑姓{(diào)用了兩次?GetUser?方法,因此這里也展示了兩次?GetUser?方法的調(diào)用。每一次?GetUser?調(diào)用的內(nèi)部又分別去調(diào)用了?GetIndo?、?GetDetail?、?GetScores?三個(gè)方法,方法間的調(diào)用層級(jí)關(guān)系展示得非常清晰明了,并且每個(gè)方法的調(diào)用時(shí)長(zhǎng)都可以看得到。

關(guān)于其中每個(gè)?span?記錄的?Tags?和?Process?信息其實(shí)對(duì)應(yīng)了?OpenTelemetry?中的?Attributes?和?Events?信息,這些信息我們放到后續(xù)章節(jié)去詳細(xì)介紹。


文章題目:創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈路跟蹤-基本示例
當(dāng)前URL:http://www.5511xx.com/article/dphipgp.html