Azure 用 Snapshot Debugger のプレビューをリリース
執筆者: Dan Taylor (Senior Program Manager, Azure Tools)
このポストは、5 月 10 日に投稿された Introducing the Snapshot Debugger preview for Azure の翻訳です。
Snapshot Debugger を使用すると、運用環境の Azure アプリで例外が発生したときや、その他必要なときにスナップショットを取得することができます。スナップショットがあれば運用環境のアプリケーション トラフィックに影響を与えることなく、どのような異常が発生したかを正確に把握することができます。
Snapshot Debugger は Application Insights と Visual Studio に導入されたまったく新しい機能で、Web 開発者の皆様が Azure を使用する際に運用環境で起こった問題を短時間で解決できるようになります。
この記事では、まず .NET 向けの自動スナップショット機能のパブリック プレビュー (英語) について紹介し、次にインタラクティブな Snappoints 機能および Logpoints 機能の概要とプライベート プレビュー プログラムへのサインアップ (英語) についてご説明します。
運用環境で起きた問題の診断は困難
運用環境のサービスで問題が起きてほしいと考える人はまずいません。また、クラウドを利用するすべての人が、そのメリットであるスピードを活かしたいと考えています。開発者や DevOps エンジニアは標準的なツールとしてログやメトリックを使用しており、これらのツールは非常に便利ではありますが、それだけでは複雑な問題の根本原因になるようなバグをピンポイントで特定するのは難しいといえます。
クラウド上の問題を診断するには時間がかかると言われるのは、以下のような理由からです。
- さまざまな構成、データ、使用パターンで問題が発生する
- ローカルで使用しているデバッグ ツールと同じものをクラウドでは手軽に使用できない
- 運用環境では実際にサービスが提供されているため、操作できることが限られている
マイクロソフトは、20 年以上にわたって Visual Studio を開発してきた経験 (英語) から独自の方法でこの課題の解決に取り組んでいます。そうした経緯で今回リリースしたのが Snapshot Debugger です。
テレメトリによるトリガーでスナップショットを自動取得
Snapshot Debugger は運用環境向けに開発された新しいツールです。ログの確認では見つけにくい難しい問題も発見できるようになります。
今回リリースされたのはパブリック プレビュー版です。これを使用すると、運用環境内で例外が発生した場合に Application Insights で自動的にスナップショットが収集されます。
Microsoft.ApplicationInsights.SnapshotCollector (英語) NuGet パッケージをアプリに追加して、例外が収集されるように Application Insights を構成するだけで、例外が発生した場合に Application Insights ポータルに [Open Debug Snapshot] というリンクが表示されるようになります。
スナップショットを開くと、ポータルの軽量な表示エクスペリエンスで確認できます。このビューにはクラウドで実行される Visual Studio のデバッグ エンジンが使用されており、各フレームのコール スタックやローカル変数を調べることができます。
Visual Studio でのデバッグを忠実に再現
表示された変数から問題の根本原因をすぐに特定できることもありますが、問題についてきちんと理解するためにスナップショットをより詳細に調べることが必要になる場合もあります。Snapshot Debugger の機能を十分に活用するには、[Download Snapshot] をクリックして、運用環境から収集されたスナップショットとシンボル ファイルを含む .diagsession ファイルをダウンロードします。このファイルは、デバッガーでスナップショットのデータをソース コードと関連付けるために使用されます。
スナップショット ファイルを Snapshot Debugger 拡張機能 (英語) がインストールされている Visual Studio Enterprise 2017 で開くと、スナップショットを収集した時点のプロセスの状態が完全に再現されます。
Visual Studio では、デバッガーの機能をフルに活用して、例外が発生した瞬間のプログラムの状態を調査できます。ここでは、ダンプ デバッグのすべての機能を使用できます。
Snappoints と Logpoints でインタラクティブにスナップショットをデバッグ
ここまでは、すべてのユーザーの方に提供される機能について説明しました。このほかに、Build 2017 で披露した Snapshot Debugger の Snappoints および Logpoints のプライベート プレビュー プログラムへのサインアップ (英語) も開始されています。この機能は今年の夏にパブリック プレビューが開始される予定です。
例外の自動スナップショット取得も便利な機能ですが、稼働している状態を検証する場合もあります。Azure で実行されているアプリケーションに Visual Studio をライブ スナップショット デバッグ モードで接続することができます。このモードでは、ブレークポイント設定用の「余白」をクリックすると、運用環境でこの行のコードが実行されたときにスナップショットを収集するように Snappoints のトリガーが設定されます。
スナップショットは右側にイベント ログとして表示され、ダブル クリックする内容を確認できます。可能な場合には 1 つの要求から複数のスナップショットを収集できるように関連付けが利用されているため、時間の経過に伴う状態の変化を把握することができます。
問題が特定のユーザーにのみ影響を与えている場合や、特定条件下でのみ発生している場合、その問題を詳細に追跡することがあります。このようなときには、Snappoints の構成ボタンをクリックすると、スナップショットの収集をトリガーする式を入力して、容易に条件の設定を行うことができます。
不具合の内容によっては、完全なスナップショットは不要で、その代わりに時間の経過と共に変数の値がどのように変化したかを確認する必要がある場合もあります。このような場合は、構成ページで [Actions] チェックボックスをオンにして Logpoints を設定し、メッセージを確認することができます。
ログは出力ウィンドウに表示され、標準的なログ記録用 API が使用されるため、Application Insights などの標準的な監視およびログ記録ソリューションを利用できます。
運用環境クラウド用デバッガー
プロセスのスナップショット取得は高速 (10 ミリ秒程度) で実行されます。この処理では、ページがコピー オン ライトとして設定され、実行中のプロセスのシャドー コピーが作成されます。このため、メイン プロセスが実行中でユーザーにトラフィックを送信中でもメモリのオフライン分析が可能です。また、スナップショットはメモリのオーバーヘッドが小さく、メイン プロセスからメモリへの書き込みが実行されたときにのみメモリがコピーされます。
このスナップショット機能によりデバッグ エクスペリエンスの強化がさらに進み、ユーザー トラフィックに影響を与えることなく使い慣れたツールで必要なデータを取得して、問題の再現や根本原因の分析を行うことができます。Snapshot Debugger を実際に操作しているようすは、Build カンファレンスのビデオ (英語) でご覧いただけます。
プレビューを試してみる
今回のリリースは Snapshot Debugger の取り組みの第一歩に過ぎません。これらの機能や今後追加される機能をクラウドのスピードを活かした Azure でのデバッグに活用していただきたいと考えています。
Automatic Snapshots のパブリック プレビューは、Application Insights と Visual Studio ですぐにご利用いただけます。また、Snappoints および Logpoints のプライベート プレビューにサインアップ (英語) して、いち早くお試しください。