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

TelemetryAPIでLambda関数の外側を覗く

Avatar for Hiroshi Kato Hiroshi Kato
May 24, 2026
13

 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 をレイヤーに追加するだけ で同じことがで きる。