Azure での Web アプリケーションの監視

Azure App Service
Azure Log Analytics
Azure Monitor

このシナリオでは、使用できる監視サービスを扱い、複数のデータ ソースに使用できるデータフロー モデルについて説明します。 監視に関しては、多くのツールとサービスが Azure のデプロイメントで動作します。 このシナリオでは、使いやすいという理由のみで、そのまま利用できるサービスを選択します。 他の監視オプションについては、この記事で後述します。

Architecture

このアーキテクチャの Visio ファイルをダウンロードします。

データフロー

このシナリオでは、マネージド Azure 環境を使用してアプリケーション層とデータ層をホストします。 このシナリオのデータ フローは次のとおりです。

  1. ユーザーはアプリケーションと対話します。
  2. ブラウザーとアプリ サービスはテレメトリを出力します。
  3. Application Insights は、正常性、パフォーマンス、使用状況のデータを収集して分析します。
  4. 開発者と管理者は、正常性、パフォーマンス、および使用状況の情報を確認できます。
  5. Azure SQL Database はテレメトリを出力します。
  6. Azure Monitor は、インフラストラクチャのメトリックとクォータを収集して分析します。
  7. Log Analytics は、ログとメトリックを収集して分析します。
  8. 開発者と管理者は、正常性、パフォーマンス、および使用状況の情報を確認できます。

Components

  • Azure App Service は、マネージド仮想マシンにアプリケーションを構築し、ホストするための PaaS サービスです。 アプリケーションが実行される基礎となるコンピューティング インフラストラクチャは、自動的に管理されます。 App Service には、リソース使用量のクォータとアプリのメトリック、診断情報のログ、メトリックに基づくアラートの監視機能があります。 さらに、Application Insights を使用して、異なるリージョンのアプリケーションをテストするための可用性テストを作成することができます。
  • Application Insights は、開発者向けの拡張可能なアプリケーション パフォーマンス管理 (APM) サービスであり、複数のプラットフォームをサポートしています。 アプリケーションを監視し、パフォーマンスの低下や障害などのアプリケーションの異常を検出し、テレメトリを Azure portal に送信します。 Application Insights は、ログ、分散トレース、カスタム アプリケーションのメトリックにも使用できます。
  • Azure Monitor では、Azure のほとんどのサービスに対して、基礎レベルのインフラストラクチャのメトリックとログを提供します。 複数の方法でメトリックを操作できます。たとえば、Azure portal でメトリックをグラフ化したり、REST API でアクセスしたり、PowerShell や CLI を使ってクエリを実行したりできます。 また、Azure Monitor は、Log Analytics やその他のサービスにデータを直接提供します。そのサービスでは、そのデータのクエリを実行して、オンプレミス上やクラウド内の他のソースのデータと組み合わせることができます。
  • Log Analytics を使用すると、Application Insights で収集された使用状況およびパフォーマンスに関するデータと、アプリをサポートしている Azure Portal リソースの構成およびパフォーマンスに関するデータを関連付ける際に役立ちます。 このシナリオでは、Azure Log Analytics エージェントを使用して SQL Server 監査ログを Log Analytics にプッシュします。 Azure portal の Log Analytics ブレードでクエリを作成し、データを表示することができます。

シナリオの詳細

Azure のサービスとしてのプラットフォーム (PaaS) オファリングによって、コンピューティング リソースが自動的に管理されます。また、これによりデプロイの監視方法が変わります。 Azure には、それぞれが特定の役割を果たす複数の監視サービスが含まれています。 また、これらのサービスが組み合わされた包括的なソリューションを使用すれば、お使いのアプリケーションやそれらを使用する Azure リソースからテレメトリを収集、分析し、それに基づいて対処できます。

このシナリオでは、使用できる監視サービスを扱い、複数のデータ ソースに使用できるデータフロー モデルについて説明します。 監視に関しては、多くのツールとサービスが Azure のデプロイメントで動作します。 このシナリオでは、使いやすいという理由のみで、そのまま利用できるサービスを選択します。 他の監視オプションについては、この記事で後述します。

考えられるユース ケース

その他の関連するユース ケース:

  • テレメトリを監視するための Web アプリケーションのインストルメント化。
  • Azure 上にデプロイされているアプリケーションのフロントエンドおよびバックエンド テレメトリの収集。
  • Azure 上のサービスに関連するメトリックとクォータの監視。

考慮事項

以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。

オペレーショナル エクセレンス

オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「オペレーショナル エクセレンスの重要な要素の概要」を参照してください。

監視

推奨プラクティスは、開発中に Application Insights SDK を使用して Application Insights をご自身のコードに追加し、アプリケーションごとにカスタマイズすることです。 これらのオープンソースの SDK は、ほとんどのアプリケーション フレームワークで使用できます。 収集するデータを充実させて制御するには、テスト環境用と運用環境用の SDK の使用を開発プロセスに組み込む必要があります。 主な要件は、インターネットに面したアドレスでホストされている Applications Insights のインジェスト エンドポイントへの直接的または間接的な視線をアプリが持つことです。 これで、テレメトリを追加したり、既存のテレメトリ コレクションを充実させたりすることができるようになります。

ランタイムの監視も簡単に始めることができます。 収集されるテレメトリは、構成ファイルで制御する必要があります。 たとえば、Application Insights Status Monitor などのツールを使用して SDK を正しいフォルダーに配置し、適切な構成を追加して監視を開始するランタイム メソッドを含めることができます。

Application Insights と同様に、Log Analytics には、複数のソースのデータを分析するツール、複雑なクエリを作成するツール、特定条件下で事前のアラートを送信するツールが用意されています。 Azure portal でテレメトリを確認することもできます。 Log Analytics では、Azure Monitor などの既存の監視サービスに価値を追加し、オンプレミス環境を監視することもできます。

Application Insights と Log Analytics はどちらも Azure Log Analytics クエリ言語を使用しています。 また、クロスリソース クエリを使用して、Application Insights と Log Analytics によって収集されたテレメトリを単一のクエリで分析することもできます。

Azure Monitor、Application Insights、Log Analytics のすべてからアラートが送信されます。 たとえば、Azure Monitor は、CPU 使用率などのプラットフォーム レベルのメトリックについて通知します。一方、Application Insights は、サーバーの応答時間などのアプリケーションレベルのメトリックについて通知します。 Azure Monitor は、Azure アクティビティ ログの新しいイベントについて通知します。一方、Log Analytics は、使用するように構成されているサービスのメトリックまたはイベント データに関するアラートを発行できます。 Azure Monitor の統合アラートは、別の分類法を使用する、新しい Azure の統合アラート エクスペリエンスです。

代替

この記事では、一般的な機能に便利に使用できる監視オプションについて説明しますが、独自のログ メカニズムを作成するオプションなど、多くの選択肢があります。 推奨プラクティスは、ソリューションに階層を構築するときに監視サービスを追加することです。 ここでは、いくつかの拡張と代替案を紹介します。

詳細については、Azure Well-Architected Framework の「DevOps の監視」を参照してください。

スケーラビリティと可用性

このシナリオでは、監視のための PaaS ソリューションに焦点を当てています。これは、主に可用性とスケーラビリティが適切に処理され、サービス レベル アグリーメント (SLA) に基づいているからです。 たとえば、App Services には、その可用性を保証する SLA があります。

Application Insights は、1 秒あたりに処理できる要求の数について制限があります。 要求の制限を超えると、メッセージの調整が発生することがあります。 調整を回避するには、フィルター処理またはサンプリングを実装してデータ レートを減らします

ただし、実行しているアプリの高可用性については、開発者が考慮する必要があります。 たとえば、スケールの詳細については、基本的な Web アプリケーションのリファレンス アーキテクチャのスケーラビリティに関する考慮事項を参照してください。 アプリをデプロイしたら、Application Insights を使用して可用性を監視するテストを設定できます。

セキュリティ

セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの重要な要素の概要」を参照してください。

機密情報とコンプライアンスの要件は、データの収集、保持、および保存に影響します。 詳細については、Application InsightsLog Analytics のテレメトリの処理方法を参照してください。

セキュリティに関する次の考慮事項も適用されることがあります。

  • 開発者が独自のデータを収集したり、既存のテレメトリを充実させることができる場合は、個人情報の処理計画を立てます。
  • データのリテンション期間を考慮します。 たとえば、Application Insights はテレメトリ データを 90 日間保持します。 Microsoft Power BI、Continuous Export、または REST API を使用して、長期間アクセスするデータをアーカイブします。 ストレージ料金が適用されます。
  • Azure リソースへのアクセスを制限して、データへのアクセスと、特定のアプリケーションからテレメトリを表示できるユーザーを制御できます。 テレメトリの監視へのアクセスをロックする方法については、Application Insights のリソース、ロール、およびアクセス制御に関するページを参照してください。
  • アプリケーション コードの読み取り/書き込みアクセスを制御して、アプリケーションからのデータ インジェストを制限するバージョンまたはタグ マーカーをユーザーが追加しないようにするかどうかを検討します。 Application Insights では、個々のデータ項目がリソースに送信された後に制御できないため、ユーザーが任意のデータに対してアクセス権を持っている場合、個々のリソース内のすべてのデータにアクセスできます。
  • 必要に応じて、Azure リソースに対してポリシーまたはコスト管理を適用するためのガバナンス メカニズムを追加します。 たとえば、ポリシーやロールベースのアクセス制御などのセキュリティ関連の監視に Log Analytics を使用することや、ポリシー定義の作成、割り当て、管理に Azure Policy を使用することができます。
  • 潜在的なセキュリティの問題を監視し、Azure リソースのセキュリティ状態を一元的に確認するには、Microsoft Defender for Cloud の使用を検討してください。

コスト最適化

コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、コスト最適化の柱の概要に関する記事をご覧ください。

監視料金は即時に追加される可能性があります。 事前に価格設定を検討し、監視対象を把握し、各サービスに関連する料金を確認してください。 Azure Monitor には無料の基本的なメトリックが用意されていますが、Application InsightsLog Analytics の監視コストは、インジェストされるデータのサイズと実行するテストの数に基づいて変わります。

まず、料金計算ツールを使用してコストを見積もります。 予測されるデプロイに合わせてさまざまな価格オプションを変更します。

Application Insights のテレメトリは、デバッグ中やアプリの公開後に Azure portal に送信されます。 テスト目的であり、料金の請求を避けるため、限られた量のテレメトリが装備されています。 さらにインジケーターを追加するには、テレメトリの上限を上げることができます。 詳細については、「Application Insights におけるサンプリング」を参照してください。

デプロイ後に、パフォーマンス インジケーターの Live Metrics Stream を確認することができます。 このデータは保存されません (リアルタイムのメトリックは表示されます) が、テレメトリを収集して後で分析することができます。 Live Stream データの料金は発生しません。

Log Analytics では、サービスに取り込まれたデータがギガバイト (GB) 単位で課金されます。 毎月、Azure Log Analytics サービスにインジェストされる最初の 5 GB のデータは無料で提供されます。また、Log Analytics ワークスペース内のデータは、最初の 31 日間無料で保持されます。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパル作成者:

  • Shawn Gibbs | プリンシパル ソフトウェア エンジニア

パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。

次のステップ

独自の監視ソリューションを初めて構築する場合に役立つリソースを次に示します。