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

TelemetryAPIでLambda関数の外側を覗く

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Hiroshi Kato Hiroshi Kato
May 24, 2026
1

 TelemetryAPIでLambda関数の外側を覗く

Avatar for Hiroshi Kato

Hiroshi Kato

May 24, 2026

More Decks by Hiroshi Kato

Transcript

  1. OpenTelemetryとは? オブザーバビリティ標準規格 主な概念 Traces:リクエストの全体の流れ Metrics:数値データ (CPU・レイテンシー) Logs:テキストログ (アプリケーション出力) 主なコンポーネント SDK:アプリに計測を埋め込む

    Collector:データを受け取り ・加工・転送 Exporter:バックエンドへ送信 なぜ大事か ベンダーロックインしない Datadog・New Relicなどへ同じ コードで送信できる 「計測の仕方」を標準化し、アプリ・インフラが同じ形式でテレメトリーを出せるようになる
  2. TelemetryAPIを使うと… 通常のLambda関数の実装からは「どこで何ミリ秒かかっているか」がわからない Lambda 関数から見えること ✓ 自分で出力したログ ✓ returnした結果 → 関数の「内側」しか見えない

    → 実行時間はCloudWatchLogsの Duration / Init Durationのみ (合計値・内訳なし) 実はLambdaはRuntimePlatform ✓ Runtimeの起動に何ms? ✓ importに何ms? → Lambda関数の「外側」で起きていることが CloudWatchLogsで見ることができない
  3. TelemetryAPIで見える世界 Before:Lambda関数側の視点 API Gateway等から実行 ↓ lambda_handler() を書く ↓ CloudWatchLogs →

    Lambda =「関数を実行するもの」 → 遅ければ「コールドスタートが遅い」 としか言えなかった → 詳細な原因は語れず After:TelemetryAPIで見える世界 Lambda Runtime Environment └─ Extension Init(何ms?) └─ Runtime Init(何ms?) └─ Module Import(何ms?) └─ lambda_handler()(何ms?) → Lambda = RuntimePlatform → コールドスタートは複数処理の合計 → どの処理が重いか特定できる TelemetryAPI を使うことで、Lambda関数の「外側」で何が起きているかが分かる
  4. Lambdaの内部Phase 「Init Duration: 2,500ms」では内訳は不明だが、 Telemetry API なら各処理を個別計測できる INIT START 実行環境

    起動開始 → Extension Init 拡張機能 初期化 → Runtime Init ランタイム 起動 → Module Import import boto3 など実行 → INIT REPORT 初期化完了 レポート Lambda関数の実行ログにある Init Duration はこの全体合計のみ(内訳は不明) Telemetry API で各処理の時間を個別に取得できる!どの処理が重いか特定できる
  5. OpenTelemetry Collector とは? テレメトリーの収集・加工・転送を担うエージェント Receiver テレメトリーを受信 OTLP / HTTP /

    gRPC Processor 加工・バッファリング batch / memory_limiter Exporter バックエンドへ転送 Jaeger / OTLP / X-Ray 公式配布の 4 種類のビルド otelcol-otlp OTLP受信・送信のみ。超軽量 otelcol OSSとして標準的なコンポーネント入り otelcol-k8s otelcol + Kubernetes向け追加 otelcol-contrib 全コンポーネント入り。巨大だが何でもできる 自分でCollectorを作った意義 ✓ register → subscribe → HTTP受信 の流れが理解できた ✓ print() でそのままCloudWatchに流せた → でも本番で使うにはもっと考慮が必要… → AWS公式版を発見した! Receiver / Processor / Exporter のパイプラインを設定ファイルで自由に組み合わせられる
  6. ADOT — AWS が公式に配布する Collector AWS Distro for OpenTelemetry ADOT

    とは otelcol-contrib をベースに AWS向けコンポーネントだけを追加した軽量ビルド 同梱されているもの ・AWS X-Ray Exporter ・Amazon CloudWatch Exporter ・Amazon Managed Service for Prometheus ・AWS ECS / EKS リソース検出 配布形態 ・Lambda レイヤーとして追加可能 ✓ ・ECS / ECS Fargate / EC2 / EKS 対応 自作 vs ADOT 自作C ollector ADOT セキュリティ 自己責任 AWS検証済み AWS統合 自分で実装 同梱済み Lambda対応 レイヤー自作 公式レイヤーあり 保守 自分でアップデー ト AWSがサポート 結論:仕組みを理解するために自作したのは正解。本番では ADOT をレイヤーに追加するだけ で同じことがで きる。