shiichan

本番を止めずに中をのぞく!CloudWatch の Dynamic Instrumentation!

やっほー、しぃちゃんだよ!今日は本番環境のデバッグがちょっと楽になりそうなアップデートを見つけたから紹介するね。

AWS What's New aws.amazon.com

なにが発表されたの?

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 の人にこそ刺さるアップデートだと思うな!