Visual Studio 2013

Application Insights による次世代開発

Charles Sterling

ここ数年、ソフトウェアを配布するペースが驚くほど早くなり、開発者はウォーターフォール型からアジャイル型へと進化し、絶えずリリースを行う今日のリズムに合わせています。このようなペースアップにより、適切かつ迅速で、より直接的なフィードバックがますます重要になります。最も重要なのは応答性です。そのため、意思決定者には、分析機能が統合され、タイムリーなデータをすぐにチーム全体で利用できるようにするツールが必要です。

Microsoft Application Insights は、新製品として Visual Studio 2013 と同時に発表されました。このツールは、ソフトウェアの配信に高いパフォーマンスが必要なチームが求めている、アプリで利用でき、パフォーマンスが高い、希望する配信機能を備えた一連のサービスです。

Application Insights が利用可能なのは運用面に限りません。このツールは、チーム間での情報の受け渡しをなくし、チーム全体の情報の流れを高速化するために、開発者や運用担当者が既に使用しているツール (Visual Studio や Visual Studio Online) に統合されます。その結果、チームのすべてのメンバーが必要な情報を簡単に入手できるようになります。

Application Insights は、Microsoft .NET Framework、Java、Microsoft Azure サービス、Web サイト、Windows ストア アプリ、および Windows Phone 8 アプリに組み込まれるサービスと連携するように設計されています。この完全なエンド ツー エンドの監視により、周囲と無関係な小さなデータだけでなく、アプリの動向を余すところなく取得できます。

Application Insights の概要

Application Insights は簡単に使い始められます。Application Insights のテレメトリを Web アプリ、Windows Phone アプリ、または Windows ストア アプリに追加するには、Visual Studio Gallery (aka.ms/aivsix、英語) にある Application Insights Tools for Visual Studio 拡張機能をダウンロードします。今後のバージョンの Visual Studio では、この余分な手順をなくす予定です。

Visual Studio 2013 の新しいプロジェクトの場合、新しいプロジェクトを作成するときに [Add Application Insights to Project] (Application Insights をプロジェクトに追加する) をクリックします (図 1 参照)。


図 1 Application Insights を Visual Studio 2013 の新しいプロジェクトに追加する

既存のアプリで Application Insights を使用する場合は、該当プロジェクトを右クリックし、[Add Applications Insights Telemetry to Project] (Applications Insights のテレメトリをプロジェクトに追加する) を選択します (図 2 参照)。


図 2 右クリックして Application Insights を既存のプロジェクトに追加する

Application Insights を追加すると、プロジェクトには、Visual Studio Online の Availability Monitoring (可用性の監視)、Performance Monitoring (パフォーマンスの監視)、および Usage Analytics Data (利用状況分析データ) へのショートカットを備えた 3 つの新しいノードが含まれるようになります (図 3 参照)。


図 3対応するプロジェクトに表示される新しいノード

利用状況の監視を実装する

新規プロジェクトまたは既存のプロジェクトに Application Insights を追加すると、Web アプリ、Windows ストア アプリ、および Windows Phone アプリでの利用状況の監視が自動的に有効になります。以前のバージョンの Visual Studio Web アプリや Visual Studio 以外の Web アプリに同じ機能を追加するには、JavaScript のブロックをアプリに挿入します。この JavaScript ブロックに取得するには、[Add Application] (アプリケーションの追加) をクリックするか (図 4 参照)、コントロール パネルに移動して [Get configuration keys and downloads] (構成キーおよびダウンロードを取得する) を選択します。


図 4 [Add Application] (アプリケーションの追加) をクリックして JavaScript ブロックを以前のバージョンのアプリに追加する

パフォーマンスの監視を実装する

Performance Monitoring (パフォーマンスの監視) という名前にはなっていますが、取得できる情報は大量で、パフォーマンス データだけではありません。例外、コール スタック情報、依存関係情報、オブジェクトの割り当て、基盤インフラストラクチャに関する情報などが通知されます。Microsoft Monitoring Agent (MMA) も、コード内の例外やパフォーマンスが低下している呼び出しについての IntelliTrace ログを自動的に収集します。ほとんどの場合、https://www.microsoft.com/ja-jp/download/details.aspx?id=40316にある MMA をインストールするだけでパフォーマンスの監視を有効にすることができます。

MMA をインストールすると、既定では、コンピューター上のすべての Web アプリが監視されます。この動作は、おそらく開発コンピューターでは理想的ですが、多くの Web アプリが稼働する運用サーバーには理想的ではありません。アプリの監視中は、MMA によって 5% 以上のパフォーマンスの低下が発生しないようにしてください。

後でアプリに追加した MMA を有効化するには、Windows PowerShell コマンドを使って手動で監視を有効にします。

Start-WebApplicationMonitoring -name "www.microsoft.com/games" -mode Monitor -outputchannel cloud

MMA および Visual Studio の今後のリリースでは、この手順をなくす予定です。

Java アプリケーションや Microsoft Azure アプリでもパフォーマンスの監視を有効にすることができます。パフォーマンスの監視を開始する最も簡単な方法は、前述の利用状況の監視を実装するのと同じで、Application Insights のポータルで [Add Application] (アプリケーションの追加) をクリックするだけです。

可用性の監視を実装する

Availability Monitoring (可用性の監視) は、実行しているプラットフォームとは関係なく、Web アプリに対して機能します。条件はインターネット経由でアクセスできることだけです。世界中から Web アプリの可用性とパフォーマンスをテストできます。このモジュールも簡単に開始できます。

Application Insights 内の [Availability] (可用性) メニューを選択すると、Web アプリの URL の指定を求めるメッセージが表示されます。URL を入力すると、単一の監視場所で URL ベースのシンプルな統合モニターが作成されます。

高度なトランザクションを監視する必要がある場合は、おそらく Visual Studio でコーディングした Web パフォーマンス テストを使用する方が適切です。この統合モニターは、Web アプリのロード テストに一般的に使用されるものと同じレコード記録機能に基づきます。これを使用すると、複雑な一連のアクションをテストできます。単一の URL または複数手順の統合モニターを作成するには、新しい統合モニターを追加する緑色のアイコンをクリックし、目的の設定を構成します (図 5 参照)。


図 5 新しい統合モニターの設定を構成する

Application Insights を機能させる

過去 1 年間にわたり、公式 Technical Adoption Program の一環として、マイクロソフト社内チームや外部の業界専門家が 100 名近く Application Insights の初期バージョンを試してフィードバックを提供してきました。Application Insights を試した方々が明らかにしたいくつかの事象、特に、製品担当者や技術チーム以外のメンバーから強い興味や関心が寄せられたことに、開発チームは驚きました。

この早期導入者たちは、Visual Studio Online の 1 つの場所に分析情報をすべて集約することで、開発サイクルの速度を高めることができるという Application Insights の重要な価値に同意しました。

Web キャンペーンの測定: 最初に Application Insights に目を向けた社外の顧客は、トレーニングおよびコンサルティング企業の Wintellect でした。同社は、新しいオンデマンド トレーニング製品の WintellectNOW に関するコースの説明の効果について把握することを望んでいました。

Wintellect の開発者は、Application Insights のページ ビュー レポート機能を使用することで、次のように JavaScript 関数を [Sign Up Now] (今すぐ登録) ボタンに追加することができました。

function trackCourse()
 {
   window.__da.trackEvent("Course",
      window.location.hostname +
      window.location.pathname,
      {"CourseID": "Test401"},
      {"RatingValue": 400});
 }

これにより、どのコースの説明が実際に登録のきっかけとなったかを測定して表示することができるようになりました。Application Insights でのカスタム イベントの実装の詳細については、aka.ms/aijs(英語) を参照してください。

グローバル Web トラフィックの測定: Wintellect は、スペインのマドリードで開催される TechEd 2013 Europe への出展を計画していました。ビジネス スタッフは、会社の出展によってヨーロッパ市場での自社製品の知名度が向上するかどうかを簡単に測定できる方法を望んでいました。

同社は、Application Insights を使用して利用状況レポートをセットアップし、TechEd 出展前 1 週間と出展後 1 週間の知名度を比較しました。ヨーロッパからのトラフィックは 7% 増加し、スペインからのトラフィックは倍増しました。同社では、特別に開発者の手を借りなくてもこのような結果を測定できたので、技術チームは製品開発に専念できました。

発見、解決、リリースの効率を上げる

マイクロソフトでも、Application Insights が稼働しています。マイクロソフトの主要 Web サイトやホームページを担当しているサービス エンジニアは、毎日 400 個以上のアプリを管理しています。最重要項目は、問題を発見して解決に取り掛かるまでの時間を短縮することです。Application Insights でダッシュボードと通知をセットアップすることで、可用性テストの失敗、パフォーマンス イベントの失敗、またはパフォーマンス指標の低下といった問題をリアルタイム通知で受け取ります。これにより、顧客が異変に気付く前に、エンジニアが問題を解決できます。

あるチームは、許容最大数のランタイムを指定して可用性モニターをセットアップし、しきい値を超えた時点を示す通知を設定しました。エンジニアは、直接 Web ビュー内から失敗の原因を突き止めることができます。あるいは、Visual Studio に Web ビューをインストールして Web テストの結果として表示することもできます。統合監視 (Synthetic Monitors) レポートは、このようなテストを配置後のみに開始するよう指示します。その後、新たな配置を行っても引き続き機能します。約 4 時間後に、11 件の構成変更が行われました。エンジニアは、実際のコードおよび構成の変更を直接さかのぼって、可用性の問題を結びつけることができました。これは、事象の根本的原因をすぐに診断することに役立ちました。

Application Insights では、テストが通知を生成する前でもアプリを最適化することができます。ダッシュボードには、Active Alerts (アクティブな通知)、Exception Events (例外イベント)、Performance Events (パフォーマンス イベント)、Memory Events (メモリ イベント)、および Performance (パフォーマンス) と Reliability (信頼性) のグラフが表示されます。これらのメトリックスはすべて、エンジニアリング チームが確認してアプリを改良するために利用できるわかりやすい情報を提供します。

どのタイルをクリックしても、行動を起こせるだけのデータが提供されます。たとえば、Application Insights ダッシュボード (図 6 参照) のパフォーマンス グラフをクリックすると、パフォーマンス ページ (図 7 参照) が表示されます。この例では、依存関係、Web サービス、および応答時間に強い相関関係があることを確認できます。


図 6 Application Insights ダッシュボード


図 7 Application Insights パフォーマンス ページ

ダッシュボードの [Memory Events] (メモリ イベント)、[Exception Events] (例外イベント)、[Perf Events] (パフォーマンス イベント) をクリックすると、イベント ページに移動します。イベント ページでは、メモリ診断セッションをフィルター処理、選択、および開いたり、IntelliTrace デバッグ セッションを開始したり、Visual Studio でイベントを引き起こした変更セットを表示したりできます。

まとめ

今回紹介したのは、開発チームが Application Insights を使用して運用チームとの連携を密接にし、優れたソフトウェアを迅速に提供するための方法の一例にすぎません。Application Insights には、Visual Studio Online (visualstudio.com) からアクセスできます。

今後の記事では、クラウド ベースのロード テストと Application Insights との統合について取り上げます。Web テストの作成に関する詳細については、https://msdn.microsoft.com/ja-jp/library/ms182552を参照してください。Application Insights による可用性の監視の詳細については、https://msdn.microsoft.com/ja-jp/library/dn481101を参照してください。

監視をコードに追加するのは簡単で、Visual Studio Online に密接に統合され、時間を節約できるため、間違いなくこのようなシナリオを一度確認してみて、Application Insights によって実現できることを理解してください。

Charles Sterlingは、マイクロソフトに勤務して 20 年になります。マイクロソフトに勤務する前は、ベーリング海で海洋哺乳類を調査する海洋生物学者として、アメリカの National Marine Fisheries に勤務していました。マイクロソフトの製品マネージャーとしてオーストラリアで 6 年間過ごした後、現在は Visual Studio 開発チームのシニア プログラム マネージャーとしてレドモンドに戻っています。連絡先は chass@microsoft.com(英語のみ) です。

この記事のレビューに協力してくれた次の技術スタッフに心より感謝いたします。
John Robbins は、Wintellect の共同設立者であり、ビジネスにおけるサービス側のコンサルティングおよびデバッグを統率しています。世界各地の開発者が人類史上最も困難なソフトウェアの問題の解決に使用できる手法を学習できるように、世界を股に掛けて Mastering .NET Debugging コースおよび Mastering Windows Debugging コースの教師を務めています。
Cheryl Hammond は ALM コンサルタントで、Northwest Cadence では Practices Team を統率しています。このチームは、開発者の環境が向上し、チームが強化され、優れたソフトウェアを配信できるように、アジリティ、アーキテクチャ、およびテストの実践手法に重点を置いています。