Azure Monitor を使用して仮想マシンを監視する: アラート

この記事は、「Azure Monitor で仮想マシンとそのワークロードを監視する」のガイドの一部です。 Azure Monitor のアラートでは、監視データの興味深いデータやパターンを事前に通知します。 仮想マシン用に事前に構成されたアラート ルールはありませんが、Azure Monitor エージェントから収集したデータに基づいて独自のものを作成することができます。 この記事では、仮想マシンに固有のアラートの概念と、他の Azure Monitor のお客様にも使用されている一般的なアラート ルールについて説明します。

このシナリオでは、Azure とハイブリッド仮想マシン環境の完全な監視を実装する方法について説明します。

重要

ほとんどのアラート ルールには、ルールの種類、含まれるディメンションの数、実行頻度に応じてかかるコストがあります。 アラート ルールを作成する前に、「Azure Monitor の価格」の「アラート ルール」セクションを参照してください。

データ コレクション

アラート ルールは、Azure Monitor で既に収集されているデータを検査します。 アラート ルールを作成する前に、特定のシナリオのデータが収集されていることを確認する必要があります。 この記事内のすべてのアラート ルールを含む、さまざまなシナリオでのデータ収集の構成に関するガイダンスについては、「Azure Monitor を使用して仮想マシンを監視する: データを収集する」を参照してください。

Azure Monitor には、任意の Azure 仮想マシンに対してすばやく有効にできる一連の推奨アラート ルールが用意されています。 これらのルールは、基本的な監視の出発点として最適です。 ただし、以下の理由により、ほとんどのエンタープライズ実装に対して十分なアラートは提供されません。

  • 推奨されるアラートは Azure 仮想マシンにのみ適用され、ハイブリッド マシンには適用されません。
  • 推奨されるアラートにはホスト メトリックのみが含まれており、ゲスト メトリックやログは含まれません。 これらのメトリックは、マシン自体の正常性を監視するのに役立ちます。 しかし、マシンで実行されるワークロードとアプリケーションの可視性は、最低限しか得られません。
  • 推奨されるアラートは個々のマシンに関連付けられ、過剰な数のアラート ルールが作成されます。 個々のマシンに対するこの方法を使用する代わりに、複数のマシンに対して最小限のアラート ルールを使用する方法については、「アラート ルールのスケーリング」を参照してください。

アラートの種類

Azure Monitor における最も一般的な種類の警告ルールは、メトリック警告ログ検索警告です。 特定のシナリオのために作成するアラート ルールの種類は、アラートの対象となるデータの場所に応じて異なります。

場合によっては、特定のアラート シナリオのデータをメトリックとログの両方で使用できることがあります。 その場合は、使用するルールの種類を決定する必要があります。 また、特定のデータを収集する方法を設定し、アラート ルールの種類を決定してデータ収集方法を決定する柔軟性も得られます。

メトリック アラート

メトリック アラートの一般的な用途:

  • 特定のメトリックがしきい値を超えたときにアラートを作成します。 たとえば、コンピューターの CPU が高い使用率で実行されているときなどです。

メトリック アラートのデータ ソース:

  • 自動的に収集される Azure 仮想マシンのホスト メトリック
  • Azure Monitor エージェントによってゲスト オペレーティング システムから収集されるメトリック

ログ検索アラート

ログ検索警告の一般的な用途:

  • Windows イベント ログまたは Syslog に特定のイベントまたはイベントのパターンが見つかった場合にアラートを作成します。 これらのアラート ルールでは、通常、クエリから返されるテーブル行を測定します。
  • 複数のマシンにわたる数値データの計算に基づくアラート。 これらのアラート ルールでは、通常、クエリ結果の数値列の計算を測定します。

ログ検索警告のデータ ソース:

  • Log Analytics ワークスペースで収集されたすべてのデータ

アラート ルールのスケーリング

同じ監視を必要とする仮想マシンが多数ある場合があるため、それぞれに個別のアラート ルールを作成する必要があるのは好ましくありません。 また、ルールの種類に応じて、管理が必要なアラート ルールの数を制限するさまざまな戦略を立てる必要もあります。 これらの戦略がうまく機能するかは、アラート ルールのターゲット リソースをどれほど理解しているかにかかっています。

メトリック アラート ルール

仮想マシンでは、複数のリソースの監視に関する説明に従って、複数のリソースのメトリック アラート ルールがサポートされます。 この機能により、同じリージョン内のリソース グループまたはサブスクリプション内のすべての仮想マシンに適用される 1 つのメトリック アラート ルールを作成できます。

推奨されるアラートから開始し、サブスクリプションまたはリソース グループをターゲット リソースとして使用して、それぞれに対応するルールを作成します。 複数のリージョンにマシンがある場合は、リージョンごとに重複するルールを作成する必要があります。

より多くのメトリック アラート ルールの要件を特定するときは、次のために、サブスクリプションまたはリソース グループをターゲット リソースとして使用してこの同じ戦略に従います。

  • 管理する必要があるアラート ルールの数を最小限に抑えます。
  • 新しいマシンに自動的に適用されるようにします。

ログ検索警告ルール

ログ検索警告ルールのターゲット リソースを特定のマシンに設定すると、クエリはそのマシンに関連付けられたデータに限定され、それに関する個々の警告が作成されるようになります。 この配置には、マシンごとに個別のアラート ルールが必要になります。

ログ検索警告ルールのターゲット リソースを Log Analytics ワークスペースに設定すると、そのワークスペース内のすべてのデータにアクセスできます。 このため、1 つのルールでワークグループ内のすべてのマシンのデータに対してアラートを生成できます。 この配置によって、すべてのマシンに対して 1 つのアラートを作成することができます。 その後、ディメンションを使用して、マシンごとに個別のアラートを作成できます。

たとえば、任意のコンピューターによって Windows イベント ログにエラー イベントが作成されたときにアラートを生成できます。 まず、「Azure Monitor エージェントを使用して仮想マシンからイベントとパフォーマンス カウンターを収集する」の説明に従ってデータ収集ルールを作成し、Log Analytics ワークスペースの Event テーブルにこれらのイベントを送信する必要があります。 その後、ターゲット リソースとしてワークスペース、そして次の図に示す条件を使用して、このテーブルに対してクエリを実行するアラート ルールを作成します。

クエリから、任意のコンピューター上のエラー メッセージのレコードが返されます。 [ディメンション別に分割] オプションで [_ResourceId] を指定することで、結果に複数のマシンが返された場合に、各マシンのアラートを作成するようにルールを指定します。

Screenshot that shows a new log search alert rule with split by dimensions.

Dimensions

アラートに含める情報によっては、異なるディメンションを使用して分割する必要がある場合があります。 この場合は、project または extend 演算子を使用して、必要なディメンションがクエリに投影されていることを確認します。 [リソース ID 列] フィールドを [分割しない] に設定し、すべての意味のあるディメンションを一覧に含めます。 [今後のすべての値を含める] が選択されていることを確認して、クエリから返されるすべての値が含まれるようにします。

Screenshot that shows a new log search alert rule with split by multiple dimensions.

動的しきい値

ログ検索警告ルールを使用する別の利点は、しきい値を決定するための複雑なロジックをクエリに含めることができることです。 しきい値をハードコーディングしたり、すべてのリソースに適用したり、一部のフィールドまたは計算値に基づいて動的に計算したりできます。 しきい値は、特定の条件に従ってリソースにのみ適用されます。 たとえば、使用可能なメモリに基づいてアラートを作成できますが、特定の量の合計メモリを持つマシンに対してのみアラートを作成できます。

一般的なアラート ルール

次のセクションでは、Azure Monitor の仮想マシンに関する一般的なアラート ルールを示します。 それぞれのメトリック警告とログ検索警告の詳細が表示されます。 使用するアラートの種類のガイダンスについては、「アラートの種類」を参照してください。 Azure Monitor で警告ルールを作成するプロセスに慣れていない場合は、 新しい警告ルールを作成する手順を参照してください。

Note

以下に示すログ検索警告の詳細では、クライアント オペレーティング システムの一連の一般的なパフォーマンス カウンターを提供する、VM Insights を使用して収集されたデータを使用しています。 この名前は、オペレーティング システムの種類とは関係ありません。

コンピューターを利用できない

仮想マシンの最も一般的な監視要件の 1 つは、実行が停止した場合にアラートを作成することです。 最適な方法は、現在パブリック プレビュー段階にある VM 可用性メトリックを使って、Azure Monitor でメトリック アラート ルールを作成することです。 このメトリックのチュートリアルについては、「Azure 仮想マシンの可用性アラート ルールを作成する」を参照してください。

アラート ルールのスケーリング」で説明されているように、サブスクリプションまたはリソース グループをターゲット リソースとして使用して可用性アラート ルールを作成します。 このルールは、アラート ルールの後に作成する新しいマシンを含む複数の仮想マシンに適用されます。

エージェント ハートビート

エージェント ハートビートは、Azure Monitor エージェントに依存してハートビートを送信するため、マシンを使用できない場合のアラートとは若干異なります。 エージェント ハートビートでは、マシンが実行されているが、エージェントが応答していない場合にアラートを生成できます。

メトリック アラート ルール

各 Log Analytics ワークスペースには、ハートビートと呼ばれるメトリックが含まれています。 そのワークスペースに接続されている各仮想マシンは、1 分ごとにハートビート メトリックの値を送信します。 そのコンピューターがメトリックのディメンションであるため、どのコンピューターもハートビートの送信に失敗したときに、アラートが起動するようにできます。 [集計の種類][データの個数] に設定し、 [しきい値][評価の粒度] と一致する値に設定します。

ログ検索警告ルール

ログ検索警告は、各コンピューターから 1 分ごとにハートビート レコードを取得するハートビート テーブルを使用します。

次のクエリを使ったルールを使用します。

Heartbeat
| summarize TimeGenerated=max(TimeGenerated) by Computer, _ResourceId
| extend Duration = datetime_diff('minute',now(),TimeGenerated)
| summarize MinutesSinceLastHeartbeat = min(Duration) by Computer, bin(TimeGenerated,5m), _ResourceId

CPU アラート

このセクションでは、CPU アラートについて説明します。

メトリック アラート ルール

移行先 メトリック
Host CPU 使用率 (推奨されるアラートに含まれます)
Windows ゲスト \Processor Information(_Total)% Processor Time
Linux ゲスト cpu/usage_active

ログ検索警告ルール

CPU 使用率

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Processor" and Name == "UtilizationPercentage"
| summarize CPUPercentageAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId

メモリのアラート

このセクションでは、メモリ アラートについて説明します。

メトリック アラート ルール

移行先 メトリック
Host 使用可能なメモリ バイト (プレビュー) (推奨されるアラートに含まれます)
Windows ゲスト \Memory% Committed Bytes in Use
\Memory\Available Bytes
Linux ゲスト mem/available
mem/available_percent

ログ検索警告ルール

使用可能なメモリ (MB)

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Memory" and Name == "AvailableMB"
| summarize AvailableMemoryInMBAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId

使用可能なメモリ (%)

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Memory" and Name == "AvailableMB"
| extend TotalMemory = toreal(todynamic(Tags)["vm.azm.ms/memorySizeMB"]) | extend AvailableMemoryPercentage = (toreal(Val) / TotalMemory) * 100.0
| summarize AvailableMemoryInPercentageAverage = avg(AvailableMemoryPercentage) by bin(TimeGenerated, 15m), Computer, _ResourceId  

ディスク アラート

このセクションでは、ディスク アラートについて説明します。

メトリック アラート ルール

移行先 メトリック
Windows ゲスト \Logical Disk(_Total)% Free Space
\Logical Disk(_Total)\Free Megabytes
Linux ゲスト disk/free
disk/free_percent

ログ検索警告ルール

使用されている論理ディスク - 各コンピューター上のすべてのディスク

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "LogicalDisk" and Name == "FreeSpacePercentage"
| summarize LogicalDiskSpacePercentageFreeAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId 

使用されている論理ディスク - 個々のディスク

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "LogicalDisk" and Name == "FreeSpacePercentage"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize LogicalDiskSpacePercentageFreeAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, Disk 

論理ディスクの IOPS

InsightsMetrics
| where Origin == "vm.azm.ms" 
| where Namespace == "LogicalDisk" and Name == "TransfersPerSecond"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize DiskIOPSAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, Disk 

論理ディスクのデータ速度

InsightsMetrics
| where Origin == "vm.azm.ms" 
| where Namespace == "LogicalDisk" and Name == "BytesPerSecond"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| summarize DiskBytesPerSecondAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, Disk 

ネットワーク アラート

メトリック アラート ルール

移行先 メトリック
Host 受信ネットワーク合計、送信ネットワーク合計 (推奨されるアラートに含まれます)
Windows ゲスト \Network Interface\Bytes Sent/sec
\Logical Disk(_Total)\Free Megabytes
Linux ゲスト disk/free
disk/free_percent

ログ検索警告ルール

ネットワーク インターフェイスの受信バイト数 - すべてのインターフェイス

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "ReadBytesPerSecond"
| summarize BytesReceivedAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId  

ネットワーク インターフェイスの受信バイト数 - 個々のインターフェイス

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "ReadBytesPerSecond"
| extend NetworkInterface=tostring(todynamic(Tags)["vm.azm.ms/networkDeviceId"])
| summarize BytesReceievedAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, NetworkInterface 

ネットワーク インターフェイスの送信バイト数 - すべてのインターフェイス

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "WriteBytesPerSecond"
| summarize BytesSentAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId 

ネットワーク インターフェイスの送信バイト数 - 個々のインターフェイス

InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "Network" and Name == "WriteBytesPerSecond"
| extend NetworkInterface=tostring(todynamic(Tags)["vm.azm.ms/networkDeviceId"])
| summarize BytesSentAverage = avg(Val) by bin(TimeGenerated, 15m), Computer, _ResourceId, NetworkInterface 

Windows および Linux イベント

次の例では、特定の Windows イベントが作成されたときにアラートが作成されます。 メトリック測定アラート ルールを使用して、コンピューターごとに個別のアラートが作成されます。

  • 特定の Windows イベントに対するアラート ルールを作成します。 この例では、アプリケーション ログのイベントを表示します。 しきい値として 0 および連続する違反が 0 より大きいことを指定します。

    Event 
    | where EventLog == "Application"
    | where EventID == 123 
    | summarize NumberOfEvents = count() by Computer, bin(TimeGenerated, 15m)
    
  • 特定の重大度の Syslog イベントに対するアラート ルールを作成します。 次の例では、エラー認可イベントを表示します。 しきい値として 0 および連続する違反が 0 より大きいことを指定します。

    Syslog
    | where Facility == "auth"
    | where SeverityLevel == "err"
    | summarize NumberOfEvents = count() by Computer, bin(TimeGenerated, 15m)
    

カスタム パフォーマンス カウンター

  • カウンターの最大値に関するアラートを作成します。

    Perf 
    | where CounterName == "My Counter" 
    | summarize AggregatedValue = max(CounterValue) by Computer
    
  • カウンターの平均値に関するアラートを作成します。

    Perf 
    | where CounterName == "My Counter" 
    | summarize AggregatedValue = avg(CounterValue) by Computer
    

次の手順

仮想マシン用に収集された監視データを分析する