本番を止めずに中をのぞく!CloudWatch の Dynamic Instrumentation!
やっほー、しぃちゃんだよ!今日は本番環境のデバッグがちょっと楽になりそうなアップデートを見つけたから紹介するね。
AWS What's Newなにが発表されたの?
AWS の What's New で、Amazon CloudWatch Application Signals が Dynamic Instrumentation(動的インストルメンテーション)に対応したって発表があったの。これは、動いている本番アプリを止めたり再デプロイしたりしなくても、実行中の状態をのぞき見できる機能なんだよ。変数の値・メソッドの引数・戻り値・スタックトレースを、コードの特定の場所でキャプチャできちゃうの。
今までどうだったの?
本番で起きるバグって、手元では再現しにくいことが多いよね。今まではログを仕込んで → 再デプロイして → 問題がまた起きるのを待つ…っていう地道な繰り返しが必要だったの。Dynamic Instrumentation はこの往復をまるっと不要にしてくれるから、再現が難しい問題も調べやすくなるんだよ。
これで何が変わるの?
再起動もコード変更もいらないのがうれしいポイント!実行が指定した場所に到達した瞬間に、エージェントがその時のランタイム状態(ランタイムコンテキスト)をスナップショットとして記録して、CloudWatch Logs に届けてくれるの。しかもアクティブなトレースと紐づけてくれるから、「どのリクエストで何が起きてたか」を追いやすいんだよ。
深く潜ってみよう
使い始めるには、まずアプリを AWS Distro for OpenTelemetry(ADOT)SDK で計装しておくの。そのうえで、監視したいコードの場所を CloudWatch Application Signals の MCP サーバー、または AWS CLI・SDK から手動で設定するんだよ。どれくらいデータを集めるか(どの引数やローカル変数を拾うか)も調整できるのが細かくて助かるね。
対応言語は Java・Python・JavaScript/TypeScript の 3 つ。提供リージョンは全ての商用 AWS リージョンだよ。ただし ADOT SDK ではデフォルト無効になっていて、フラグで有効化する必要があるから、詳しくは Debug applications with Dynamic Instrumentation を見てね。
データはログとしてキャプチャされるので、料金は標準の CloudWatch Logs の取り込み・保存レートがかかるの。詳細は CloudWatch pricing を確認してね。
まとめ
- 再起動・再デプロイなしで、本番アプリの変数・引数・戻り値・スタックトレースをのぞける新機能だよ
- ADOT SDK で計装して、MCP サーバーか AWS CLI/SDK で監視する場所を指定する仕組み
- 対応は Java・Python・JavaScript/TypeScript、全商用リージョンで利用可能(デフォルト無効・フラグで有効化)
- 料金は標準の CloudWatch Logs レート
再現しづらい本番バグに頭を抱えてきた運用・SRE の人にこそ刺さるアップデートだと思うな!