Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TelemetryAPIでLambda関数の外側を覗く
Search
Hiroshi Kato
May 24, 2026
7
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TelemetryAPIでLambda関数の外側を覗く
Hiroshi Kato
May 24, 2026
More Decks by Hiroshi Kato
See All by Hiroshi Kato
20260318_AIによるデザインレビュ〜「画像の美しさ」をスコアに変換する〜
kahiro
0
82
DurableExecutionを実装検証から理解する.pdf
kahiro
1
46
20260110_オンプレ思考からクラウドネイティブ思考への転換レシピ
kahiro
0
15
20251114_Amazon_Q_DeveloperでMCPを使う_最初の一歩__.pdf
kahiro
0
17
20250829_LambdaとStepFunctionsどちらを選ぶべき_コスト視点で考えてみる.pdf
kahiro
1
470
Step_Functions_をはじめよう_JSONataによる進化_.pdf
kahiro
2
160
20250706_AWSでランサムウェア対策_バックアップが最大の防御_.pdf
kahiro
0
400
20250701_VMwareワークロードのAWS移行を学ぶ.pdf
kahiro
0
150
20250412_JAWS-UG北陸新幹線.pdf
kahiro
0
130
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Curse of the Amulet
leimatthew05
1
13k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
610
The browser strikes back
jonoalderson
0
1.2k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
180
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
30 Presentation Tips
portentint
PRO
1
320
Writing Fast Ruby
sferik
630
63k
Transcript
TelemetryAPIでLambda関数の外側を覗く Media-JAWS × JAWS-UG 静岡支部 × 浜松支部 コラボ会 2026年5月22日(金)
TelemetryAPIでLambda関数の外側を覗く Media-JAWS × JAWS-UG 静岡支部 × 浜松支部 コラボ会 2026年5月22日(金)
自己紹介 加藤 寛士(かとう ひろし) • クラウドエンジニア • JAWS-UG 名古屋運営 •
AWS community builders(serverless) @Hircha12
Otel(OpenTelemetry)を初めて知る 「システムの内部を標準化された形式で観測できる」 カンファレンスで知ったこと ・OpenTelemetryはベンダー依存しないオブザーバビリティ標準規格 ・Traces / Metrics / Logsを同じ形式で収集できる ・DatadogやNewRelicも内部的にOTelを使っている
OpenTelemetryとは? オブザーバビリティ標準規格 主な概念 Traces:リクエストの全体の流れ Metrics:数値データ (CPU・レイテンシー) Logs:テキストログ (アプリケーション出力) 主なコンポーネント SDK:アプリに計測を埋め込む
Collector:データを受け取り ・加工・転送 Exporter:バックエンドへ送信 なぜ大事か ベンダーロックインしない Datadog・New Relicなどへ同じ コードで送信できる 「計測の仕方」を標準化し、アプリ・インフラが同じ形式でテレメトリーを出せるようになる
LambdaにTelemetryAPIがあった Lambdaのディベロッパーガイドを眺めていたところ…
TelemetryAPIとは?(概念図)
TelemetryAPIを使うと… 通常のLambda関数の実装からは「どこで何ミリ秒かかっているか」がわからない Lambda 関数から見えること ✓ 自分で出力したログ ✓ returnした結果 → 関数の「内側」しか見えない
→ 実行時間はCloudWatchLogsの Duration / Init Durationのみ (合計値・内訳なし) 実はLambdaはRuntimePlatform ✓ Runtimeの起動に何ms? ✓ importに何ms? → Lambda関数の「外側」で起きていることが CloudWatchLogsで見ることができない
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関数の「外側」で何が起きているかが分かる
TelemetryAPIでLambda関数の外側を観測 Lambda関数の変更は不要 Extension(レイヤー)を追加するだけで、Runtime内部が見えるようになる Lambda関数の外側にExtensionを追加 Collectorをレイヤーとして追加 TelemetryAPIでRuntime内部をサブスクライブ platformイベント(initStart / initReport /
runtimeDone など) functionログ(print() の出力)を同じ時系列で受信 各処理を個別に計測 INIT_START → Extension Init → Runtime Init → Module Import
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 で各処理の時間を個別に取得できる!どの処理が重いか特定できる
拡張機能の作り方 — 4ステップ
INITからSHUTDOWNまで、全Phaseが見える
INITからSHUTDOWNまで、全Phaseが見える
関数 × Collector × CloudWatch の関係
platformとfunctionとして受け取れる
Cold Start の内部構造
色々やってみて違いを見てみる • Memory変更でINITは短縮する? • ARM64で何が変わる? • boto3 importでINITはどれだけ増える?
と、思ったのですが、、、
ADOT???
ADOT
ADOT
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 のパイプラインを設定ファイルで自由に組み合わせられる
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 をレイヤーに追加するだけ で同じことがで きる。
学び TelemetryAPIを自分で動かしてみて、 LambdaとOpenTelemetryの理解が変わった。 • Lambdaは「関数を実行するもの」ではなくRuntimePlatform として動いている • 関数コードを一切変えずに、レイヤーを追加するだけで 内部観測できる •
OpenTelemetryは標準規格であり、利用可能なコレク ターが配布されている(自作しなくてもいい)