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
中文字幕在线观看欧美| 国产a级黄色大片| 国产人妻大战黑人20p| 91福利精品在线观看| 日本sm残虐另类| 91精品国产综合久久婷婷香蕉 | 国产视频精品免费播放| 日本一区高清不卡| 亚洲 欧美 变态 另类 综合| 福利欧美精品在线| 久久色在线视频| 精品国产一区二区三区四区在线观看 | 国产www在线| 日韩黄色大片| 亚洲一区二区中文在线| 国产精品678| 人妻精品久久久久中文字幕69| 少妇人妻偷人精品一区二区| 麻豆一区二区在线| 亚洲国产精品电影| 亚洲视频小说| 亚洲 欧美 日韩 综合| 图片小说视频色综合| 午夜精品123| 成人午夜两性视频| 亚洲狠狠婷婷综合久久久久图片| 国产情侣一区在线| 91麻豆国产香蕉久久精品| 久久亚洲国产精品成人av秋霞| 欧美在线观看www| 国产欧美久久久| 久久国产直播| 亚洲成人免费在线视频| 宅男一区二区三区| 欧美污视频久久久| 久久久久久久久久久久久久久久av| 亚洲精品视频大全| 亚洲高清在线一区| 国产精品理论片| 奇米4444一区二区三区| 欧美日韩一区二区区| 婷婷久久综合九色综合99蜜桃| 91免费国产在线观看| 久久91亚洲人成电影网站| 国产区二区三区| 成人美女视频| 91亚洲精品乱码久久久久久蜜桃| 欧美区在线播放| 中文字幕第22页| 中文幕av一区二区三区佐山爱| 久久久久久免费毛片精品| 久久久久久久999精品视频| 在线免费观看av网| 综合久久伊人| 国产精品高潮久久久久无| 国产精品久久久久一区二区| 日本黄色特级片| 偷窥自拍亚洲色图精选| 亚洲成av人综合在线观看| 亚洲最大成人在线| 久久久久久国产精品免费播放| 亚洲国产精品91| 91精品国产一区二区三区 | 国产二区精品| 欧美日本乱大交xxxxx| 一本色道久久99精品综合| 最近国语视频在线观看免费播放| 日韩国产在线观看| 国产午夜精品一区二区三区| 日韩在线xxx| 欧美大片1688网站| 国产精品久久久99| 成人久久久久爱| 欧美色图一区二区| 精品91在线| 国产婷婷色综合av蜜臀av| 成人免费观看视频在线观看| 韩国美女久久| 国产精品久久久久婷婷| 成人两性免费视频| 久久免费视频播放| 另类av一区二区| 在线看日韩av| jizzzz日本| 榴莲视频成人app| 偷拍一区二区三区| 欧美久久久久久| 中文字幕一区二区人妻| 国产一区二区h| 国色天香2019中文字幕在线观看| 国产一级二级在线观看| 欧美性感美女一区二区| 91精品国产综合久久精品 | 久久综合影音| 久久中文字幕国产| 成人性生活免费看| 国产精品88久久久久久| 亚洲福利视频二区| 一区二区在线播放视频| 亚洲精品一二三**| 日韩欧美在线免费| 9l视频自拍9l视频自拍| 亚州男人的天堂| 国产精品对白交换视频 | 伊人av成人| 人妻偷人精品一区二区三区| 国产日韩在线不卡| 99久久一区三区四区免费| 黄色一级视频免费看| 国产福利精品一区二区| 日本在线观看天堂男亚洲| 三上悠亚在线观看视频| 亚洲欧美春色| 久久亚洲电影天堂| 欧美特级黄色录像| 极品少妇一区二区三区| 这里只有精品在线观看| 艳妇乳肉豪妇荡乳xxx| 久久久久电影| 伊人伊人伊人久久| av无码av天天av天天爽| 欧美69视频| 中文字幕精品www乱入免费视频| 蜜桃色一区二区三区| 色综合天天综合网中文字幕| 国产丝袜精品第一页| 最好看的中文字幕| 久久久久久美女精品 | 亚洲国产最新| 精品久久久久久久久久久久久久久久久| av免费网站观看| 午夜先锋成人动漫在线| 欧美mv日韩mv国产网站app| 在线免费观看视频黄| 亚洲动漫在线观看| 亚洲精品美女免费| 人妻换人妻a片爽麻豆| 欧美一区二区| 美女av一区二区| 来吧亚洲综合网| 看片的网站亚洲| 国产精品jizz在线观看麻豆| 中日韩精品视频在线观看| 国产电影一区二区三区| 91久久国产综合久久91精品网站| 国产99久久久久久免费看| 国产亚洲一区二区在线观看| 久久精品99| 五月婷婷久久久| 懂色av影视一区二区三区| 免费观看国产精品视频| 国产精品白丝一区二区三区| 精品美女一区二区| 欧美丰满熟妇bbb久久久| 亚洲男女av一区二区| 麻豆国产va免费精品高清在线| 久草福利资源在线| 极品尤物av久久免费看| 91精品在线播放| 国产精品视频无码| 一区二区三区在线高清| 日本成人在线不卡| 国产精品黄网站| 亚洲国产精品久久| 亚洲午夜福利在线观看| 日韩一区欧美二区| 国产精品欧美风情| 国产又粗又黄又爽| 亚洲自拍偷拍九九九| 免费毛片网站在线观看| 亚洲精品蜜桃乱晃| 中文字幕一精品亚洲无线一区| 免费黄色在线网址| 国产乱子轮精品视频| 99国产在线视频| 午夜福利视频一区二区| 在线国产亚洲欧美| 亚洲精品手机在线观看| 国产综合自拍| 国产91色在线播放| 国产精品呻吟久久| 精品国产老师黑色丝袜高跟鞋| 毛片一区二区三区四区| 色爱综合网欧美| 欧美日韩ab片| 99久久久久久久久| 亚洲免费av观看| 少妇无码av无码专区在线观看| 国产精品视频一区二区三区四蜜臂| 在线观看精品国产视频| 国产suv一区二区三区| 99精品一区二区三区| 亚洲欧洲一二三| 精品欧美午夜寂寞影院| 国产一区二区三区视频| 中文字幕在线观看成人| 国产亚洲欧美在线| 91精品一区二区三区四区| 精品一区亚洲| 久精品免费视频| 中文字幕 人妻熟女| 亚洲自拍偷拍麻豆| 自拍偷拍一区二区三区四区| 国内精品久久久久久久97牛牛 | 欧美日韩在线观看免费| 91亚洲精品乱码久久久久久蜜桃 | 中文字幕在线观看国产| 亚洲成人av在线电影| 中文字幕第88页| 另类国产ts人妖高潮视频| 亚洲一区二区三区久久| 色婷婷综合久久久中字幕精品久久| 日韩色在线观看| 无码人中文字幕| 久久久久久久综合| 国产精品第157页| 日韩欧美网址| 清纯唯美日韩制服另类| 国产黄色av片| 欧美理论片在线| 90岁老太婆乱淫| 波多野结衣中文字幕一区| 手机在线视频你懂的| 禁断一区二区三区在线| 久久久这里只有精品视频| 中文字幕久久久久| 色偷偷88欧美精品久久久| 性活交片大全免费看| 国产剧情av麻豆香蕉精品| 亚洲人成人77777线观看| 你微笑时很美电视剧整集高清不卡| 欧美精品一区在线播放| 一区二区久久精品66国产精品| 91久久精品网| 亚洲精品乱码久久久久久久久久久久 | 欧美性感美女h网站在线观看免费| 永久av免费在线观看| 久久www免费人成看片高清| 午夜精品美女久久久久av福利| 亚洲精品亚洲人成在线| 国语对白做受69| 97超碰人人看人人| 在线观看 亚洲| 欧美色播在线播放| 亚洲欧美在线不卡| 91小视频在线免费看| 日本一级黄视频| 中文字幕免费一区二区| 96国产粉嫩美女| 国产区一区二| 欧美日韩国产成人在线| 99久久亚洲精品日本无码| 91精品国产福利| 国产日韩欧美在线观看视频| 亚洲精品视频在线看| 手机在线观看日韩av| 国产美女视频一区| 成人在线观看毛片| 亚洲三级色网| 欧美精品一区在线发布| 国产99久久精品一区二区300| 欧美亚洲日本网站| 欧美日韩免费观看视频| 夜夜嗨av一区二区三区四区| 亚洲精品国产无码| 欧美三级日本三级少妇99| 久久久久无码精品国产sm果冻 | 亚洲激情综合网| 日本50路肥熟bbw| 2014亚洲片线观看视频免费| 男人搞女人网站| 国产剧情一区二区三区| 国产美女永久无遮挡| 国产美女一区| 亚洲国产成人不卡| 午夜国产精品视频免费体验区| 亚洲最大福利网站| 另类春色校园亚洲| 国产精品爱啪在线线免费观看| 成人国产精品一区二区免费麻豆 | 国产美女18xxxx免费视频| 免费一级片91| 国产911在线观看| 亚洲久久在线| 日韩欧美在线一区二区| 午夜精品一区二区三区国产| 精品久久久久久国产| av在线不卡一区| 精品精品国产毛片在线看| 青草成人免费视频| 99久久久国产| 7m第一福利500精品视频| 欧美国产视频| 国语自产偷拍精品视频偷 | 国产jjizz一区二区三区视频| 综合久久给合久久狠狠狠97色| 亚洲少妇一区二区三区| 欧美高清在线一区| 337p日本欧洲亚洲大胆张筱雨 | 精品五月天久久| 91影院在线播放| 精品亚洲va在线va天堂资源站| 亚洲精品无码久久久久| 日韩欧美成人激情| 怡红院av久久久久久久| 日韩欧美的一区| 波多野结衣午夜| 亚洲福利在线观看| 亚洲专区第一页| 亚洲男人天堂古典| 亚洲国产精彩视频| 中文字幕视频一区二区在线有码| 午夜精品一二三区| 最近的2019中文字幕免费一页| 日韩中文字幕免费观看| 久久精品视频网站| 黄色精品视频| 91精品国产精品| 97久久超碰| 成人免费视频97| 成人羞羞网站入口| 久久av一区二区| 在线播放一区| 国产内射老熟女aaaa| 九一九一国产精品| 精品少妇无遮挡毛片| 91视频.com| www.555国产精品免费| 亚洲欧美日韩在线播放| 中文字幕欧美激情极品| 欧美天天综合色影久久精品| 久久综合色综合| 欧美videos中文字幕| 国产女人18毛片水真多| 综合国产在线视频| 国产第一精品| 国产精品丝袜久久久久久高清| 国产精品欧美在线观看| 麻豆一区区三区四区产品精品蜜桃| 韩日成人av| 欧美做暖暖视频| 国产白丝精品91爽爽久久| aaaaaaaa毛片| 亚洲欧美韩国综合色| 日韩av手机在线免费观看| 欧美午夜理伦三级在线观看| 国产精品久久久久久久久夜色| 日韩av中文字幕在线免费观看| 黄色一级大片在线免费看国产| 久久久www成人免费精品| 国产精品xxx| 国产精品久久77777| 神马久久一区二区三区| 久久久综合亚洲91久久98| 国产精品亚洲欧美| 99福利在线观看| 国产精品青草久久| 99自拍视频在线| 精品国产乱码久久久久久浪潮| 黄色aaa毛片| 欧美一区二区三区图| 国产一区网站| 亚洲精品二区| 国产资源在线一区| 亚洲国产日韩在线一区| 亚洲午夜免费视频| 国产香蕉视频在线| 亚洲日本中文字幕免费在线不卡| 久久电影tv| 国产色视频一区| 欧美视频官网| 无码人妻精品一区二区三区在线 | 天天av天天操| 亚洲永久精品国产| 国产成人无码一区二区三区在线| 亚洲美女又黄又爽在线观看| 成人全视频在线观看在线播放高清 | 国产精彩视频一区二区| 久久婷婷久久一区二区三区| 欧美三级视频网站| 欧美tickling网站挠脚心| 不卡av播放| 国产在线精品一区免费香蕉 | 国产精品1区2区在线观看 | 欧美一进一出视频| 捆绑调教美女网站视频一区| 日韩av成人网| 欧美性猛交一区二区三区精品| 国产又粗又猛又爽又黄91| 久久全国免费视频| 91日韩在线| 激情深爱综合网| 中文字幕中文在线不卡住| 精品一区二区三区四| 最近2019中文字幕大全第二页| 精品三级av在线导航| 一区二区三区的久久的视频| 93久久精品日日躁夜夜躁欧美| 国产又粗又猛又爽又黄的视频四季| 精品精品欲导航|