通過OpenTelemetry Go SDK為Go應(yīng)用添加自定義埋點(diǎn)
接入ARMS應(yīng)用監(jiān)控以后,ARMS探針將會(huì)對常見的Go組件進(jìn)行了自動(dòng)埋點(diǎn),因此不需要修改任何代碼,就可以實(shí)現(xiàn)調(diào)用鏈信息的采集。如果您需要在調(diào)用鏈信息中,體現(xiàn)業(yè)務(wù)方法的執(zhí)行情況,可以引入OpenTelemetry Go SDK,在業(yè)務(wù)代碼中增加自定義埋點(diǎn)。
前提條件
已為應(yīng)用安裝Golang探針。具體操作,請參見手動(dòng)安裝Golang探針。
步驟一:導(dǎo)入OpenTelemetry Go SDK
在main.go中添加import path。
import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/sdk/trace" )
在main.go中初始化Trace Provider。
func init() { tp := trace.NewTracerProvider() otel.SetTracerProvider(tp) }
步驟二:自定義埋點(diǎn)
埋點(diǎn)示例代碼如下:
for {
tracer := otel.GetTracerProvider().Tracer("")
ctx, span := tracer.Start(context.Background(), "Client/User defined span")
for i := 0; i < 3; i++ {
req, err := http.NewRequestWithContext(ctx, "GET", "http://otel-server:9000/http-service1", nil)
if err != nil {
fmt.Println(err.Error())
continue
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err.Error())
continue
}
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println(err.Error())
continue
}
time.Sleep(time.Millisecond * 10)
}
span.SetAttributes(attribute.String("client", "client-with-ot"))
span.SetAttributes(attribute.Bool("user.defined", true))
span.End()
time.Sleep(time.Millisecond * 10)
}
在for語句之前先獲取Tracer。
tracer := otel.GetTracerProvider().Tracer("")
在for循環(huán)開始時(shí)調(diào)用tracer.Start創(chuàng)建Span。
ctx, span := tracer.Start(context.Background(), "spanName")
如果希望這個(gè)Span是一個(gè)Root Span(例如在一個(gè)線程池中調(diào)用),代碼如下:
opts := append([]trace.SpanStartOption{}, trace.WithNewRoot()) ctx, span := tracer.Start(ctx, "spanName", opts...)
如果需要設(shè)置標(biāo)簽,可以在結(jié)束時(shí)調(diào)用span.End()。
span.SetAttributes(attribute.String("client", "client-with-ot")) span.SetAttributes(attribute.Bool("user.defined", true)) span.End()
步驟三:查詢調(diào)用鏈
在ARMS控制臺(tái)的 頁面單擊應(yīng)用名稱,然后單擊調(diào)用鏈分析頁簽,查看自定義埋點(diǎn)的調(diào)用鏈詳情。更多信息,請參見調(diào)用鏈分析。
相關(guān)文檔
您可以使用ARMS調(diào)用鏈分析的錯(cuò)/慢Trace分析功能,定位系統(tǒng)或應(yīng)用產(chǎn)生錯(cuò)、慢調(diào)用的原因。更多信息,請參見通過錯(cuò)/慢調(diào)用鏈排查應(yīng)用產(chǎn)生異常的原因。