データ コネクタの正常性を監視する

Microsoft Sentinel サービスでの完全で中断のないデータ インジェストを確保するには、データ コネクタの正常性、接続性、パフォーマンスを追跡します。

次の機能を使用すると、Microsoft Sentinel内からこの監視を実行できます。

  • データ収集の正常性監視ブック: このブックは、追加のモニターを提供し、異常を検出し、ワークスペースのデータ インジェスト状態に関する分析情報を提供します。 ブックのロジックを使用して、取り込まれたデータの一般的な正常性を監視し、カスタム ビューとルール ベースのアラートを作成できます。

  • SentinelHealth データ テーブル: このテーブルのクエリを実行すると、コネクタごとの最新の障害イベントや、成功状態から失敗状態への変更を含むコネクタなど、正常性のドリフトに関する分析情報が提供されます。これは、アラートやその他の自動アクションの作成に使用できます。 SentinelHealthのデータテーブルは現在、Amazon Web Services、Dynamics 365、Office 365など、本記事後半のサポートデータコネクタセクションで挙げるその他のデータコネクターのみでサポートされています。

  • 接続されている SAP システムの正常性と状態を表示する: SAP データ コネクタで SAP システムの正常性情報を確認し、アラート ルール テンプレートを使用して SAP エージェントのデータ収集の正常性に関する情報を取得します。

この記事では、データ コレクションの正常性監視ブックと SentinelHealth データ テーブルを使用して、データ コネクタの正常性を監視し、診断クエリを実行し、正常性ドリフトの自動アラートを構成する方法について説明します。

正常性監視ブックを使用する

まず、コンテンツ ハブからデータ収集の健全性監視ワークブックをインストールし、Microsoft Sentinel のワークブック セクションでテンプレートを表示するか、そのコピーを作成してください。

  1. Azure portalの [Microsoft Sentinel] で、[コンテンツ管理] で [コンテンツ ハブ] を選択します。
    Defender ポータルでMicrosoft Sentinelする場合は、[Microsoft Sentinel>Content management>Content Hub] を選択します。

  2. コンテンツ ハブで、検索バーに「health」と入力し、結果の中から [データ 収集の正常性の監視] を選択します。

  3. 詳細ウィンドウから [ インストール ] を選択します。 ブックがインストールされていることを示す通知メッセージが表示された場合、または [インストール] の代わりに [ 構成] と表示されたら、次の手順に進みます。

  4. Microsoft Sentinel の 脅威の管理 で、ワークブックを選択します。

  5. Workbooks ページで、テンプレート タブを選択し、検索バーに「health」と入力して、結果の中から データ収集正常性の監視 を選択します。

  6. ブックをそのまま使用するには [ テンプレートの表示 ] を選択するか、[ 保存 ] を選択してブックの編集可能なコピーを作成します。 コピーが作成されたら、[保存済みのブックを表示] を選択します。

  7. ブックに入ったら、最初に表示する サブスクリプションワークスペース を選択し、必要に応じてデータをフィルター処理する TimeRange を定義します。 ヘルプの表示 切り替えを使用して、ワークブック内にその場で説明を表示します。

    データ コネクタの正常性監視ブックのランディング ページ

このブックには、次の 3 つのタブ付きセクションがあります。

  • [ 概要 ] タブには、選択したワークスペースのデータ インジェストの一般的な状態 (ボリューム メジャー、EPS レート、最後にログが受信された時刻) が表示されます。

  • [ データ収集の異常 ] タブは、テーブルとデータ ソース別のデータ収集プロセスの異常を検出するのに役立ちます。 各タブには、特定のテーブルの異常が表示されます ([ 全般 ] タブにはテーブルのコレクションが含まれています)。 異常は、異常スコアを返す series_decompose_anomalies() 関数を使用して計算されます。 series_decompose_anomalies() 関数の詳細を確認します。 評価する関数の次のパラメーターを設定します。

    • AnomaliesTimeRange: このタイム ピッカーは、データコレクションの異常ビューにのみ適用されます。

    • SampleInterval: 指定された時間範囲でデータがサンプリングされる時間間隔。 異常スコアは、最後の間隔のデータでのみ計算されます。

    • PositiveAlertThreshold: この値は、正の異常スコアのしきい値を定義します。 10 進値を受け入れます。

    • NegativeAlertThreshold: この値は、負の異常スコアのしきい値を定義します。 10 進値を受け入れます。

      データ コネクタの正常性監視ブックの異常ページ

  • [エージェント情報] タブには、Azure VM、その他のクラウド VM、オンプレミス VM、または物理マシンなど、さまざまなマシンにインストールされているエージェントの正常性に関する情報が表示されます。 システムの場所、ハートビートの状態と待機時間、使用可能なメモリとディスク領域、エージェント操作を監視します。

    このセクションでは、マシンの環境を説明するタブを選択する必要があります。Azure Arc マネージド マシンのみを表示する場合は、[Azure マネージド マシン] タブを選択します。[すべてのマシン] タブを選択して、Azure Monitor Agent がインストールされているマネージド マシンと非Azure マシンの両方を表示します。

    データコネクタの正常性監視ワークブックのエージェント情報ページ

SentinelHealth データ テーブルを使用する

SentinelHealth データ テーブルからデータ コネクタの正常性データを取得するには、まずワークスペースのMicrosoft Sentinel正常性機能を有効にする必要があります。 詳細については、「Microsoft Sentinelの正常性監視を有効にする」を参照してください。

正常性機能が有効になると、データ コネクタに対して生成された最初の成功または失敗イベントで SentinelHealth データ テーブルが作成されます。

サポートされているデータ コネクタ

SentinelHealth データ テーブルは現在、次のデータ コネクタでのみサポートされています。

SentinelHealth テーブル イベントを理解する

SentinelHealthテーブルは、サポートされているデータコネクタのヘルスイベントを保存するMicrosoft Sentinelのログテーブルです。 この表には以下の種類の健康イベントが記録されています:

  • データ取得ステータス変更。 冗長な監査を防ぎ、テーブル サイズを小さくするために、Microsoft Sentinelは、データ コネクタの状態が継続的な成功イベントまたは失敗イベントで安定している間に、このイベントを 1 時間に 1 回ログに記録します。 データ コネクタの状態に継続的なエラーがある場合は、エラーに関する追加の詳細が ExtendedProperties 列に含まれます。

    データ コネクタの状態が、成功から失敗、失敗から成功に変わった場合、または失敗の理由が変更された場合、イベントはすぐにログに記録され、チームがプロアクティブで即時のアクションを実行できるようになります。

    ソース サービスの調整など、一時的な可能性のあるエラーは、60 分以上継続した後にのみログに記録されます。 この 60 分を使用すると、Microsoft Sentinelはバックエンドの一時的な問題を克服し、ユーザーの操作を必要とせずにデータに追いつくことを可能にします。 間違いなく一時的ではないエラーは、すぐにログに記録されます。

  • エラーの概要。 1 時間に 1 回、コネクタごと、ワークスペースごとにログに記録され、エラーの概要が集計されます。 エラーの概要イベントは、コネクタで特定の時間内にポーリング エラーが発生した場合にのみ作成されます。 これには、コネクタのソース プラットフォームが照会された期間や、その期間中に発生したエラーの個別の一覧など、 ExtendedProperties 列に提供される追加の詳細が含まれます。

詳細については、「 SentinelHealth テーブル列スキーマ」を参照してください。

クエリを実行して健全性の逸脱を検出する

SentinelHealth テーブルに対してクエリを作成して、データ コネクタの正常性ドリフトを検出するのに役立ちます。 例:

コネクタごとの最新のエラー イベントを検出する:

SentinelHealth
| where TimeGenerated > ago(3d)
| where OperationName == 'Data fetch status change'
| where Status in ('Success', 'Failure')
| summarize TimeGenerated = arg_max(TimeGenerated,*) by SentinelResourceName, SentinelResourceId
| where Status == 'Failure'

失敗から成功状態への変更があるコネクタを検出します。

let latestStatus = SentinelHealth
| where TimeGenerated > ago(12h)
| where OperationName == 'Data fetch status change'
| where Status in ('Success', 'Failure')
| project TimeGenerated, SentinelResourceName, SentinelResourceId, LastStatus = Status
| summarize TimeGenerated = arg_max(TimeGenerated,*) by SentinelResourceName, SentinelResourceId;
let nextTolatestStatus = SentinelHealth
| where TimeGenerated > ago(12h)
| where OperationName == 'Data fetch status change'
| where Status in ('Success', 'Failure')
| join kind = leftanti (latestStatus) on SentinelResourceName, SentinelResourceId, TimeGenerated
| project TimeGenerated, SentinelResourceName, SentinelResourceId, NextToLastStatus = Status
| summarize TimeGenerated = arg_max(TimeGenerated,*) by SentinelResourceName, SentinelResourceId;
latestStatus
| join kind=inner (nextTolatestStatus) on SentinelResourceName, SentinelResourceId
| where NextToLastStatus == 'Failure' and LastStatus == 'Success'

成功状態から失敗状態への変更を含むコネクタを検出します。

let latestStatus = SentinelHealth
| where TimeGenerated > ago(12h)
| where OperationName == 'Data fetch status change'
| where Status in ('Success', 'Failure')
| project TimeGenerated, SentinelResourceName, SentinelResourceId, LastStatus = Status
| summarize TimeGenerated = arg_max(TimeGenerated,*) by SentinelResourceName, SentinelResourceId;
let nextTolatestStatus = SentinelHealth
| where TimeGenerated > ago(12h)
| where OperationName == 'Data fetch status change'
| where Status in ('Success', 'Failure')
| join kind = leftanti (latestStatus) on SentinelResourceName, SentinelResourceId, TimeGenerated
| project TimeGenerated, SentinelResourceName, SentinelResourceId, NextToLastStatus = Status
| summarize TimeGenerated = arg_max(TimeGenerated,*) by SentinelResourceName, SentinelResourceId;
latestStatus
| join kind=inner (nextTolatestStatus) on SentinelResourceName, SentinelResourceId
| where NextToLastStatus == 'Success' and LastStatus == 'Failure'

SentinelHealth 正常性ドリフト クエリで使用される次の Kusto 演算子と関数の詳細については、Kusto のドキュメントを参照してください。

KQL の詳細については、「Kusto 照会言語 (KQL) の概要」を参照してください。

その他のリソース:

正常性の問題に対するアラートと自動アクションを設定する

Microsoft Sentinel の分析ルールを使用して Microsoft Sentinel ログで自動化を構成できますが、データ コネクタの正常性の変化について通知を受け取り、ただちに対応する必要がある場合は、Azure Monitor アラート ルールを使用することをお勧めします。

次の手順では、SentinelHealth クエリを使用してデータ コネクタの正常性ドリフトを検出するAzure Monitorアラート ルールを作成する方法を示します。

  1. Azureモニター アラート ルールで、ルール スコープとして Microsoft Sentinel ワークスペースを選択し、最初の条件としてカスタム ログ検索を選択します。

  2. アラートロジックを必要に応じてカスタマイズし、頻度やルックバックの持続時間などをカスタマイズし、その後 「Runクエリによる健康ドリフト検出 」セクションの「健康ドリフト検出クエリ」を使って健康ドリフトを検索します。

  3. ルール アクションの場合は、既存のアクション グループを選択するか、必要に応じて新しいアクション グループを作成して、プッシュ通知やその他の自動アクション (Logic App、Webhook、Azure Function をシステムでトリガーするなど) を構成します。

詳細については、「Azure Monitor のアラートの概要」および「Azure Monitor アラート ログ」を参照してください。

次の手順