次の方法で共有


Azure Monitor で仮想マシンを監視する: データの収集

この記事は、 Azure Monitor で仮想マシンとそのワークロードを監視するガイドの一部です。 Azure とハイブリッド仮想マシンに Azure Monitor エージェントをデプロイした後に、Azure Monitor でデータの収集を構成する方法について説明します。

この記事では、仮想マシンから最も一般的な種類のテレメトリを収集するためのガイダンスを提供します。 選択する正確な構成は、マシンで実行するワークロードによって異なります。 各セクションには、そのデータで使用できるログ検索アラートのサンプルが含まれています。

  • 仮想マシンから収集されたテレメトリの分析の詳細については、「Azure Monitor を使用した 仮想マシンの監視: 監視データの分析」を参照してください。
  • 仮想マシンから収集されたテレメトリを使用して Azure Monitor でアラートを作成する方法の詳細については、「Azure Monitor を使用した 仮想マシンの監視: アラート」を参照してください。

注意

このシナリオでは、Azure とハイブリッド仮想マシン環境の完全な監視を実装する方法について説明します。 最初の Azure 仮想マシンの監視を開始するには、 Azure 仮想マシンの監視に関するページを参照してください。

データ収集ルール

Azure Monitor エージェントからのデータ収集は、Azure サブスクリプションに格納され、仮想マシンに関連付けられている 1 つ以上の データ収集規則 (DCR) によって定義されます。

仮想マシンの場合、DCR は収集するイベントやパフォーマンス カウンターなどのデータを定義し、そのデータの送信先の Log Analytics ワークスペースを指定します。 DCR では、 変換を 使用して不要なデータを除外したり、計算列を追加したりすることもできます。 1 台のマシンを複数の DCR に関連付けることができ、1 つの DCR を複数のマシンに関連付けることができます。 DCR は、関連付けられているすべてのマシンに配信され、そこで、Azure Monitor エージェントがこれらを処理します。

データ収集ルールを表示する

Azure サブスクリプションの DCR は、Azure portal の [モニター] メニューの [データ収集ルール] から表示できます。 DCR は、Azure Monitor の他のデータ収集シナリオをサポートしているため、すべての DCR が仮想マシン用であるとは限りません。

Azure portal の DCR を示すスクリーンショット。

データ収集ルールを作成する

DCR を作成する方法は、データ収集シナリオに応じて複数あります。 一部のケースでは、Azure portal が構成のガイドを示します。 その他のシナリオでは、DCR を直接編集する必要があります。 VM の分析情報を構成すると、事前に構成済みの DCR が自動的に作成されます。 以降のセクションでは、収集する一般的なデータとデータ収集の構成方法について説明します。

場合によっては、 既存の DCR を編集 して機能を追加する必要があります。 たとえば、Azure portal を使用して、Windows または Syslog イベントを収集する DCR を作成できます。 次に、その DCR に変換を追加し、収集しないイベントの列をフィルター処理するとします。

環境が成熟し、複雑になるにつれて、DCR を整理して管理を支援するための戦略を実装する必要があります。 さまざまな戦略に関するガイダンスについては、「 Azure Monitor でのデータ収集ルールの作成と管理のベスト プラクティス」を参照してください。

コストの管理

Azure Monitor のコストは、収集するデータの量によって変わるため、監視要件を満たすために必要とする以上のデータを収集しないようにしてください。 構成は、予算と、仮想マシンの運用について必要とする分析情報の量のバランスをとって設定します。

ヒント

Azure Monitor のコストを削減する方法については、コストの 最適化と Azure Monitor に関するページを参照してください。

一般的な仮想マシンは、毎月 1 GB から 3 GB のデータを生成します。 このデータ サイズは、マシンの構成、マシンで実行されるワークロード、および DCR の構成によって異なります。 仮想マシン環境全体のデータ収集を構成する前に、一部の代表的なマシンで収集を開始して、環境全体にデプロイしたときに予想されるコストをより適切に予測します。 コンピューターごとのデータ ボリュームLog Analytics ワークスペース分析情報またはログ クエリを使用して、各マシンに対して収集される課金対象データの量を決定し、それに応じて調整します。

収集したデータを評価し、次の条件を満たすデータを除外してコストを削減します。 不要なデータをフィルター処理する方法は、収集するデータ ソースごとに異なる場合があります。 各一般的なデータ ソースの詳細については、以下のセクションを参照してください。

  • アラートには使用されません。
  • 既知のフォレンジックまたは診断値がありません。
  • 規制当局による要求はありません。
  • ダッシュボードまたはブックでは使用されません。

また、変換を使用して、より細かいフィルター処理を実装したり、小さな値を提供する列からデータをフィルター処理したりすることもできます。 たとえば、アラートには有用な Windows イベントに、冗長なデータまたは過剰なデータを含む列が含まれているとします。 この場合に、過剰なデータを削除した上で、イベントの収集を許可する変換を作成することができます。

データを Azure Monitor に送信する前に可能な限りフィルター処理して、 変換を使用して多すぎるデータをフィルター処理する場合に発生する可能性のある料金を回避します。 複雑なロジックを使用してレコードをフィルター処理したり、不要なデータを含む列をフィルター処理したりするには 、変換 を使用します。

既定のデータ収集

Azure Monitor は、その他の構成を必要とせずに、次のデータ収集を自動的に実行します。

プラットフォームのメトリック

Azure 仮想マシンのプラットフォーム メトリックには、CPU、ネットワーク、ディスク使用率などの重要なホスト メトリックが含まれます。 連絡先として指定できるもの:

アクティビティ ログ

アクティビティ ログは自動的に収集されます。 構成の変更や停止と開始のタイミングなどの、マシンの最近のアクティビティが含まれます。 Azure portal で、各仮想マシンのホストについて収集されたプラットフォームのメトリックとアクティビティ ログを表示できます。

個々のマシンまたはサブスクリプション内のすべてのリソースの アクティビティ ログを表示 できます。 このデータを Azure Monitor エージェントが使用するのと同じ Log Analytics ワークスペースに送信する診断設定を作成し、仮想マシン用に収集された他の監視データと共に分析します。 アクティビティ ログ データの取り込みや保持にはコストはかかりません。

Azure Resource Graph の VM の可用性に関する情報

Azure Resource Graph では、ログ クエリで使用されるのと同じ Kusto クエリ言語を使用して、リソース プロパティによる複雑なフィルター処理、グループ化、並べ替えを使用して Azure リソースに大規模にクエリを実行できます。 詳細な障害属性とダウンタイム分析のために 、Resource Graph に対する VM 正常性注釈 を使用できます。

収集されるデータとその表示方法については、「Azure Monitor を使用した 仮想マシンの監視: 監視データの分析」を参照してください。

VM の分析情報

VM Insights を有効にすると、次の情報を収集する MSVMI プレフィックス を持つ DCR が作成されます。 VM ごとに新しい DCR を作成するのではなく、この同じ DCR を他のマシンでも使用できます。

  • クライアント オペレーティング システムの一般的なパフォーマンス カウンターは、Log Analytics ワークスペースの InsightsMetrics テーブルに送信されます。 カウンター名は、オペレーティング システムの種類に関係なく、同じ共通名を使用するように正規化されます。

  • 収集するプロセスと依存関係を指定した場合、次のテーブルにデータが設定されます。

    • VMBoundPort: マシン上の開いているサーバー ポートのトラフィック
    • VMComputer: マシンのインベントリ データ
    • VMConnection: マシンとの間の受信接続と送信接続のトラフィック
    • VMProcess: マシンで実行されているプロセス

既定では、 VM の分析情報 では、プロセスと依存関係の収集を有効にしてデータ インジェスト コストを節約することはできません。 このデータはマップ機能に必要であり、依存関係エージェントのマシンへのデプロイも行います。 この機能を使用する場合は、このコレクションを有効にします

Windows と Syslog イベントの収集

仮想マシンのオペレーティング システムとアプリケーションは、多くの場合、Windows イベント ログまたは Syslog に書き込みます。 1 つのイベントが見つかったらすぐにアラートを作成することも、特定の時間枠内で一致する一連のイベントを待機することもできます。 時間の経過に伴う特定の傾向の特定や、問題発生後のトラブルシューティングの実行などの、その後の分析のためにイベントを収集することもできます。

Windows イベントと Syslog イベントを収集する DCR を作成する方法のガイダンスについては、「 Azure Monitor エージェントを使用したデータの収集」を参照してください。 最も一般的な Windows イベント ログと Syslog をイベント レベルでフィルター処理するファシリティを使用して、DCR をすばやく作成できます。

イベント ID などの条件によるより詳細なフィルター処理を行うには、 XPath クエリを使用してカスタム フィルターを作成できます。 DCR を編集して変換を追加することで、収集されたデータをさらにフィルター処理できます。

イベント収集の推奨される開始点として、次のガイダンスを使います。 DCR の設定を変更して、不要なイベントをフィルター処理で除外し、要件に応じてその他のイベントを追加します。

source 戦略
Windows イベント アラートをサポートするために、システム ログとアプリケーション ログの少なくとも重大エラー、および警告イベントを収集します。 情報イベントを追加して傾向を分析し、トラブルシューティングをサポートします。 詳細イベントはほとんど役に立つことはありません。通常は収集しないでください。
Syslog イベント アラートをサポートするために、施設ごとに少なくとも LOG_WARNING イベントを収集します。 情報イベントを追加して傾向を分析し、トラブルシューティングをサポートします。 LOG_DEBUG イベントはほとんど役に立ちませんが、通常は収集しないでください。

ログ クエリのサンプル: Windows イベント

クエリ 説明
Event すべての Windows イベント
Event \| where EventLevelName == "Error" 重大度が「エラー」のすべての Windows イベント
Event \| summarize count() by Source ソース別の Windows イベントの数
Event \| where EventLevelName == "Error" \| summarize count() by Source ソース別の Windows エラー イベントの数

ログ クエリのサンプル: Syslog イベント

クエリ 説明
Syslog すべての Syslog
Syslog \| where SeverityLevel == "error" 重大度がエラーであるすべての Syslog レコード
Syslog \| summarize AggregatedValue = count() by Computer コンピューターごとの Syslog レコードの数
Syslog \| summarize AggregatedValue = count() by Facility ファシリティごとの Syslog レコードの数

パフォーマンス カウンターを収集します。

クライアントからのパフォーマンス データは 、Azure Monitor メトリック または Azure Monitor ログのいずれかに送信でき、通常は両方の宛先に送信します。 VM の分析情報を有効にした場合、パフォーマンス グラフをサポートするために、一般的なパフォーマンス カウンターのセットがログに収集されます。 このカウンターのセットを変更することはできませんが、その他の DCR を作成してさらにカウンターを収集し、異なる宛先に送信することはできます。

ゲストのパフォーマンスを収集するために DCR を作成する理由は複数あります。

  • VM の分析情報を使っていないため、クライアントのパフォーマンス データがまだ収集されていない。
  • VM の分析情報が収集していないその他のパフォーマンス カウンターを収集します。
  • クライアント上で実行されている他のワークロードからパフォーマンス カウンターを収集する。
  • パフォーマンス データを Azure Monitor メトリック に送信し、メトリック ス エクスプローラーとメトリック アラートで使用できます。

パフォーマンス カウンターを収集する DCR の作成に関するガイダンスについては、「 Azure Monitor エージェントを使用して仮想マシンからイベントとパフォーマンス カウンターを収集する」を参照してください。 最も一般的なカウンターを使用して、DCR をすばやく作成できます。 イベント ID などの条件によるより詳細なフィルター処理を行うには、 XPath クエリを使用してカスタム フィルターを作成できます。

注意

パフォーマンスとイベントの収集を同じ DCR に結合することもできます。

宛先 説明
メトリック ホスト メトリックは、Azure Monitor メトリックに自動的に送信されます。 DCR を使用してクライアント メトリックを収集し、 メトリック ス エクスプローラー と共に分析したり、 メトリック アラートで使用したりできます。 このデータは 93 日間保存されます。
ログ Azure Monitor ログに格納されているパフォーマンス データは、長期間保存できます。 Log Analytics またはログ検索アラートログ クエリを使用して、データをイベント データと共に分析できます。 複数のマシン、リージョン、サブスクリプションにまたがる複雑なロジックを使用してデータを相互に関連付けることもできます。

パフォーマンス データは、次のテーブルに送信されます。
• VM 分析情報: InsightsMetrics
• その他のパフォーマンス データ: パフォーマンス

サンプル ログ クエリ

次のサンプルでは、カスタム パフォーマンス データで Perf テーブルを使っています。

クエリ 説明
Perf すべてのパフォーマンス データ
Perf \| where Computer == "MyComputer" 特定のコンピューターからのすべてのパフォーマンス データ
Perf \| where CounterName == "Current Disk Queue Length" 特定のカウンターに関するすべてのパフォーマンス データ
Perf \| where ObjectName == "Processor" and CounterName == "% Processor Time" and InstanceName == "_Total" \| summarize AVGCPU = avg(CounterValue) by Computer コンピューター全体の平均 CPU 使用率
Perf \| where CounterName == "% Processor Time" \| summarize AggregatedValue = max(CounterValue) by Computer コンピューター全体の最大 CPU 使用率
Perf \| where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and Computer == "MyComputerName" \| summarize AggregatedValue = avg(CounterValue) by InstanceName 特定のコンピューターのインスタンス全体における現在のディスク キューの長さの平均
Perf \| where CounterName == "Disk Transfers/sec" \| summarize AggregatedValue = percentile(CounterValue, 95) by Computer コンピューター全体のディスク転送数/秒の 95 パーセンタイル
Perf \| where CounterName == "% Processor Time" and InstanceName == "_Total" \| summarize AggregatedValue = avg(CounterValue) by bin(TimeGenerated, 1h), Computer 全コンピューターの CPU 使用率の平均値 (1 時間ごと)
Perf \| where Computer == "MyComputer" and CounterName startswith_cs "%" and InstanceName == "_Total" \| summarize AggregatedValue = percentile(CounterValue, 70) by bin(TimeGenerated, 1h), CounterName 特定のコンピューターの各パーセント (%) カウンターの 70 パーセンタイル (1 時間ごと)
Perf \| where CounterName == "% Processor Time" and InstanceName == "_Total" and Computer == "MyComputer" \| summarize ["min(CounterValue)"] = min(CounterValue), ["avg(CounterValue)"] = avg(CounterValue), ["percentile75(CounterValue)"] = percentile(CounterValue, 75), ["max(CounterValue)"] = max(CounterValue) by bin(TimeGenerated, 1h), Computer 特定のコンピューターの CPU 使用率の平均、最小、最大、75 パーセンタイル (1 時間ごと)
Perf \| where ObjectName == "MSSQL$INST2:Databases" and InstanceName == "master" 名前付き SQL インスタンス INST2 のマスター データベースのデータベース パフォーマンス オブジェクトのすべてのパフォーマンス データ。
Perf \| where TimeGenerated >ago(5m) \| where ObjectName == "Process" and InstanceName != "_Total" and InstanceName != "Idle" \| where CounterName == "% Processor Time" \| summarize cpuVal=avg(CounterValue) by Computer,InstanceName \| join (Perf\| where TimeGenerated >ago(5m) \| where ObjectName == "Process" and CounterName == "ID Process" \| summarize arg_max(TimeGenerated,*) by ProcID=CounterValue ) on Computer,InstanceName \| sort by TimeGenerated desc \| summarize AvgCPU = avg(cpuVal) by InstanceName,ProcID 各プロセス ID の過去 5 分間の CPU の平均。

テキスト ログを収集する

一部のアプリケーションでは、仮想マシンに格納されているテキスト ログに書き込まれるイベントが書き込まれます。 このデータを収集する カスタム テーブルと DCR を作成します。 テキスト ログの場所、その詳細構成、カスタム テーブルのスキーマを定義します。 ワークスペースでのこのデータの取り込みと保有にはコストがかかります。

サンプル ログ クエリ

ここで使用する列名は、例として示しているだけです。 ほとんどの場合、ご使用のログの列名は異なります。

クエリ 説明
MyApp_CL \| summarize count() by code コード別にイベントの数をカウントします。
MyApp_CL \| where status == "Error" \| summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m) エラー イベントに対するアラート ルールを作成します。

IIS ログを収集する

Windows マシンで実行される IIS では、ログがテキスト ファイルに書き込まれます。 Azure Monitor エージェントを使用して IIS ログ収集を構成します。 ワークスペースでのこのデータの取り込みと保有にはコストがかかります。

IIS ログのレコードは、Log Analytics ワークスペースの W3CIISLog テーブルに格納されます。 ワークスペースでのこのデータの取り込みと保有にはコストがかかります。

サンプル ログ クエリ

クエリ 説明
W3CIISLog \| where csHost=="www.contoso.com" \| summarize count() by csUriStem ホストwww.contoso.comの URL で IIS ログ エントリをカウント します
W3CIISLog \| summarize sum(csBytes) by Computer 各 IIS マシンによって受信された合計バイト数を確認します。

サービスやデーモンを監視する

Windows サービスまたは Linux デーモンの状態を監視するには、Azure AutomationChange Tracking および Inventory ソリューションを有効にします。

Azure Monitor には、サービスまたはデーモンの状態を単独で監視する機能はありません。 Windows イベント ログでイベントを検索するなど、使用できる方法はいくつかありますが、この方法は信頼性がありません。 VM Insights によって設定された VMProcess テーブルから、マシン上で実行されているサービスに関連付けられているプロセスを検索することもできます。 このテーブルは 1 時間ごとにしか更新されないので、このデータをアラートに使いたい場合、一般的には十分ではありません。

注意

変更の追跡と分析ソリューションは、VM 分析情報の 変更分析 機能とは異なります。 この機能はパブリック プレビューの段階であり、このシナリオにはまだ含まれていません。

仮想マシンで Change Tracking ソリューションを有効にするさまざまなオプションについては、「 Change Tracking と Inventory を有効にする」を参照してください。 このソリューションには、仮想マシンを大規模に構成する方法が含まれています。 ソリューションをサポートするには 、Azure Automation アカウントを作成 する必要があります。

変更履歴とインベントリを有効にすると、Log Analytics ワークスペースに 2 つの新しいテーブルが作成されます。 ログ クエリとログ検索アラート ルールには、次のテーブルを使います。

テーブル 説明
構成変更 ゲスト内の構成データへの変更
ConfigurationData ゲスト内の構成データについて最後に報告された状態

サンプル ログ クエリ

  • 最近開始したすべてのサービスとデーモンを一覧表示します。

    ConfigurationChange
    | where ConfigChangeType == "Daemons" or ConfigChangeType == "WindowsServices"
    | where SvcState == "Running"
    | sort by Computer, SvcName
    
  • 特定のサービスが停止したときにアラートを生成します。 ログ検索アラート ルールではこのクエリを使います。

    ConfigurationData
    | where SvcName == "W3SVC" 
    | where SvcState == "Stopped"
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    
  • 一連のサービスのうちの 1 つが停止したときにアラートを生成します。 ログ検索アラート ルールではこのクエリを使います。

    let services = dynamic(["omskd","cshost","schedule","wuauserv","heathservice","efs","wsusservice","SrmSvc","CertSvc","wmsvc","vpxd","winmgmt","netman","smsexec","w3svc","sms_site_vss_writer","ccmexe","spooler","eventsystem","netlogon","kdc","ntds","lsmserv","gpsvc","dns","dfsr","dfs","dhcp","DNSCache","dmserver","messenger","w32time","plugplay","rpcss","lanmanserver","lmhosts","eventlog","lanmanworkstation","wnirm","mpssvc","dhcpserver","VSS","ClusSvc","MSExchangeTransport","MSExchangeIS"]);
    ConfigurationData
    | where ConfigDataType == "WindowsServices"
    | where SvcStartupType == "Auto"
    | where SvcName in (services)
    | where SvcState == "Stopped"
    | project TimeGenerated, Computer, SvcName, SvcDisplayName, SvcState
    | summarize AggregatedValue = count() by Computer, SvcName, SvcDisplayName, SvcState, bin(TimeGenerated, 15m)
    

ポートの監視

ポートの監視では、マシンで特定のポートがリッスンされていることを確認します。 ここでは、ポート監視のために考えられる 2 つの戦略について説明します。

Dependency Agent テーブル

プロセスと依存関係の収集を有効にして VM 分析情報を使用している場合は、VMConnectionVMBoundPort を使用して、マシン上の接続とポートを分析できます。 VMBoundPort テーブルは、コンピューター上で実行されている各プロセスとリッスンしているポートで 1 分ごとに更新されます。 ハートビートなしアラートに似たログ検索アラートを作成して、停止したプロセスを見つけたり、マシンが特定のポートでリッスンしていないときにアラートを生成したりできます。

  • VM で開いているポートの数を確認して、構成とセキュリティの脆弱性がある VM を評価します。

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize by Computer, Machine, Port, Protocol
    | summarize OpenPorts=count() by Computer, Machine
    | order by OpenPorts desc
    
  • VM 上のバインドされたポートを一覧表示して、構成とセキュリティの脆弱性を持つ VM を評価します。

    VMBoundPort
    | distinct Computer, Port, ProcessName
    
  • ポート別にネットワーク アクティビティを分析し、アプリケーションまたはサービスの構成方法を決定します。

    VMBoundPort
    | where Ip != "127.0.0.1"
    | summarize BytesSent=sum(BytesSent), BytesReceived=sum(BytesReceived), LinksEstablished=sum(LinksEstablished), LinksTerminated=sum(LinksTerminated), arg_max(TimeGenerated, LinksLive) by Machine, Computer, ProcessName, Ip, Port, IsWildcardBind
    | project-away TimeGenerated
    | order by Machine, Computer, Port, Ip, ProcessName
    
  • VM の送受信されたバイト数の傾向を確認します。

    VMConnection
    | summarize sum(BytesSent), sum(BytesReceived) by bin(TimeGenerated,1hr), Computer
    | order by Computer desc
    | render timechart
    
  • 接続エラーを時間の経過と同時に使用して、障害率が安定しているか変化するかを判断します。

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | extend bythehour = datetime_part("hour", TimeGenerated)
    | project bythehour, LinksFailed
    | summarize failCount = count() by bythehour
    | sort by bythehour asc
    | render timechart
    
  • 状態の傾向をリンクして、マシンの動作と接続状態を分析します。

    VMConnection
    | where Computer == <replace this with a computer name, e.g. 'acme-demo'>
    | summarize dcount(LinksEstablished), dcount(LinksLive), dcount(LinksFailed), dcount(LinksTerminated) by bin(TimeGenerated, 1h)
    | render timechart
    

接続マネージャー

Network Watcher接続モニター機能は、仮想マシン上のポートへの接続をテストするために使用されます。 テストでは、マシンでポートがリッスンされていて、ネットワーク上でアクセスできることを確認します。

接続マネージャーを使用するには、テストを開始するクライアント マシンに Network Watcher 拡張機能が必要となります。 テスト対象のマシンにインストールする必要はありません。 詳細については、「 チュートリアル: Azure portal を使用してネットワーク通信を監視する」を参照してください。

接続マネージャーには追加料金が発生します。 詳細については、「 Network Watcher の価格」を参照してください。

ローカル コンピューターでプロセスを実行する

一部のワークロードを監視するには、ローカル プロセスが必要です。 たとえば、ローカル コンピューター上で実行され、アプリケーションに接続してデータを収集または処理する PowerShell スクリプトがあります。 Azure Automation の一部である Hybrid Runbook Worker を使用して、ローカルの PowerShell スクリプトを実行できます。 Hybrid Runbook Worker に対しては直接課金されませんが、それが使用する Runbook ごとにコストが発生します。

Runbook では、ローカル コンピューター上の任意のリソースにアクセスして、必要なデータを収集できます。 Azure Monitor にデータを直接送信したり、アラートを作成したりすることはできません。 アラートを作成するには、Runbook がカスタム ログにエントリを書き込むようにします。 次に、Azure Monitor によって収集されるようにそのログを構成します。 そのログ エントリに対して発生するログ検索アラート ルールを作成します。

次のステップ