Share
Embed
Transcript
7 slides
-
DATADOG APM LAMBDA WEB ADAPTER / ECHO / GO 2026-08-26
JDDUG LT Lambda Web Adapter + Echo の Go サーバーに Datadog APM を⼊れた話 01 株式会社ウェザーニューズ / 國分 虎海太 (KOKUBUN Kota) -
WHO AM I ⾃⼰紹介 はじめまして!! 名前: 國分 虎海太 (こくぶん こうた)
出⾝: 福島県 学部⾶び級卒業後に修⼠課程まで進み、2025年4⽉に 社会⼈デビューした24歳です 仕事: 株式会社ウェザーニューズ / モバイル‧ インターネット事業部 / バックエンドチーム 02 興味: SRE (オブザーバビリティ) / Go⾔語 バックエンド技術 初参加で緊張してます。野球やってました。エヴァ好きです。趣味は⾊々です。最近体重が増 -
SETUP 今日の題材 Lambda 上の Go の API に APM を⼊れたい
Lambda Web Adapter で Echo を動かし、Datadog Lambda Extension でトレースを送る構成 計測を⼊れる2つのやり⽅があるらしい Tracer コードに明⽰的にスパンを書く。dd-trace-go ライブラリなどを使⽤。 やってみたこと - どちらの場合もDatadog Lambda Extensionを使う - ライブラリを使うときに WithLambdaModeをfalseにする 03 Orchestrion → ライブラリのコード内にコメントアウ 特定の形式に沿ったコメントを書く。ビルド時 に、Orchestrion⽤のビルドをする。 トとして書いてあった Orchestrionめっちゃ便利でした。あと、最近顔の脱⽑始めました -
DOUSHITE 試してみた結果 あれ... OrchestrionだとDatadog に何も出ない😭 コメントを付けてビルドし、デプロイして、Datadog コンソールを⾒た 書いたコードのサンプル //dd:span の形で書くとスパンが入る
疑問に思ったこと - はちゃんとデータが送られているのに... func DoSomething(ctx context.Context, in string) error { // ... 処理 ... 明⽰的にライブラリを使って書いたやつ - Orchestrionってどうやってスパンとかの コードを⽣成してるんだろう } 04 分割キーボード Cornix にだんだん慣れてきたせいで普通の打てなくなりました -
INVESTIGATION 調査 Orchestrion が⽣成したコードを読んでみた -work で⼀時ディレクトリを残し、-a で全パッケージを強制的に再ビルドする 中間ファイルを残してビルドする $ orchestrion
go build -work -a ./... 期待通りっぽく見える中間ファイル - コードが⼊っていた WORK=/tmp/go-build2384957348 自動生成されたコードの一例 func init() { __orchestrion_tracer.Start() } e := __orchestrion_echotrace.Wrap(echo.New()) 05 最近nvim使ってます //dd:span を付けた関数にはスパン⽣成 トレーサーの初期化も⽣成されている -
ROOT CAUSE 原因と修正 WithLambdaModeを⼿動でfalseにして解決 Orchestrionの機能ではここを補えなかった 01 Lambda環境で動くとLambdaModeが⾃動でtrueになる 02 Tracerを⾃分で初期化し、その際にfalseにした init()
→ main() の順に⾛るので、main()内の⼿動の Start が既定の Start を上書きする 06 最近herdr使ってます。AWS summitでDatadogのTシャツもらえませんでした😢