Azure Monitor エージェントを使用してテキストまたは JSON ファイルからログを収集する

多くのアプリケーションは、Windows イベント ログや Syslog などの標準のログ記録サービスの代わりに、テキスト ファイルや JSON ファイルに情報を記録します。 この記事では、データ収集ルール (DCR) を作成することで、Azure Monitor エージェントを使って監視対象のマシン上のテキスト ファイルと JSON ファイルからログ データを収集する方法について説明します。

Note

現時点では、JSON インジェストはプレビュー段階にあります。

前提条件

この手順を完了するには、以下が必要です。

  • 少なくとも共同作成者権限がある Log Analytics ワークスペース。

  • 仮想マシンと Log Analytics ワークスペースが同じリージョンにあるかどうかに応じて、1 つまたは 2 つの データ収集エンドポイント

    詳細については、「デプロイに基づくデータ収集エンドポイントの設定方法」を参照してください。

  • ワークスペースにデータ収集ルール オブジェクトを作成するためのアクセス許可

  • 適切なインジェストを行うには、JSON テキストを 1 行に含める必要があります。 JSON 本文 (ファイル) フォーマットはサポートされません。

  • テキストまたは JSON ファイルにログを書き込む、オンプレミスの Windows クライアント上の、仮想マシン、仮想マシン スケール セット、Arc 対応サーバー、または Azure 監視エージェント。

    テキスト ファイルと JSON ファイルの要件とベスト プラクティス:

    • Azure Monitor エージェントが実行されているコンピューターのローカル ドライブと、監視対象のディレクトリにファイルを格納します。
    • レコードの末尾を行の末尾で示してください。
    • ASCII または UTF-8 エンコードを使用してください。 UTF-16 など他の形式はサポートされていません。
    • 古いファイルを簡単に削除できるように、毎日新しいログ ファイルを作成してください。
    • 監視対象ディレクトリ内のすべてのログ ファイルをクリーンアップしてください。 多くのログ ファイルを追跡すると、エージェントの CPU とメモリの使用量が増える可能性があります。 すべてのログが処理されるための十分な時間を確保できるよう、少なくとも 2 日間待ちます。
    • 既存のファイルを新しいレコードで上書きしないでください。 新しいレコードはファイルの末尾に追加するのみにする必要があります。 上書きすると、データが失われます。
    • ファイルの名前を新しい名前に変更し、同じ名前の新しいファイルを開かないでください。 データが失われる可能性があります。
    • ファイル スキャンのパターンと一致する大規模ログ ファイルの名前を変更したり、監視対象のディレクトリにコピーしたりしないでください。 必要な場合は、1 分あたり 50 MB を超えないようにしてください。
    • ファイル スキャンのパターンと一致するファイルの名前を、ファイル スキャンのパターンと一致する新しい名前に変更しないでください。 これにより、重複するデータが取り込まれることになります。

カスタム テーブルを作成する

スクリプトでは 2 つの列を含むテーブルが作成されます。

  • TimeGenerated (日時) [必須]
  • RawData (文字列) [テーブル スキーマが指定されている場合は省略可能]
  • 'FilePath' (文字列) [省略可能]
  • YourOptionalColumn (文字列) [省略可能]

テキスト ファイルから収集されるログ データの既定のテーブル スキーマは、'TimeGenerated' と 'RawData' です。 どちらかのチームに 'FilePath' を追加するかどうかは任意です。 最終的なスキーマまたはソースが JSON ログであるとわかっている場合は、テーブルを作成する前にスクリプトに最終的な列を追加できます。 後からいつでもLog Analytics テーブルの UI を使って列を追加することができます。

列名と JSON 属性をテーブルに自動的に解析するには、完全に一致する必要があります。 列と JSON 属性の両方で大文字と小文字が区別されます。 たとえば Rawdata では、イベント データが正しく収集されません。 RawData にする必要があります。 インジェストでは、対応する列がない JSON 属性は削除されます。

REST 呼び出しを行う最も簡単な方法は、Azure Cloud PowerShell コマンドライン (CLI) から行うことです。 シェルを開くには、Azure portal に移動し、[Cloud Shell] ボタンを押して、[PowerShell] を選択します。 Azure Cloud PowerShell を初めて使う場合は、1 回限りの構成ウィザードを初めから終わりまで実行する必要があります。

ワークスペースにテーブルを作成するには、次のスクリプトをコピーして PowerShell に貼り付けます。

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "type": "String"
                     }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

200 の応答と、作成したテーブルに関する詳細を受け取るはずです。

テキストまたは JSON ファイルにデータ収集ルールを作成する

データ収集ルールでは、次を定義します。

  • Azure Monitor エージェントが新しいイベントをスキャンするソース ログ ファイル。
  • インジェスト中に Azure Monitor がイベントを変換する方法。
  • Azure Monitor がデータを送信する宛先 Log Analytics ワークスペースとテーブル。

データ収集ルールを定義して、複数のマシンから複数の Log Analytics ワークスペース (異なるリージョンまたはテナントのワークスペースを含む) にデータを送信できます。 Log Analytics ワークスペースと "同じリージョン" にデータ収集ルールを作成します。

注意

テナント間でデータを送信するには、まず Azure Lighthouse を有効にする必要があります。

JSON ログ ファイルをカスタム テーブルに自動的に解析するには、Resource Manager テンプレートのステップに従います。 インジェスト時変換を使用して、テキスト データを列に変換できます

Azure portal でデータ収集ルールを作成するには、次を行います。

  1. [モニター] メニューで、[データ収集ルール] を選択します。

  2. [作成] を選択して、新しいデータ収集ルールと関連付けを作成します。

    Screenshot that shows the Create button on the Data Collection Rules screen.

  3. 次のようにルール名を入力し、サブスクリプションリソース グループリージョンプラットフォームの種類データ収集エンドポイントを指定します。

    • [リージョン] により、DCR が作成される場所を指定します。 仮想マシンとそれらの関連付けは、テナント内の任意のサブスクリプションまたはリソース グループに配置できます。
    • [プラットフォームの種類] により、このルールを適用できるリソースの種類を指定します。 [カスタム] オプションにより、Windows と Linux の両方の種類が許可されます。
    • [データ収集エンドポイント] では、収集されたデータを Azure Monitor エージェントが送信するデータ収集エンドポイントを指定します。 このデータ収集エンドポイントは、Log Analytics ワークスペースと同じリージョンに存在していなくてはなりません。 詳細については、「デプロイに基づくデータ収集エンドポイントの設定方法」を参照してください。

    Screenshot that shows the Basics tab of the Data Collection Rule screen.

  4. [リソース] タブで、次の操作を実行します。

    1. [+ リソースの追加] を選択し、データ収集ルールにリソースを関連付けます。 リソースは、Azure 仮想マシン、Virtual Machine Scale Sets、Azure Arc for servers のいずれかです。 Azure portal は、まだインストールされていないリソースに Azure Monitor エージェントをインストールします。

      重要

      ポータルは、既存のユーザー割り当て ID と共に、ターゲット リソースでシステム割り当てマネージド ID を有効にします (該当する場合)。 既存のアプリケーションでは、ユーザー割り当て ID を要求で指定しない限り、マシンでは既定でシステム割り当て ID が代わりに使用されます。

    2. [データ収集エンドポイントを有効にする] を選択します。

    3. データ収集ルールに関連付ける各仮想マシンに対して、データ収集エンドポイントを選ぶこともできます。 ほとんどの場合、使用する必要があるのは既定値のみです。

      このデータ収集エンドポイントを使うと、構成ファイルが仮想マシンに送信されますが、仮想マシンとは同じリージョンに存在していなくてはなりません。 詳細については、「デプロイに基づくデータ収集エンドポイントの設定方法」を参照してください。

    Screenshot that shows the Resources tab of the Data Collection Rule screen.

  5. [収集と配信] タブで、[データ ソースの追加] を選択して、データ ソースを追加し、送信先を設定します。

  6. [データ ソースの種類] ドロップダウンから、[カスタム テキスト ログ] または [JSON Logs] (JSON ログ) を選びます。

  7. 次の情報を指定します。

    • ファイル パターン - ログ ファイルがローカル ディスク上のどこにあるかを識別します。 複数のファイル パターンをコンマで区切って入力できます (Linux では、ファイル パターンのコンマ区切りの一覧から収集するには、AMA バージョン 1.26 以上が必要です)。

      有効な入力の例:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Note

      同じ種類の複数のログ ファイルは、通常、同じディレクトリに存在します。 たとえば、マシンが毎日新しいファイルを作成して、ログ ファイルが大きくなりすぎないようにすることができます。 このシナリオでログ データを収集するには、ファイル ワイルドカードを使用できます。 Windows 用 C:\directoryA\directoryB\*MyLog.txt と Linux 用 /var/*.log の形式を使用します。 ディレクトリ ワイルドカードはサポートされません。

    • テーブル名 - Log Analytics ワークスペースで作成した変換先テーブルの名前。 詳しくは、「カスタム テーブルを作成する」をご覧ください。

    • レコード区切り記号 - 現在サポートされている行の末尾 (/r/n) 以外の区切り記号を許可するために、今後使用されます。

    • 変換 - インジェスト時変換を追加するか、収集されたデータを変換する必要がない場合はソースのままにします。

  8. [送信先] タブで、データ ソースの 1 つ以上の送信先を追加します。 同じタイプまたは異なるタイプの送信先を複数選択できます。 たとえば、複数の Log Analytics ワークスペース (マルチホームとも呼ばれます) を選択できます。

    Screenshot that shows the destination tab of the Add data source screen for a data collection rule in Azure portal.

  9. [確認と作成] を選択して、データ収集ルールの詳細と、一連の仮想マシンとの関連付けを確認します。

  10. [作成] を選択してデータ収集ルールを作成します。

Note

データ収集ルールを作成した後、データが送信先に送信されるまでに最大で 10 分かかることがあります。

サンプル ログ クエリ

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

  • コード別にイベントの数をカウントします。

    MyApp_CL
    | summarize count() by code
    

サンプルのアラート ルール

  • エラー イベントに対するアラート ルールを作成します。

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

トラブルシューティング

テキスト ファイルと JSON ファイルからのログの収集のトラブルシューティングは、次の手順で行います。

カスタム テーブルにデータを取り込んだかどうかを調べる

最初に、Log Analytics で次のクエリを実行して、カスタム ログ テーブルにレコードが取り込まれているかどうかを調べます。

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

レコードが返されない場合は、考えられる原因について他のセクションを確認してください。 このクエリは過去 2 日間のエントリを検索しますが、別の時間範囲に変更できます。 新しいデータがテーブルに表示されるまでに、5 から 7 分かかる場合があります。 テキストまたは JSON ファイルに書き込まれたデータの Azure Monitor エージェントによる収集は、データ収集ルールを仮想マシンに関連付けた後でのみ行われます。

カスタム テーブルを作成したことを確認する

Log Analytics ワークスペースにデータを送信する前に、カスタム ログ テーブルを作成する必要があります。

エージェントがハートビートを正常に送信していることを確認する

Log Analytics で次のクエリを実行して、ハートビート テーブルにレコードがあるかどうかを確認することで、Azure Monitor エージェントが正しく通信していることを検証します。

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

データ収集ルールで正しいログの場所を指定したことを確認します

データ収集ルールには、次のようなセクションがあります。 filePatterns 要素は、エージェント コンピューターから収集するログ ファイルへのパスを指定します。 エージェント コンピューターを調べて、これが正しいことを確認します。

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

このファイル パターンは、エージェント マシン上のログに対応している必要があります。

Screenshot of text log files on agent machine.

Azure Monitor エージェントのトラブルシューティング ツールを使用する

Azure Monitor エージェント トラブルシューティング ツールを使って、一般的な問題を探し、Microsoft と結果を共有します。

ログに書き込まれていることを確認する

エージェントは、収集対象のログ ファイルに書き込まれた新しいコンテンツのみを収集します。 テキストまたは JSON ファイルからの収集ログを調べている場合は、次のスクリプトを使ってサンプル ログを生成できます。

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

次のステップ

各項目の詳細情報