91亚洲精品一区二区乱码_国产精品久久久久久久_精品国产91久久久久久老师_国产美女精品视频免费播放软件_日韩欧美国产成人_亚洲aⅴ网站_亚洲另类在线一区_黄毛片在线观看_久久久精品国产免大香伊 _北岛玲精品视频在线观看

您的位置:首頁 > 教程筆記 > 綜合教程

使用 OpenTelemetry 統(tǒng)一不同服務(wù)的范圍

2024-02-24 18:50:11 綜合教程 149

php小編小新今天為大家介紹一種強大的工具——OpenTelemetry,它可以幫助開發(fā)者在不同的服務(wù)中實現(xiàn)統(tǒng)一的范圍管理。在現(xiàn)代的分布式系統(tǒng)中,應(yīng)用程序通常由多個微服務(wù)組成,每個微服務(wù)都有自己的日志、指標和追蹤信息。OpenTelemetry提供了一種簡單而強大的方式來集成和管理這些信息,使得開發(fā)者能夠更好地理解和調(diào)試整個系統(tǒng)的性能和行為。無論是在本地開發(fā)環(huán)境還是在生產(chǎn)環(huán)境中,OpenTelemetry都能幫助開發(fā)者更好地理解和優(yōu)化他們的應(yīng)用程序。

問題內(nèi)容

我剛剛開始使用 opentelemetry,并為此創(chuàng)建了兩個(微)服務(wù):standardgeomap

最終用戶向standard服務(wù)發(fā)送請求,后者又向geomap發(fā)送請求以獲取信息,然后再將結(jié)果返回給最終用戶。我使用 gr電腦端 進行所有通信。

我已經(jīng)對我的功能進行了這樣的檢測:

對于標準

type standardservice struct {
    pb.unimplementedstandardserviceserver
}

func (s *standardservice) getstandard(ctx context.context, in *pb.getstandardrequest) (*pb.getstandardresponse, error) {

    conn, _:= createclient(ctx, geomapsvcaddr)
    defer conn1.close()

    newctx, span1 := otel.tracer(name).start(ctx, "getstandard")
    defer span1.end()

    countryinfo, err := pb.newgeomapserviceclient(conn).getcountry(newctx,
        &pb.getcountryrequest{
            name: in.name,
        })

    //...

    return &pb.getstandardresponse{
        standard: standard,
    }, nil

}

func createclient(ctx context.context, svcaddr string) (*gr電腦端.clientconn, error) {
    return gr電腦端.dialcontext(ctx, svcaddr,
        gr電腦端.withtransportcredentials(insecure.newcredentials()),
        gr電腦端.withunaryinterceptor(otelgr電腦端.unaryclientinterceptor()),
    )
}

對于地理地圖

type geomapservice struct {
    pb.unimplementedgeomapserviceserver
}

func (s *geomapservice) getcountry(ctx context.context, in *pb.getcountryrequest) (*pb.getcountryresponse, error) {

    _, span := otel.tracer(name).start(ctx, "getcountry")
    defer span.end()

    span.setattributes(attribute.string("country", in.name))

    span.addevent("retrieving country info")

    //...
    
    span.addevent("country info retrieved")

    return &pb.getcountryresponse{
        country: &country,
    }, nil

}

這兩個服務(wù)都配置為將其跨度發(fā)送到 jaeger 后端并共享幾乎相同的主要功能(評論中指出了細微的差異):

const (
    name        = "mapedia"
    service     = "geomap" //or standard
    environment = "production"
    id          = 1
)

func tracerProvider(url string) (*tracesdk.TracerProvider, error) {
    // Create the Jaeger exporter
    exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url)))
    if err != nil {
        return nil, err
    }
    tp := tracesdk.NewTracerProvider(
        // Always be sure to batch in production.
        tracesdk.WithBatcher(exp),
        // Record information about this application in a Resource.
        tracesdk.WithResource(resource.NewWithAttributes(
            semconv.SchemaURL,
            semconv.ServiceName(service),
            attribute.String("environment", environment),
            attribute.Int64("ID", id),
        )),
    )
    return tp, nil
}

func main() {

    tp, err := tracerProvider("localhost:14268/api/traces")
    if err != nil {
        log.Fatal(err)
    }

    defer func() {
        if err := tp.Shutdown(context.Background()); err != nil {
            log.Fatal(err)
        }
    }()
    otel.SetTracerProvider(tp)

    listener, err := net.Listen("tcp", ":"+port)
    if err != nil {
        panic(err)
    }

    s := gr電腦端.NewServer(
        gr電腦端.UnaryInterceptor(otelgr電腦端.UnaryServerInterceptor()),
    )
    reflection.Register(s)
    pb.RegisterGeoMapServiceServer(s, &geomapService{}) // or pb.RegisterStandardServiceServer(s, &standardService{})
    if err := s.Serve(listener); err != nil {
        log.Fatalf("Failed to serve: %v", err)
    }
}

當(dāng)我查看最終用戶對標準服務(wù)的請求生成的跟蹤時,我可以看到它正如預(yù)期的那樣,調(diào)用其geomap服務(wù):

但是,我沒有看到已添加到子范圍的任何屬性或事件(我在檢測 geomap< 的 getcountry 函數(shù)時添加了一個屬性和 2 個事件/em>)。

然而,我注意到這些屬性在另一個單獨的跟蹤中可用(在 jaeger 中的“geomap”服務(wù)下可用),其跨度 id 與標準服務(wù)中的子跨度完全無關(guān):

現(xiàn)在我期望的是有一個跟蹤,并查看與 標準 范圍內(nèi)的子范圍中的 geomap 相關(guān)的所有屬性/事件。如何從這里得到預(yù)期的結(jié)果?

解決方法

跨度上下文(包含跟蹤 id 和跨度 id,如“service instrumentation & 中所述)術(shù)語”)應(yīng)該從父跨度傳播到子跨度,以便它們成為同一跟蹤的一部分。

使用 opentelemetry,這通常是通過使用為各種庫(包括 gr電腦端)提供的插件來檢測代碼來自動完成的。
但是,在您的情況下,傳播似乎無法正常工作。

在您的代碼中,您將在 函數(shù)中啟動一個新范圍,然后在發(fā)出 請求時使用該上下文 ()。這是正確的,因為新上下文應(yīng)該包含父跨度的跨度上下文 ()。
但問題可能與您的 函數(shù)有關(guān):

func createclient(ctx context.context, svcaddr string) (*gr電腦端.clientconn, error) {
    return gr電腦端.dialcontext(ctx, svcaddr,
        gr電腦端.withtransportcredentials(insecure.newcredentials()),
        gr電腦端.withunaryinterceptor(otelgr電腦端.unaryclientinterceptor()),
    )
}

您正確使用了 在這里,這應(yīng)該確保上下文正確傳播,但不清楚何時調(diào)用此函數(shù)。如果在調(diào)用 函數(shù)之前調(diào)用它,則用于創(chuàng)建客戶端的上下文將包含來自 的跨度上下文。

為了進行測試,請嘗試確保在調(diào)用 函數(shù)之后創(chuàng)建客戶端,并且在整個請求中使用相同的上下文。

您可以通過將 直接傳遞給 函數(shù)來完成此操作,如 函數(shù)的修改版本所示:

func (s *standardservice) getstandard(ctx context.context, in *pb.getstandardrequest) (*pb.getstandardresponse, error) {
    newctx, span1 := otel.tracer(name).start(ctx, "getstandard")
    defer span1.end()

    conn, _:= createclient(newctx, geomapsvcaddr)
    defer conn.close()

    countryinfo, err := pb.newgeomapserviceclient(conn).getcountry(newctx,
        &pb.getcountryrequest{
            name: in.name,
        })

    //...

    return &pb.getstandardresponse{
        standard: standard,
    }, nil
}

現(xiàn)在,用于創(chuàng)建客戶端并發(fā)出 請求的上下文將包括來自 的跨度上下文,并且它們應(yīng)作為 jaeger 中同一跟蹤的一部分出現(xiàn)。

(一如既往,請檢查 和 等函數(shù)返回的錯誤,為簡潔起見,此處未顯示)。

此外:

另請檢查您的傳播器:確保您使用相同的上下文傳播器 在這兩個服務(wù)中,最好是 w3c tracecontextpropagator,這是 opentelemetry 中默認的。

您可以按如下方式顯式設(shè)置傳播器:

otel.settextmappropagator(propagation.tracecontext{})

將以上行添加到兩個服務(wù)中 函數(shù)的開頭。

確保傳遞元數(shù)據(jù):gr電腦端 攔截器應(yīng)自動從請求的元數(shù)據(jù)中注入/提取跟蹤上下文,但要仔細檢查以確保其正常工作。

在 函數(shù)中啟動跨度后,您可以記錄跟蹤 id 和跨度 id:

ctx, span := otel.tracer(name).start(ctx, "getcountry")
sc := trace.spancontextfromcontext(ctx)
log.printf("trace id: %s, span id: %s", sc.traceid(), sc.spanid())
defer span.end()

并在 函數(shù)中執(zhí)行相同的操作:

newCtx, span1 := otel.Tracer(name).Start(ctx, "GetStandard")
sc := trace.SpanContextFromContext(newCtx)
log.Printf("Trace ID: %s, Span ID: %s", sc.TraceID(), sc.SpanID())
defer span1.End()

如果上下文正確傳播,兩個服務(wù)中的跟蹤 id 應(yīng)該匹配。

相關(guān)推薦

  • C語言中如何正確使用scanf函數(shù)處理用戶輸入

    C語言中如何正確使用scanf函數(shù)處理用戶輸入

    標題:C語言中正確使用scanf函數(shù)進行用戶輸入的解析在C語言中,scanf函數(shù)是用來從標準輸入讀取數(shù)據(jù)的常用函數(shù)之一。它可以按照格式化字符串的要求,將用戶輸入的數(shù)據(jù)解析并賦值給變量。本文將介紹如何正

    綜合教程 2024-02-24 18:49:31 98
  • 示例及解析:C語言中scanf函數(shù)的輸入格式

    示例及解析:C語言中scanf函數(shù)的輸入格式

    C語言是一種十分重要的程序設(shè)計語言,很多初學(xué)者在學(xué)習(xí)和使用C語言的過程中,經(jīng)常會用到輸入函數(shù)scanf()。通過scanf()函數(shù),我們可以從用戶處獲取輸入數(shù)據(jù),然后將其存儲到指定的變量中。本文將介紹

    綜合教程 2024-02-24 18:49:25 84
  • 精通C語言函數(shù):全面解析常用函數(shù)的用法與原理

    精通C語言函數(shù):全面解析常用函數(shù)的用法與原理

    精通C語言函數(shù):全面解析常用函數(shù)的用法與原理摘要:C語言中的函數(shù)是實現(xiàn)代碼復(fù)用和模塊化的重要工具,也是程序設(shè)計中不可或缺的一部分。本文將全面解析常用函數(shù)的用法與原理,包括函數(shù)的定義、調(diào)用和返回值,以及

    綜合教程 2024-02-24 18:49:13 36
  • Python中strip  函數(shù)的用法

    Python中strip 函數(shù)的用法

    Python中strip()函數(shù)的用法及代碼示例Python中的strip()函數(shù)是用來去除字符串開頭和結(jié)尾的指定字符(默認為空格)的函數(shù)。它可以非常方便地處理字符串的處理和整理。本文將介紹strip

    綜合教程 2024-02-24 18:48:19 175
  • C語言中scanf函數(shù)的使用方法詳解

    C語言中scanf函數(shù)的使用方法詳解

    C語言中scanf函數(shù)的使用方法詳解及代碼示例C語言是一門廣泛應(yīng)用于各種軟件開發(fā)的編程語言,其中的輸入輸出函數(shù)在編寫程序時起著非常重要的作用。其中,scanf函數(shù)是C語言中用于讀取標準輸入的函數(shù)之一,

    綜合教程 2024-02-24 18:47:47 38
欧美 丝袜 自拍 制服 另类| 精品88久久久久88久久久| 欧美成人精品一区| 亚洲一区二区三区加勒比| 亚洲精品国产一区黑色丝袜| 免费欧美电影| 天堂久久一区二区三区| 色视频一区二区| 97在线视频精品| 大陆极品少妇内射aaaaa| 国产九色在线播放九色| 国产在线观看91一区二区三区| 久久免费美女视频| 中文字幕av一区二区| 黄色www在线观看| 青娱乐国产视频| crdy在线观看欧美| 成人一区二区三区视频在线观看 | 成人一对一视频| 天天干在线播放| 日韩啪啪电影网| 亚洲一区二区在线免费观看视频| 久久久久久有精品国产| 88av.com| 中文字幕一区二区三区免费看| 久久久久久久久久久妇女| 亚洲午夜免费福利视频| 国产精品18久久久久久麻辣| 亚洲精品免费一区亚洲精品免费精品一区| 99视频国产精品免费观看a| 宅男噜噜噜66一区二区| 欧美日本视频在线| 国产精品久久久久久久久久久久午夜片| 特级西西人体wwwww| 国产精品麻豆成人av电影艾秋| 久久国产精品久久久久久电车| 在线观看亚洲a| 成人免费91在线看| 先锋影音av在线| youjizz欧美| 国产精品麻豆99久久久久久| 久久精品2019中文字幕| 免费国产黄色网址| 91资源在线视频| 国产偷自视频区视频一区二区| 欧美日本在线一区| 麻豆成人在线播放| 69av.com| 天天久久综合| 色视频成人在线观看免| 国产精品日韩欧美一区二区三区 | 一卡二卡三卡四卡五卡| 345成人影院| 懂色av噜噜一区二区三区av| 中文字幕久久精品| 国产在线观看福利| 亚洲天堂狠狠干| 视频精品一区二区| 亚洲国产日韩一区| 国产专区在线视频| 国产日本精品视频| 久久99久国产精品黄毛片色诱| 亚洲国产精久久久久久| 欧美美女黄色网| 911美女片黄在线观看游戏| 亚洲承认在线| 日韩欧美久久久| 中文字幕中文字幕在线中一区高清| 国产无套丰满白嫩对白| 亚洲美女少妇无套啪啪呻吟| 欧美大片在线观看| 日本高清xxxx| 精品久久久免费视频| 国产专区综合网| 久久激情视频免费观看| 亚洲欧洲日本精品| 熟妇人妻一区二区三区四区| 成人亚洲精品久久久久软件| 欧美人交a欧美精品| 久久无码人妻一区二区三区| 视频一区在线| 一区二区在线观看免费视频播放| 91精品一区二区| 亚洲欧洲久久久| 成人一级毛片| 欧美三级日韩在线| 亚洲一区三区视频在线观看| 一级片在线免费观看视频| 激情五月激情综合网| 久久九九有精品国产23| 国产毛片久久久久久| 91精品久久久久久综合五月天| 亚洲最色的网站| 国内精品一区二区| 国产一级性生活| 99国产成+人+综合+亚洲欧美| 亚洲激情电影中文字幕| 成人久久久久久久久| 91亚洲视频| 久久久久久日产精品| 国产精品96久久久久久| 999久久久国产| 欧美成人69| 欧美mv日韩mv| 青青草视频在线免费播放 | av2014天堂网| 亚洲宅男一区| 欧美精品一二三区| 亚洲精品久久久久久久蜜桃臀| 天天插天天干天天操| 国产午夜久久久久| 国产日韩换脸av一区在线观看| 乱h高h女3p含苞待放| 亚洲视频日本| 亚洲一区二区福利| www.久久com| 亚洲视频分类| 欧美精品久久99久久在免费线 | 成人一区不卡| 日韩欧美中文字幕一区| 大陆极品少妇内射aaaaa| 亚洲国产福利| 中文字幕一区二| 国产精品久久久久久久久久久久冷| 中文字幕视频网| 国产精品伊人色| 91av在线免费观看视频| 国产又粗又长又黄的视频| 亚洲成人在线| 日韩在线播放av| 真人bbbbbbbbb毛片| 久久久五月天| 亚洲视频在线免费观看| 精品无码av一区二区三区不卡| 欧美禁忌电影| 91精品久久久久久久91蜜桃| 奇米精品一区二区三区| 97精品资源在线观看| 狠狠躁夜夜躁人人爽超碰91| 吴梦梦av在线| 99久久亚洲国产日韩美女| 亚洲综合色在线| 中文字幕一区二区三区最新| 三上悠亚亚洲一区| 亚洲丰满少妇videoshd| 伊人情人网综合| 香蕉视频成人在线| 亚洲自拍另类综合| 制服国产精品| 2019年精品视频自拍| 午夜国产精品影院在线观看| 国产对白在线播放| av在线播放一区| 一本久久a久久精品亚洲| 青青草视频在线视频| 在线免费成人| 欧美性猛交xxxxxxxx| 乱子伦视频在线看| 台湾色综合娱乐中文网| 欧美成人激情免费网| 婷婷激情小说网| 日韩电影一区| 国产亚洲精品久久久久久牛牛| 日韩综合第一页| 国产综合欧美| 蜜臀久久99精品久久久久久宅男| 欧美丰满美乳xxⅹ高潮www| 麻豆成人精品| 欧洲中文字幕国产精品| 国产精品国产三级国产专区52| 成人丝袜高跟foot| 99国产超薄丝袜足j在线观看 | 日韩av无码一区二区三区不卡| 在线一区电影| 九九精品在线视频| 免费在线视频观看| 久草这里只有精品视频| 国产剧情日韩欧美| 中文字幕乱码人妻无码久久| 国产精品素人视频| 亚洲视频小说| 五月亚洲婷婷| 亚洲国产又黄又爽女人高潮的| 青青草视频网站| 亚洲经典在线看| 欧美亚洲日本网站| 国产精品久久久久久人| 国产欧美一二三区| 欧美二区三区在线| 久久精品女人天堂av免费观看| 色av一区二区| 中文字幕在线视频一区二区三区| 亚洲乱码在线| 国语自产精品视频在线看抢先版图片| 国产精品99无码一区二区| 成人av资源在线观看| 另类视频在线观看+1080p| 日本韩国欧美| 欧美色窝79yyyycom| 久久久久久久高清| 国产在线欧美| 国产999在线观看| 久久久久久无码午夜精品直播| 国产精品视频你懂的| 99中文字幕在线观看| 亚洲视频国产| 亚洲欧美中文日韩在线v日本| 阿v天堂2014| 国产精品羞羞答答xxdd| 久久国产手机看片| 日韩美女在线| 亚洲国产欧美日韩精品| 老熟妇精品一区二区三区| 久久久噜噜噜| 99超碰麻豆| 国模无码一区二区三区| 色狠狠综合天天综合综合| 成年人网站av| 国产精品久久久亚洲一区| 国产日韩欧美影视| 丰满大乳国产精品| 色婷婷国产精品久久包臀| 中文字幕第22页| 久久综合狠狠| 国产厕所精品在线观看| 97人人做人人爽香蕉精品| 欧美mv日韩mv| 国产白丝一区二区三区| 99久久综合国产精品| 亚洲成人精品电影在线观看| 国内精品视频| 国产亚洲一级高清| 久久久久黄色片| 国产精品护士白丝一区av| 成人综合视频在线| 欧美日韩三级| 91av视频在线观看| 精品人妻少妇AV无码专区| 欧美色视频一区| 国产人妖在线观看| 蜜臀精品久久久久久蜜臀 | 免费看成人午夜电影| 欧美经典影片视频网站| 亚洲系列中文字幕| 大地资源高清在线视频观看| 久久久久久99精品| 黄www在线观看| 久久精品二区三区| 欧美一区二区三区四区五区六区| 日本精品影院| 欧洲亚洲免费视频| 久久久成人av毛片免费观看| 一本色道久久88精品综合| 久久精品五月天| 在线一区二区观看| 一本在线免费视频| 成人免费在线播放视频| 特黄特黄一级片| 国产白丝网站精品污在线入口| 日韩欧美视频免费在线观看| 狠狠色丁香久久综合频道| 成人免费视频网站| 欧美日韩一区二区三区四区不卡 | 亚洲欧美小视频| 亚洲综合成人在线视频| 波多野结衣加勒比| 久久久精品国产99久久精品芒果 | 国产在线|日韩| 精品精品国产国产自在线| 国产精品久久久久久免费免熟| 日韩欧美国产电影| 国产免费av一区二区| 91福利视频在线| 人人澡人人澡人人看| 亚洲成a天堂v人片| 美女久久久久久久久久| 国产精品美女久久久久久久网站| √天堂资源在线| 99久久er热在这里只有精品66| 国产精品亚洲二区在线观看| 国产综合久久久久影院| 国产情侣第一页| 久久经典综合| 国产又黄又爽免费视频| av不卡在线| 亚洲国产精品一区二区第一页| 91成人观看| 久久99精品久久久久久秒播放器| 日韩av专区| 国产精品久久久久免费| 日韩免费高清| 福利精品视频| 日韩欧美不卡| 国产欧美一区二区三区不卡高清| 九九热线有精品视频99| 91九色国产视频| 天天久久夜夜| 亚洲自拍偷拍色图| 久久99精品久久久久久园产越南| 成人做爽爽免费视频| 天天躁日日躁狠狠躁欧美| 国产在线视频91| 国产成人三级| 91亚洲精品丁香在线观看| 欧美伦理影院| 国语精品中文字幕| 国产精品97| 奇米精品在线| 亚洲黄色影片| 五月天男人天堂| 日本欧美久久久久免费播放网| 国产高清不卡无码视频| 麻豆国产一区二区| 97视频在线免费播放| 成人午夜视频在线| 一级黄色在线播放| 国产精品污网站| 国产精品亚洲无码| 亚洲电影第三页| 国产精品国产精品88| 欧美三级电影网| 亚洲 欧美 成人| 日韩激情在线视频| 99久久久国产精品无码网爆| 中文字幕9999| 日韩精品免费观看视频| 欧美孕妇与黑人孕交| 久久综合五月婷婷| www.成人av| 欧美成人tv| 六月婷婷激情网| 韩国精品免费视频| 91精品无人成人www| 国产日韩欧美激情| 少妇饥渴放荡91麻豆| 五月激情综合网| 中日韩精品视频在线观看| 日韩欧美美女一区二区三区| 国产露脸91国语对白| 久久久久北条麻妃免费看| 久久久久久久性潮| 国产精品免费电影| 欧美日韩中字| 亚洲免费视频一区| 免费高清不卡av| 亚欧美在线观看| 中文字幕中文字幕在线一区| 黄大色黄女片18免费| 欧美日韩一区二区三区免费看| 波多野结衣二区三区| 一区二区成人av| 日本精品久久| 91中文精品字幕在线视频| 女主播福利一区| 国产资源第一页| 福利一区二区在线| 国产十八熟妇av成人一区| 自拍偷拍福利视频| 日韩在线不卡视频| 日本久久伊人| 国产亚洲一区在线播放| 免费日韩一区二区| 美女少妇一区二区| 亚洲精品老司机| 日操夜操天天操| 亚洲欧美国产制服动漫| 国产伊人久久| 成人写真福利网| 亚洲国产专区| 久久人妻精品白浆国产| 国产精品理论片在线观看| 日本伦理一区二区三区| 欧美xxxx在线观看| 345成人影院| 成人h猎奇视频网站| 亚洲手机在线| 激情内射人妻1区2区3区| 成人免费在线播放视频| 亚洲一区二区91| 亚洲人成在线播放| 久久久精品区| 久久久久久久久一区二区| 蜜臀久久99精品久久久久宅男 | 麻豆精品网站| 一级黄色在线播放| 精品国产www| 亚洲人成电影网站色xx| 激情久久一区二区| 亚洲一区二区少妇| 国产农村妇女精品一二区| 中文字幕在线观看第三页| 中文字幕一区二区三区乱码在线| 久久精品第一页| 怡红院精品视频| 成人知道污网站| 亚洲图片小说在线| 91亚洲大成网污www| 刘亦菲国产毛片bd| 日韩精品在线视频美女| 北岛玲精品视频在线观看|