Azure Monitor エージェントを使用して JSON ファイルからログを収集する
カスタム JSON ログは、データ収集ルール (DCR) で使用されるデータ ソースの 1 つです。 DCR の作成の詳細については、「Azure Monitor エージェントを使用してデータを収集する」を参照してください。 この記事では、テキスト ログと JSON ログの種類の詳細について説明します。
多くのアプリケーションとサービスでは、Windows イベント ログや Syslog などの標準のログ記録サービスの代わりに、JSON ファイルに情報を記録します。 このデータは、Azure Monitor エージェントを使用して収集し、他のソースから収集されたデータを使用して Log Analytics ワークスペースに格納できます。
前提条件
- 少なくとも共同作成者権限がある Log Analytics ワークスペース。
- このデータ収集エンドポイント (DCE) は、Log Analytics ワークスペースと同じリージョン内に存在します。 詳細については、「デプロイに基づいてデータ収集エンドポイントを設定する方法」を参照してください。
- 「Azure Monitor エージェントを使用してデータを収集する」で説明されている新規または既存の DCR。
基本的な操作
次の図は、JSON ファイルからログ データを収集する基本的な操作を示しています。
- エージェントは、ローカル ディスク上の指定された名前パターンと一致するすべてのログ ファイルを監視します。
- ログ内の各エントリが収集され、Azure Monitor に送信されます。 ユーザーによって定義された受信ストリームは、ログ データを列に解析するために使用されます。
- 受信ストリームのスキーマがターゲット テーブルのスキーマと一致する場合は、既定の変換が使用されます。
JSON ファイルの要件とベスト プラクティス:
Azure Monitor エージェントが監視しているファイルは、次の要件を満たしている必要があります。
- ファイルは、Azure Monitor エージェントがあるコンピューターのローカル ドライブの、監視対象のディレクトリ内に格納する必要があります。
- 各レコードは、行末で区切る必要があります。
- ファイルでは、ASCII または UTF-8 エンコードを使用する必要があります。 UTF-16 など他の形式はサポートされていません。
- 新しいレコードは、古いレコードを上書きせず、ファイルの末尾に追加する必要があります。 上書きすると、データが失われます。
- JSON テキストは 1 行に含まれている必要があります。 JSON 本文フォーマットはサポートされません。 以下のサンプルを参照してください。
データの損失やパフォーマンスの問題が発生しないように、次の推奨事項に従ってください。
- 古いファイルを簡単にクリーンアップできるように、毎日新しいログ ファイルを作成します。
- 監視対象ディレクトリのログ ファイルを継続的にクリーンアップします。 多くのログ ファイルを追跡すると、エージェントの CPU とメモリの使用量が増える可能性があります。 すべてのログが処理されるための十分な時間を確保できるよう、少なくとも 2 日間待ちます。
- ファイル スキャンのパターンと一致するファイルの名前を、ファイル スキャンのパターンと一致する別の名前に変更しないでください。 これにより、重複するデータが取り込まれることになります。
- ファイル スキャンのパターンと一致する大規模ログ ファイルの名前を変更したり、監視対象のディレクトリにコピーしたりしないでください。 必要な場合は、1 分あたり 50 MB を超えないようにしてください。
カスタム テーブル
JSON ファイルからログ データを収集する前に、Log Analytics ワークスペースにカスタム テーブルを作成してデータを受信する必要があります。 テーブル スキーマは、受信ストリームの列と一致する必要があります。または、出力スキーマがテーブルと一致するように変換を追加する必要があります。
警告
Log Analytics エージェントが使用する既存のカスタム テーブルは使用しないでください。 最初の Azure Monitor エージェントによるテーブルへの書き込みがなされると、レガシ エージェントによるテーブルへの書き込みができなくなります。 Log Analytics エージェントのデータ損失を防止するために Azure Monitor エージェントにより使用される新しいテーブルを作成します。
たとえば、次の PowerShell スクリプトを使用して、複数の列を含むカスタム テーブルを作成できます。
$tableParams = @'
{
"properties": {
"schema": {
"name": "{TableName}_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "MyStringColumn",
"type": "string"
},
{
"name": "MyIntegerColumn",
"type": "int"
},
{
"name": "MyRealColumn",
"type": "real"
},
{
"name": "MyBooleanColumn",
"type": "bool"
},
{
"name": "FilePath",
"type": "string"
},
{
"name": "Computer",
"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
JSON ファイルのデータ収集ルールを作成する
Note
エージェントベースの JSON カスタム ファイルの取り込みは現在プレビュー段階であり、ポータルの完全な UI エクスペリエンスはまだありません。 ポータルを使用して DCR を作成できますが、受信ストリームの列を定義するために DCR を変更する必要があります。 このセクションでは、ARM テンプレートを使用して DCR を作成する方法について詳しく説明します。
着信ストリーム スキーマ
Note
区切りイベントにタイム スタンプを使用する複数行のサポートが利用可能になりました
JSON ファイルには、各値にプロパティ名が含まれており、DCR の受信ストリームには、各プロパティ名に一致する列が含まれている必要があります。 ログの列を使用して、ARM テンプレートの columns
セクションを変更する必要があります。
次の表では、ログ ファイル内のデータを定義する列の他にも含められるオプションの列について説明します。
列 | タイプ | 説明 |
---|---|---|
TimeGenerated |
datetime | レコードが生成された時刻。 レコードが受信ストリームに含まれていない場合、この値には Log Analytics ワークスペースに追加された時刻が自動的に設定されます。 |
FilePath |
string | この列を DCR の受信ストリームに追加すると、ログ ファイルへのパスが設定されます。 この列は自動的には作成されず、ポータルを使用して追加することはできません。 ポータルによって作成された DCR を手動で変更するか、受信ストリームを明示的に定義できる別の方法を使用して DCR を作成する必要があります。 |
Computer |
string | この列を DCR の受信ストリームに追加すると、ログ ファイルのあるコンピューターの名前が設定されます。 この列は自動的には作成されず、ポータルを使用して追加することはできません。 ポータルによって作成された DCR を手動で変更するか、受信ストリームを明示的に定義できる別の方法を使用して DCR を作成する必要があります。 |
変換
この変換では、受信ストリームを変更するためにレコードがフィルター処理されたり、ターゲット テーブルと一致するようにスキーマが変更されたりする可能性があります。 受信ストリームのスキーマがターゲット テーブルと同じ場合は、source
の既定の変換を使用できます。 そうでない場合は、必要なスキーマを返す KQL クエリを使用して、tee ARM テンプレートの transformKql
セクションを変更します。
ARM テンプレート
次の ARM テンプレートを使用して、JSON ログ ファイルを収集するための DCR を作成し、前のセクションで説明した変更を行います。 次の表では、テンプレートを展開するときに値を必要とするパラメーターについて説明します。
設定 | 説明 |
---|---|
データ収集ルール名 | DCR の一意の名前。 |
データ収集エンドポイント リソース ID | データ収集エンドポイント (DCE) のリソース ID。 |
場所 | DCR のリージョン。 Log Analytics ワークスペースと同じ地域である必要があります。 |
ファイル パターン | ローカル ディスク上のログ ファイルの場所と名前を確認します。 新しい名前で毎日新しいファイルが作成される場合など、異なるファイル名にはワイルドカードを使用します。 複数のファイル パターンをコンマで区切って入力できます (Linux 上の複数のファイル パターンには AMA バージョン 1.26 以降が必要です)。 例 : - C:\Logs\MyLog.json - C:\Logs\MyLog*.json - C:\App01\AppLog.json、C:\App02\AppLog.json - /var/mylog.json - /var/mylog*.json |
テーブル名 | Log Analytics ワークスペースの宛先テーブルの名前。 |
ワークスペースのリソース ID | ターゲット テーブルを含む Log Analytics ワークスペースのリソース ID。 |
timeFormat | 次の時刻の形式がサポートされています。 ARM テンプレートで引用符文字列を使用します。 括弧内のサンプル時間は含めないでください。 - “yyyy-MM-ddTHH:mm:ssk” (2024-10-29T18:28:34) - “YYYY-MM-DD HH:MM:SS” (2024-10-29 18:28:34) - “M/D/YYYY HH:MM:SS AM/PM” (10/29/2024 06:28:34 PM) - “Mon DD, YYYY HH:MM:SS” (Oct[ober] 29, 2024 18:28:34) - “yyMMdd HH:mm:ss” (241029 18:28:34) - “ddMMyy HH:mm:ss” (291024 18:28:34) - “MMM d HH:mm:ss” (Oct 29 18:28:34) - “dd/MMM/yyyy:HH:mm:ss zzz” (14/Oct/2024:18:28:34 -00) |
重要
ARM テンプレートを使用して DCR を作成する場合でも、DCR を使用するエージェントに DCR を関連付ける必要があります。 Azure portal で DCR を編集し、「リソースの追加」の説明に従ってエージェントを選択します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"dataCollectionRuleName": {
"type": "string",
"metadata": {
"description": "Unique name for the DCR. "
}
},
"dataCollectionEndpointResourceId": {
"type": "string",
"metadata": {
"description": "Resource ID of the data collection endpoint (DCE)."
}
},
"location": {
"type": "string",
"metadata": {
"description": "Region for the DCR. Must be the same location as the Log Analytics workspace. "
}
},
"filePatterns": {
"type": "string",
"metadata": {
"description": "Path on the local disk for the log file to collect. May include wildcards.Enter multiple file patterns separated by commas (AMA version 1.26 or higher required for multiple file patterns on Linux)."
}
},
"tableName": {
"type": "string",
"metadata": {
"description": "Name of destination table in your Log Analytics workspace. "
}
},
"workspaceResourceId": {
"type": "string",
"metadata": {
"description": "Resource ID of the Log Analytics workspace with the target table."
}
},
"timeFormat": {
"type": "string"
"metadata": {
"discription": "The time format that you would like to use to split multi line imput"
}
}
},
"variables": {
"tableOutputStream": "[concat('Custom-', parameters('tableName'))]"
},
"resources": [
{
"type": "Microsoft.Insights/dataCollectionRules",
"apiVersion": "2022-06-01",
"name": "[parameters('dataCollectionRuleName')]",
"location": "[parameters('location')]",
"properties": {
"dataCollectionEndpointId": "[parameters('dataCollectionEndpointResourceId')]",
"streamDeclarations": {
"Custom-Json-stream": {
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "FilePath",
"type": "string"
},
{
"name": "MyStringColumn",
"type": "string"
},
{
"name": "MyIntegerColumn",
"type": "int"
},
{
"name": "MyRealColumn",
"type": "real"
},
{
"name": "MyBooleanColumn",
"type": "boolean"
}
]
}
},
"dataSources": {
"logFiles": [
{
"streams": [
"Custom-Json-stream"
],
"filePatterns": [
"[parameters('filePatterns')]"
],
"format": "json",
"name": "Custom-Json-stream",
"settings": {
"text": {
"recordStartTimestampFormat": "[parameters('timeFormat')]"
}
}
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[parameters('workspaceResourceId')]",
"name": "workspace"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-Json-stream"
],
"destinations": [
"workspace"
],
"transformKql": "source",
"outputStream": "[variables('tableOutputStream')]"
}
]
}
}
]
}
トラブルシューティング
想定している JSON ログからデータを収集しない場合は、次の手順を実行します。
- 収集されるログ ファイルにデータが書き込まれていることを確認します。
- ログ ファイルの名前と場所が、指定したファイル パターンと一致することを確認します。
- DCR の受信ストリームのスキーマが、ログ ファイルのスキーマと一致していることを確認します。
- ターゲット テーブルのスキーマが受信ストリームと一致していること、または受信ストリームを正しいスキーマに変換する変換があることを確認します。
- 「操作の確認」を参照して、エージェントが動作していて、データが受信されているかどうかを確認します。
次のステップ
各項目の詳細情報