Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lambda Web Adapter + Echo の Go サーバーに Datadog AP...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Lambda Web Adapter + Echo の Go サーバーに Datadog APM を⼊れた話

Avatar for KOKUBUN Kota

KOKUBUN Kota

August 30, 2026

Other Decks in Programming

Transcript

  1. DATADOG APM LAMBDA WEB ADAPTER / ECHO / GO 2026-08-26

    JDDUG LT Lambda Web Adapter + Echo の Go サーバーに Datadog APM を⼊れた話 01 株式会社ウェザーニューズ / 國分 虎海太 (KOKUBUN Kota)
  2. WHO AM I ⾃⼰紹介 はじめまして!! 名前: 國分 虎海太 (こくぶん こうた)

    出⾝: 福島県 学部⾶び級卒業後に修⼠課程まで進み、2025年4⽉に 社会⼈デビューした24歳です 仕事: 株式会社ウェザーニューズ / モバイル‧ インターネット事業部 / バックエンドチーム 02 興味: SRE (オブザーバビリティ) / Go⾔語 バックエンド技術 初参加で緊張してます。野球やってました。エヴァ好きです。趣味は⾊々です。最近体重が増
  3. 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めっちゃ便利でした。あと、最近顔の脱⽑始めました
  4. DOUSHITE 試してみた結果 あれ... OrchestrionだとDatadog に何も出ない😭 コメントを付けてビルドし、デプロイして、Datadog コンソールを⾒た 書いたコードのサンプル //dd:span の形で書くとスパンが入る

    疑問に思ったこと - はちゃんとデータが送られているのに... func DoSomething(ctx context.Context, in string) error { // ... 処理 ... 明⽰的にライブラリを使って書いたやつ - Orchestrionってどうやってスパンとかの コードを⽣成してるんだろう } 04 分割キーボード Cornix にだんだん慣れてきたせいで普通の打てなくなりました
  5. 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 を付けた関数にはスパン⽣成 トレーサーの初期化も⽣成されている
  6. ROOT CAUSE 原因と修正 WithLambdaModeを⼿動でfalseにして解決 Orchestrionの機能ではここを補えなかった 01 Lambda環境で動くとLambdaModeが⾃動でtrueになる 02 Tracerを⾃分で初期化し、その際にfalseにした init()

    → main() の順に⾛るので、main()内の⼿動の Start が既定の Start を上書きする 06 最近herdr使ってます。AWS summitでDatadogのTシャツもらえませんでした😢