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


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

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

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

Замечание

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

Предпосылки

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

Настройка пользовательского источника данных текстового файла

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

Снимок экрана: конфигурация коллекции текстовых файлов.

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

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

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

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

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

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

Форматы времени

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

Формат времени Пример
ISO 8601 2024-10-29T18:28:34Z
yyyy-MM-ddTHH:mm:ssk 2024-10-29T18:28:34Z
2024-10-29T18:28:34+01:11
YYYY-MM-DD HH:MM:SS 2024-10-29 18:28:34
M/D/YYYY HH:MM:SS AM/PM 29.10.2024 18:28:34
Mon DD, YYYY HH:MM:SS 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 29 октября 18:28:34
dd/MMM/yyyy:HH:mm:ss zzz 14 октября 2024:18:28:34 -00

Требования к текстовым файлам и рекомендации

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

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

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

2024-06-21 19:17:34,1423,Error,Sales,Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,Nightly backup complete.

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

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

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

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

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

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

1 Таблица не обязательно включает RawData столбец, если для анализа данных в нескольких столбцах используется преобразование.

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

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

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

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

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

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

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

Многострочные файлы журналов

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

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

2024-06-21 19:17:34,1423,Error,Sales,
Unable to connect to pricing service.
2024-06-21 19:18:23,1420,Information,Sales,
Pricing service connection established.
2024-06-21 21:45:13,2011,Warning,Procurement,
Module failed and was restarted.
2024-06-21 23:53:31,4100,Information,Data,
Nightly backup complete.

Если формат YYYY-MM-DD HH:MM:SS метки времени используется в DCR, данные будут собираться так же, как и в предыдущем примере. Дополнительные строки будут включены в RawData столбец. Если использовался другой формат метки времени, который не соответствует дате в записи журнала, каждая запись будет собираться в виде двух отдельных записей.

Файлы журналов с разделителями

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

Пример текстового файла, показанный выше, разделен запятыми, и поля могут быть описаны следующим образом: Time, , CodeSeverityи MessageModule. Чтобы проанализировать эти данные в отдельные столбцы, добавьте каждый из столбцов в целевую таблицу и добавьте в DCR следующее преобразование.

Это важно

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

Ниже приведены важные сведения о запросе преобразования:

  • Запрос выводит свойства, соответствующие имени столбца в целевой таблице.
  • В этом примере свойство в файле журнала переименовывается Time таким образом, чтобы это значение использовалось для TimeGenerated. Если это не было предоставлено, то TimeGenerated было бы заполнено временем загрузки.
  • Так как split возвращает динамические данные, необходимо использовать такие функции, как tostring и toint для преобразования данных в правильный скалярный тип.
source | project d = split(RawData,",") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])

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

Получение этих данных с помощью запроса журнала вернет следующие результаты.

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

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

Следуйте этим шагам, если вы не получаете ожидаемые данные из текстового журнала.

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

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