Slide 1

Slide 1 text

OrchestrionとErrorTracking Japan Datadog User Group Meetup#7 LT 2025/2/26 @sugar235711

Slide 2

Slide 2 text

2 sugar cat(@sugar235711) 仕事: SRE(オブザーバビリティ、インフラ構築) 興味: セキュリティ、パフォーマンスチューニング @sugar235711 @sugar-cat7

Slide 3

Slide 3 text

3 Datadogが提供するGoのコンパイル時計装ツール 2024年末にGA Orchestrionとは

Slide 4

Slide 4 text

4 Datadogが提供するGoのコンパイル時計装ツール 2024年末にGA Orchestrionとは

Slide 5

Slide 5 text

5 Datadogが提供するGoのコンパイル時計装ツール 2024年末にGA Orchestrionとは コンパイル時に dd-trace-goで提供されているライブラリによって計装される orchestrion.ymlを見るとtemplateが書いてある

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

7 現状はdd-trace/contrib配下のライブラリ群が大部分対応している Orchestrionとは

Slide 8

Slide 8 text

8 ● //dd:span等のアノテーションによって Tag付け/Custom Spanの生成を行う ● 内部はdd-traceによる実装なので USTを使用可能 ○ DD_SERVICEを指定しない場合は実行バイナリ名がサービス名となる ○ 基本は自前の手動計装の実装とマージされないので重複してスパンが生成さ れないように注意 (詳しくはOrchestrion.yml) Orchestrion基本的な使い方

Slide 9

Slide 9 text

9 ● DatadogにはAPMを使用したエラートラッキングの機能がある ○ Spanに対してerror.type/error.message/(error.stack)のAttributeがあると自動 的に利用可能になる (最近RootSpan以外もトラッキングされるようになった ?) ErrorTrackingについて

Slide 10

Slide 10 text

10 ● dd-trace-goのミドルウェア実装で ErrorTrackingに必要なAttributeが付与されな いものがあるので、明示的に RootSpanに対してErrorのAttributeを含める必要が ある(Panicも同様) Goの実装でErrorTracking利用する際の問題点

Slide 11

Slide 11 text

11 ● Orchestionではコールグラフをたどって `net/http`パッケージも自動的に計装され る(そのため、 RootSpanがnet/httpのSpanになってしまう ) ○ net/http.Server -> chi.Router -> handler(chiの場合) OrchestrionでErrorTracking利用する際の問題点

Slide 12

Slide 12 text

12 ● Orchestionではコールグラフをたどって `net/http`パッケージも自動的に計装され る(そのため、 RootSpanがnet/httpのSpanになってしまう ) ○ net/http.Server -> chi.Router -> handler(chiの場合) OrchestrionでErrorTracking利用する際の問題点 この状態であれば、 net/http.Server, chi.Routerそれぞれのサービスで ErrorTrackingを利用可能

Slide 13

Slide 13 text

13 ● DD_SERVICEを指定すると net/http<->Routerライブラリ間のサービスオーバーラ イドが解除されてしまい、 RootSpanしかErrorTrackingに現れなくなる OrchestrionでErrorTracking利用する際の問題点

Slide 14

Slide 14 text

14 ● DD_SERVICEを指定すると net/http<->Routerライブラリ間のサービスオーバーラ イドが解除されてしまい、 RootSpanしかErrorTrackingに現れなくなる OrchestrionでErrorTracking利用する際の問題点 この状態だと、 net/http.Server, chi.Routerが同一サービスと認識され、 同一サービス内の RootSpan(net/http)のみErrorTrackingで利用可能

Slide 15

Slide 15 text

15 ● 現状の回避策 OrchestrionでErrorTracking利用する際の問題点 サービス名をバイナリ名を動的で指定、 Routerのデフォルトのサービス名 +Base Serviceでエラートラッキング Orchestrion側の対応を待つ ・二重トレースを防ぐために、既にトレースされている ハンドラータイプを登録する機能を検討してくれている

Slide 16

Slide 16 text

16 Orchestrionでエラートラッキングも実装できる! まとめ