Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

dd-trace-goのtrace context propagation実装

Takato Fukui
November 20, 2024
210

dd-trace-goのtrace context propagation実装

GoのDatadog クライアントライブラリ DataDog/dd-trace-go のAPM機能が、どのように分散アプリケーション間でのspan紐付けを実装してるかについて

Takato Fukui

November 20, 2024
Tweet

Transcript

  1. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 dd-trace-goの 
 trace context propagation実装 
 Japan Datadog User Group Meetup#6
 2024/11/20
 Retty株式会社 
 福井 崇人/ソフトウェアエンジニア 

  2. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 DataDog/dd-trace-go 
 APM含むGoのDatadog クライアントライブラリ 
 https://github.com/DataDog/dd-trace-go 
 
 
 
 
 以降ではv1.69.1, デフォルト設定を前提とする 
 3

  3. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 trace context propagationとは 
 トレース情報を分散アプリケーションのある部分から別の部分 に渡すメカニズム 
 
 4

  4. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 trace context propagationをどう実現してるか 
 子spanを作るために必要な情報であるSpanContextを 
 HTTPの場合はヘッダーに載せる 
 
 
 
 gRPCの場合はMetadataに載せる (dd-trace-go.v1/contrib/google.golang.org/grpcの場 合)
 5

  5. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 概念図/HTTP 
 6
 Propagator HTTPHeadersCarrier Set ForeachKey http.Header spanContext traceId: XXX … x-datadog-trace-id: XXX … http.Header x-datadog-trace-id: YYY … spanContext traceId: YYY … Inject Extract
  6. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 概念図/gRPC 
 7
 Propagator MDCarrier Set ForeachKey metadata.MD spanContext traceId: XXX … x-datadog-trace-id: XXX … metadata.MD x-datadog-trace-id: YYY … spanContext traceId: YYY … Inject Extract
  7. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 Carrierとは 
 SpanContextを保持する 
 HTTPの場合のheader, gRPCの場合のMetadata 
 8

  8. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 Carrierとは 
 9
 https://github.com/DataDog/dd-trace-go/blob/v1.69.1/d dtrace/tracer/textmap.go
  9. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 Propagatorとは 
 SpanContextをCarrierにInjectしたり、Carrierから SpanContextにExtractするInterface 
 10
 https://github.com/DataDog/dd-trace-go/blob/v1.69.1/ddtrace/tracer/propagator.go
  10. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 実際にHTTPヘッダーに載せてるコード 
 11
 https://github.com/DataDog/dd-trace-go/blob/v1.69.1/ddtrace/tracer/textmap.go “x-datadog-trace-id” “x-datadog-parent-id” HTTPHeadersCarrier
  11. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 実際にHTTPヘッダーから抽出してるコード 
 12
 https://github.com/DataDogdd/-trace-go/blob/v1.69.1/ddtrace/tracer/textmap.go “x-datadog-parent-id” HTTPHeadersCarrier
  12. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 trace context propagationの流れ 
 13
 server1 HTTP client(dd-trace-go.v1/contrib/net/http) span SpanContext HTTPHeadersCarrier Propagator.Inject http.Header server2 HTTP server(dd-trace-go.v1/contrib/net/http) http.Header HTTPHeadersCarrier Propagator.Extract SpanContext span HTTP request
  13. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Copyright ©2024 Retty, Inc. 
 14
 Amazon SQSでもtrace context propagationは可能 
 (やる意義は別として)

  14. 2022.10
 2022.10〜 
 Retty登壇用テンプレート 
 Retty株式会社 名前なまえ 
 Copyright ©2024 Retty,

    Inc. 
 Thank you! 
 Copyright ©2024 Retty, Inc. 
 ありがとうございました!