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


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

Многие приложения и службы будут записывать сведения в текстовые файлы вместо стандартных служб ведения журнала, таких как журнал событий Windows или Системный журнал. Если эти данные хранятся в формате JSON, их можно собирать с помощью Azure Monitor в правиле сбора данных (DCR) на основе пользовательских журналов JSON.

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

Замечание

Чтобы работать с определением DCR напрямую или развертывать с другими методами, такими как шаблоны ARM, см. примеры правил сбора данных (DCR) в Azure Monitor.

Предпосылки

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

Настройка настраиваемого источника данных JSON-файла

Создайте DCR с помощью процесса сбора данных из клиента виртуальной машины с помощью Azure Monitor. На вкладке DCR "Сбор и Доставка" выберите Пользовательские журналы JSON в раскрывающемся меню Тип источника данных.

Снимок экрана, на котором показана конфигурация коллекции ФАЙЛОВ JSON.

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

Настройки Описание
Шаблон файлов Определяет расположение и имя файлов журнала на локальном диске. Используйте подстановочный знак для имен файлов, которые различаются, например при создании нового файла каждый день с новым именем. Можно ввести несколько шаблонов файлов, разделенных запятыми. Подстановочные знаки (*) можно использовать только в имени файла и имени папки первого уровня над именем файла.

Примеры.
— C:\Logs\MyLog.txt
— C:\Logs\MyLog*.txt
-C:\Logs\IIS*\*.logs
— C:\App01\AppLog.txt, C:\App02\AppLog.txt
- /var/mylog.log
- /var/mylog*.log
Имя таблицы Имя целевой таблицы в рабочем пространстве Log Analytics.
Преобразуй Преобразование данных во время загрузки для фильтрации записей или форматирования входящих данных для целевой таблицы. Используйте source, чтобы оставить входящие данные без изменений. См. пример преобразования .
Схема JSON Свойства, подлежащие сбору из файла журнала JSON, а затем отправке в целевую таблицу. Единственным обязательным свойством является TimeGenerated. Если это значение не предоставляется JSON-файлом, будет использоваться время приема. Другие столбцы, описанные в таблице рабочей области Log Analytics , которые не требуются, также могут быть включены и будут автоматически заполнены. Любые другие свойства заполняют столбцы в таблице с тем же именем. Убедитесь, что свойства, соответствующие столбцам таблицы, используют тот же тип данных, что и соответствующий столбец.

На рисунке выше показана схема JSON для примера JSON-файла, показанного в требованиях к JSON-файлам и рекомендациях.

Добавить пункты назначения

Пользовательские журналы JSON можно отправлять только в рабочую область Log Analytics, где она хранится в создаваемой пользовательской таблице . Добавьте назначение типа журналы Azure Monitor и выберите рабочую область Log Analytics. Вы можете добавить только одну рабочую область в DCR для пользовательского источника данных журнала JSON. Если вам нужно несколько направлений, создайте несколько DCRs. Обратите внимание, что это приведет к отправке повторяющихся данных на каждый из них, что приведет к дополнительным затратам.

Снимок экрана, показывающий настройку назначения данных в журналах Azure Monitor для правила сбора данных.

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

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

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

Ниже приведен пример типичного файла журнала JSON, который можно собрать с помощью Azure Monitor. К ним относятся поля: Time, Code, Severity,Module и Message.

{"Time":"2025-03-07 13:17:34","Code":1423,"Severity":"Error","Module":"Sales","Message":"Unable to connect to pricing service."}
{"Time":"2025-03-07 13:18:23","Code":1420,"Severity":"Information","Module":"Sales","Message":"Pricing service connection established."}
{"Time":"2025-03-07 15:45:13","Code":2011,"Severity":"Warning","Module":"Procurement","Message":"Module failed and was restarted."}
{"Time":"2025-03-07 15:53:31","Code":4100,"Severity":"Information","Module":"Data","Message":"Daily backup complete."}

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

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

Таблица рабочей области Log Analytics

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

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

колонна Тип Обязательно? Описание
TimeGenerated дата/время Да Этот столбец содержит время создания записи и требуется во всех таблицах. Это значение будет автоматически заполнено временем добавления записи в рабочую область Log Analytics. Вы можете переопределить это значение, используя преобразование, установив TimeGenerated на значение из записи журнала.
Computer струна нет Если таблица содержит этот столбец, она будет заполнена именем компьютера, из который была собрана запись журнала.
FilePath струна нет Если таблица содержит этот столбец, она будет заполнена путем к файлу журнала, из который была собрана запись журнала.

В следующем примере показан запрос, возвращающий данные из таблицы, созданной для примера JSON-файла, показанного выше. Он был собран с помощью DCR с примером схемы JSON, показанной выше. Поскольку данные JSON не включают свойство для TimeGenerated, используется время приема данных. Столбцы Computer и FilePath также заполняются автоматически.

Снимок экрана: запрос журнала, возвращающий результаты сбора журнала JSON.

Создание настраиваемой таблицы

Если целевая таблица еще не существует, необходимо создать ее перед созданием DCR. См. статью "Создание настраиваемой таблицы" для ознакомления с различными методами создания таблицы. Например, можно использовать следующий скрипт PowerShell для создания настраиваемой таблицы для получения данных из примера JSON-файла выше. В этом примере также добавляются необязательные столбцы.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "dateTime"
                    }, 
                    {
                        "name": "Computer",
                        "type": "string"
                    },
                    {
                        "name": "FilePath",
                        "type": "string"
                    },
                    {
                        "name": "Time",
                        "type": "dateTime"
                    },
                    {
                        "name": "Code",
                        "type": "int"
                    },
                    {
                        "name": "Severity",
                        "type": "string"
                    },
                    {
                        "name": "Module",
                        "type": "string"
                    },
                    {
                        "name": "Message",
                        "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

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

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

Например, в приведенном выше примере запись журнала содержит Time поле, содержащее время создания записи журнала. Вместо хранения этого столбца в целевой таблице можно использовать следующее преобразование, чтобы сопоставить значение Time свойства с TimeGenerated.

source | extend TimeGenerated = todatetime(Time) | project-away Time

Снимок экрана: конфигурация источника данных JSON с преобразованием.

Это приведет к выполнению следующего журнального запроса. Обратите внимание, что Time столбец пуст, а значение этого свойства используется для TimeGenerated.

Снимок экрана, демонстрирующий запрос журнала, возвращающий результаты собранного JSON-журнала с преобразованием.

Устранение неполадок

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

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

Дальнейшие шаги