Azure Monitor エージェントを使用してテキスト ログを収集する
[アーティクル]
2022/12/22
12 人の共同作成者
フィードバック
この記事の内容
前提条件
テキスト ログを収集するデータ収集ルールを作成する
トラブルシューティング
次のステップ
多くのアプリケーションは、Windows イベント ログや Syslog などの標準のログ記録サービスの代わりに、テキスト ファイルに情報を記録します。 この記事では、データ収集規則 (DCR) を作成し、Azure Monitor エージェント を使用して監視対象のマシンからテキスト ログを収集する方法について説明します。
前提条件
この手順を完了するには、以下が必要です。
テキスト ログを収集するデータ収集ルールを作成する
データ収集ルールでは、次を定義します。
Azure Monitor エージェントが新しいイベントをスキャンするソース ログ ファイル。
インジェスト中に Azure Monitor がイベントを変換する方法。
Azure Monitor がデータを送信する宛先 Log Analytics ワークスペースとテーブル。
Log Analytics ワークスペースと "同じリージョン" にデータ収集ルールを作成します。 このルールは、サポートされている他のリージョンにあるマシンにも関連付けることができます。
注意
データ収集ルールを作成した後、データが送信先に送信されるまでに最大で 5 分かかることがあります。
Azure portal でデータ収集ルールを作成するには、次を行います。
[モニター] メニューで、[データ収集ルール] を選択します。
[作成] を選択して、新しいデータ収集ルールと関連付けを作成します。
[ルール名] を入力し、[サブスクリプション] 、[リソース グループ] 、[リージョン] 、および [プラットフォームの種類] を指定します。
[リージョン] により、DCR が作成される場所を指定します。 仮想マシンとそれらの関連付けは、テナント内の任意のサブスクリプションまたはリソース グループに配置できます。
[プラットフォームの種類] により、このルールを適用できるリソースの種類を指定します。 [カスタム] オプションにより、Windows と Linux の両方の種類が許可されます。
[リソース] タブで、次の操作を実行します。
[+ リソースの追加] を選択し、データ収集ルールにリソースを関連付けます。 リソースは、Azure 仮想マシン、Virtual Machine Scale Sets、Azure Arc for servers のいずれかです。 Azure portal は、まだインストールされていないリソースに Azure Monitor エージェントをインストールします。
重要
ポータルは、既存のユーザー割り当て ID と共に、ターゲット リソースでシステム割り当てマネージド ID を有効にします (該当する場合)。 既存のアプリケーションでは、ユーザー割り当て ID を要求で指定しない限り、マシンでは既定でシステム割り当て ID が代わりに使用されます。
プライベート リンクを使用したネットワークの分離が必要な場合は、それぞれのリソースに対して同じリージョンから既存のエンドポイントを選択するか、新しいエンドポイントを作成します 。
[データ収集エンドポイントを有効にする] を選択します。
データ収集ルールに関連付ける各リソースのデータ収集エンドポイントを選択します。
[収集と配信] タブで、[データ ソースの追加] を選択して、データ ソースを追加し、送信先を設定します。
[カスタム テキスト ログ] を選択します。
次の情報を指定します。
ファイル パターン - ログ ファイルがローカル ディスク上のどこにあるかを識別します。 複数のファイル パターンをコンマで区切って入力できます。
有効な入力の例:
20220122-MyLog.txt
ProcessA_MyLog.txt
ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt
注意
同じ種類の複数のログ ファイルは、通常、同じディレクトリに存在します。 たとえば、マシンが毎日新しいファイルを作成して、ログ ファイルが大きくなりすぎないようにすることができます。 このシナリオでログ データを収集するには、ファイル ワイルドカードを使用できます。 Windows 用 C:\directoryA\directoryB\*MyLog.txt
と Linux 用 /var/*.log
の形式を使用します。 ディレクトリ ワイルドカードはサポートされません。
テーブル名 - Log Analytics ワークスペースで作成した変換先テーブルの名前。 詳細については、「前提条件 」を参照してください。
レコード区切り記号 - 現在サポートされている行の末尾 (/r/n
) 以外の区切り記号を許可するために、今後使用されます。
変換 - インジェスト時変換 を追加するか、収集されたデータを変換する必要がない場合はソース のままにします。
[送信先] タブで、データ ソースの 1 つ以上の送信先を追加します。 同じタイプまたは異なるタイプの送信先を複数選択できます。 たとえば、複数の Log Analytics ワークスペース (マルチホームとも呼ばれます) を選択できます。
[確認と作成] を選択して、データ収集ルールの詳細と、一連の仮想マシンとの関連付けを確認します。
[作成] を選択してデータ収集ルールを作成します。
データ収集ルールには、ワークスペースのリソース ID が必要です。 Azure portal の [Log Analytics ワークスペース] メニューでワークスペースに移動します。 [プロパティ] ページで、[リソース ID] をコピーして、後で使用するために保存します。
Azure portal の検索ボックスに、テンプレート と入力して、[カスタム テンプレートのデプロイ] を選択します。
[Build your own template in the editor] (エディターで独自のテンプレートをビルド) を選択します。
次の Resource Manager テンプレートをエディターに貼り付けます。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"dataCollectionRuleName": {
"type": "string",
"metadata": {
"description": "Specifies the name of the Data Collection Rule to create."
}
},
"location": {
"type": "string",
"metadata": {
"description": "Specifies the location in which to create the Data Collection Rule."
}
},
"workspaceName": {
"type": "string",
"metadata": {
"description": "Name of the Log Analytics workspace to use."
}
},
"workspaceResourceId": {
"type": "string",
"metadata": {
"description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
}
},
"endpointResourceId": {
"type": "string",
"metadata": {
"description": "Specifies the Azure resource ID of the Data Collection Endpoint to use."
}
}
},
"resources": [
{
"type": "Microsoft.Insights/dataCollectionRules",
"name": "[parameters('dataCollectionRuleName')]",
"location": "[parameters('location')]",
"apiVersion": "2021-09-01-preview",
"properties": {
"dataCollectionEndpointId": "[parameters('endpointResourceId')]",
"streamDeclarations": {
"Custom-MyLogFileFormat": {
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "RawData",
"type": "string"
}
]
}
},
"dataSources": {
"logFiles": [
{
"streams": [
"Custom-MyLogFileFormat"
],
"filePatterns": [
"C:\\JavaLogs\\*.log"
],
"format": "text",
"settings": {
"text": {
"recordStartTimestampFormat": "ISO 8601"
}
},
"name": "myLogFileFormat-Windows"
},
{
"streams": [
"Custom-MyLogFileFormat"
],
"filePatterns": [
"//var//*.log"
],
"format": "text",
"settings": {
"text": {
"recordStartTimestampFormat": "ISO 8601"
}
},
"name": "myLogFileFormat-Linux"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[parameters('workspaceResourceId')]",
"name": "[parameters('workspaceName')]"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-MyLogFileFormat"
],
"destinations": [
"[parameters('workspaceName')]"
],
"transformKql": "source",
"outputStream": "Custom-MyTable_CL"
}
]
}
}
],
"outputs": {
"dataCollectionRuleId": {
"type": "string",
"value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
}
}
}
Resource Manager テンプレートで次の値を更新します。
streamDeclarations
: 受信データの列を定義します。 これは、ログ ファイルの構造と一致している必要があります。
filePatterns
: 収集するログ ファイルの場所とファイル パターンを指定します。 これにより、Windows エージェントと Linux エージェントの個別のパターンが定義されます。
transformKql
: 受信データをワークスペースに送信する前に適用する 変換 を指定します。
テキスト ログの DCR を変更する場合は、「Azure Monitor でのデータ収集ルールの構造 (プレビュー) 」を参照してください。
重要
カスタム データ収集ルールには、サフィックス Custom- が付けられます (たとえば、Custom-rulename )。 ストリーム宣言の Custom-rulename は、Log Analytics ワークスペースの Custom-rulename の名前と一致する必要があります。
[保存] を選択します。
[カスタム デプロイ] 画面で、データ収集ルールを格納する [サブスクリプション] と [リソース グループ] を指定し、テンプレートに定義されている値を指定します。 これには、データ収集ルールの [名前] と、 [ワークスペース リソース ID] および [エンドポイント リソース ID] が含まれます。 [場所] は、ワークスペースと同じ場所にする必要があります。 [リージョン] は既に設定されていて、データ収集ルールの場所に使用されます。
[確認と作成] を選択し、詳細を確認したら [作成] をクリックします。
デプロイが完了したら、[デプロイの詳細] ボックスを展開し、データ収集ルールを選択して詳細を表示します。 [JSON ビュー] を選択します。
API バージョンを 2021-09-01-preview に変更しました。
データ収集ルールの [リソース ID] をコピーします。 これは次の手順で使用します。
収集するログ ファイルにエージェントにデータ収集規則を関連付けるデータ収集の関連付けを作成します。 同じデータ収集ルールを複数のエージェントに関連付けることができます。
Azure portal の [監視] メニューで、[データ収集ルール] を選択し、作成したルールを選択します。
[リソース] を選択し、[追加] を選択して使用可能なリソースを表示します。
個々のエージェントを選択してデータ収集ルールを関連付けるか、リソース グループを選択して、そのリソース グループ内のすべてのエージェントの関連付けを作成します。 [適用] を選択します。
トラブルシューティング
テキスト ログの収集をトラブルシューティングするには、次の手順を使用します。
カスタム ログが受信されているかどうかを確認する
まず、Log Analytics で次のクエリを実行して、カスタム ログ テーブルのレコードが収集されているかどうかを確認します。 レコードが返されない場合は、考えられる原因について他のセクションを確認してください。 このクエリは過去 2 日間のエントリを検索しますが、別の時間範囲に変更できます。 テーブルの新しいデータがアップロードされるまでに 5 から 7 分かかる場合があります。 アップロードされるのは新しいデータのみです。DCR ルールが作成される前に最後に書き込まれたログ ファイルはアップロードされません。
<YourCustomLog>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc
カスタム テーブルを作成したことを確認する
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"]
}
]
このファイル パターンは、エージェント マシン上のログに対応している必要があります。
テキスト ログが設定されていることを確認する
エージェントは、収集対象のログ ファイルに書き込まれた新しいコンテンツのみを収集します。 テキスト ログの収集機能を試している場合は、次のスクリプトを使用してサンプル ログを生成できます。
# 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)
ログを Microsoft と共有する
すべてが正しく構成されているにもかかわらず、ログ データが収集されない場合は、次の手順に従って Azure Monitor エージェントの診断ログを収集して、Azure Monitor グループと共有します。
管理者特権の PowerShell ウィンドウを開きます。
ディレクトリを C:\Packages\Plugins\Microsoft.Azure.Monitor.AzureMonitorWindowsAgent\[version]\
に変更します。
スクリプト .\CollectAMALogs.ps1
を実行します。
デスクトップに生成された AMAFiles.zip
ファイルを共有します。
次のステップ
各項目の詳細情報