Поделиться через


Сбор журналов из JSON-файла с помощью агента Azure Monitor

Пользовательские журналы JSON — это один из источников данных, используемых в правиле сбора данных (DCR). Сведения о создании DCR приведены в разделе "Сбор данных с помощью агента Azure Monitor". В этой статье приведены дополнительные сведения о типе текстовых и JSON-журналов.

Многие приложения и службы будут записывать данные в JSON-файлы вместо стандартных служб ведения журнала, таких как журнал событий Windows или Системный журнал. Эти данные можно собирать с помощью агента Azure Monitor и храниться в рабочей области Log Analytics с данными, собранными из других источников.

Необходимые компоненты

Базовая операция

На следующей схеме показана базовая операция сбора данных журнала из json-файла.

  1. Агент проверяет файлы журналов, соответствующие указанному шаблону имени на локальном диске.
  2. Каждая запись в журнале собирается и отправляется в Azure Monitor. Входящий поток, определенный пользователем, используется для анализа данных журнала в столбцы.
  3. Преобразование по умолчанию используется, если схема входящего потока соответствует схеме целевой таблицы.

Снимок экрана: запрос журнала, возвращающий результаты коллекции файлов с разделителями-запятыми.

Требования к json-файлам и рекомендации

Файл, отслеживающий агент Azure Monitor, должен соответствовать следующим требованиям:

  • Файл должен храниться на локальном диске компьютера с агентом Azure Monitor в каталоге, который отслеживается.
  • Каждая запись должна быть очерчена с помощью конца строки.
  • Файл должен использовать кодировку ASCII или UTF-8. Другие форматы, например, UTF-16, не поддерживаются.
  • Новые записи должны быть добавлены в конец файла, а не перезаписывать старые записи. Перезапись приведет к потере данных.
  • Текст JSON должен содержаться в одной строке. Формат текста JSON не поддерживается. См. пример ниже.

Придерживайтесь следующих рекомендаций, чтобы убедиться, что у вас нет проблем с потерей данных или производительностью.

  • Создайте новый файл журнала каждый день, чтобы можно было легко очистить старые файлы.
  • Непрерывно очищайте файлы журналов в отслеживаемом каталоге. Отслеживание большого количества файлов журналов может ускорить использование ЦП и памяти агента. Подождите по крайней мере 2 дня, чтобы обеспечить достаточное время для обработки всех журналов.
  • Не переименуйте файл, соответствующий шаблону сканирования файлов, другому имени, который также соответствует шаблону сканирования файлов. Это приведет к приему повторяющихся данных.
  • Не переименуйте или не копируйте большие файлы журнала, соответствующие шаблону сканирования файлов в отслеживаемый каталог. Если необходимо, не превышать 50 МБ в минуту.

Пользовательская таблица

Прежде чем собирать данные журнала из JSON-файла, необходимо создать настраиваемую таблицу в рабочей области Log Analytics для получения данных. Схема таблицы должна соответствовать столбцам входящего потока или добавить преобразование, чтобы убедиться, что выходная схема соответствует таблице.

Предупреждение

Не следует использовать существующую пользовательскую таблицу, используемую агентом Log Analytics. Устаревшие агенты не смогут записывать в таблицу после записи в нее первого агента Azure Monitor. Создайте новую таблицу для агента Azure Monitor, чтобы предотвратить потерю данных агента Log Analytics.

Например, можно использовать следующий сценарий 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-файла

Примечание.

В настоящее время прием пользовательских файлов JSON на основе агента находится в предварительной версии и еще не имеет полного пользовательского интерфейса на портале. Хотя вы можете создать DCR с помощью портала, необходимо изменить его, чтобы определить столбцы в входящем потоке. В этом разделе содержатся сведения о создании DCR с помощью шаблона ARM.

Схема входящего потока

Примечание.

Поддержка с несколькими линиями, использующая метку времени для событий с разделителями, теперь доступна

JSON-файлы включают имя свойства с каждым значением, а входящий поток в DCR должен содержать столбец, соответствующий имени каждого свойства. Необходимо изменить columns раздел шаблона ARM со столбцами из журнала.

В следующей таблице описаны необязательные столбцы, которые можно включить в дополнение к столбцам, определяющим данные в файле журнала.

Column Type Описание
TimeGenerated datetime Время создания записи. Это значение будет автоматически заполнено временем добавления записи в рабочую область Log Analytics, если она не включена в входящий поток.
FilePath строка Если добавить этот столбец в входящий поток в DCR, он будет заполнен путем к файлу журнала. Этот столбец не создается автоматически и не может быть добавлен с помощью портала. Необходимо вручную изменить DCR, созданный порталом, или создать DCR с помощью другого метода, где можно явно определить входящий поток.
Computer строка Если добавить этот столбец в входящий поток в DCR, он будет заполнен именем компьютера с файлом журнала. Этот столбец не создается автоматически и не может быть добавлен с помощью портала. Необходимо вручную изменить DCR, созданный порталом, или создать DCR с помощью другого метода, где можно явно определить входящий поток.

Преобразование

Преобразование потенциально изменяет входящий поток для фильтрации записей или изменения схемы в соответствии с целевой таблицей. Если схема входящего потока совпадает с целевой таблицей, можно использовать преобразование sourceпо умолчанию. В противном случае измените transformKql раздел шаблона TEe ARM с помощью запроса KQL, возвращающего необходимую схему.

Шаблон ARM

Используйте следующий шаблон ARM для создания DCR для сбора файлов журнала JSON, внося изменения, описанные в предыдущих разделах. В следующей таблице описываются параметры, требующие значений при развертывании шаблона.

Параметр Description
Имя правила сбора данных Уникальное имя DCR.
Идентификатор ресурса конечной точки сбора данных Идентификатор ресурса конечной точки сбора данных (DCE).
Расположение Регион для DCR. Должно быть то же расположение, что и рабочая область Log Analytics.
Шаблоны файлов Определяет расположение и имя файлов журнала на локальном диске. Используйте подстановочный знак для имен файлов, которые различаются, например при создании нового файла каждый день с новым именем. Можно ввести несколько шаблонов файлов, разделенных запятыми (AMA версии 1.26 или более поздней, необходимой для нескольких шаблонов файлов в Linux).

Примеры:
— C:\Logs\MyLog.json
— C:\Logs\MyLog*.json
— C:\App01\AppLog.json, C:\App02\AppLog.json
- /var/mylog.json
- /var/mylog*.json
Имя таблицы Имя целевой таблицы в рабочей области Log Analytics.
Идентификатор ресурса рабочей области Идентификатор ресурса рабочей области Log Analytics с целевой таблицей.
timeFormat Поддерживаются следующие форматы. Используйте строки кавычки в шаблоне ARM. Не включать пример времени, который находится в скобках.
- "гггг-ММ-ддTHH:мм:ssk" (2024-10-29T18:28:34)
- "ГГГГ-ММ-ДД ЧЧ:ММ:SS" (2024-10-29 18:28:34)
- "M/D/YYYY HH:MM:SS AM/PM" (10/29/2024 06:28:34 ВЕЧЕРА)
- "Mon DD, ГГГГ ЧЧ:ММ:SS" (октябрь[ober] 29, 2024 18:28:34)
- "yMMdd HH:mm:ss" (241029 18:28:34)
- "ddMMyy HH:mm:ss" (291024 18:28:34)
- "MMM d HH:mm:ss" (29 октября 18:28:34)
- "dd/MMM/гггг:HH:mm:ss zzz" (14/окт/2024:18:28:34 -00)

Внимание

При создании DCR с помощью шаблона ARM необходимо связать DCR с агентами, которые будут использовать его. Вы можете изменить DCR в портал Azure и выбрать агенты, как описано в разделе "Добавление ресурсов".

{
    "$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 соответствует схеме в файле журнала.
  • Убедитесь, что схема целевой таблицы соответствует входящему потоку или что у вас есть преобразование, которое преобразует входящий поток в правильную схему.
  • См. операцию проверки, чтобы проверить, является ли агент операционным, а данные получены.

Следующие шаги

Дополнительные сведения: