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

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

Примечание.

Прием JSON находится в предварительной версии в настоящее время.

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

Чтобы выполнить эту процедуру, вам потребуется:

  • Рабочая область Log Analytics, в которой у вас есть как минимум права участника.

  • Одна или две конечные точки сбора данных в зависимости от того, находятся ли виртуальная машина и рабочая область Log Analytics в одном регионе.

    Дополнительные сведения см. в статье о настройке конечных точек сбора данных на основе развертывания.

  • Разрешения на создание объектов правила сбора данных в рабочей области.

  • Текст JSON должен содержаться в одной строке для правильного приема. Формат текста JSON (файла) не поддерживается.

  • Виртуальная машина, масштабируемый набор виртуальных машин, локальный сервер с поддержкой Arc или агент мониторинга Azure в локальном клиенте Windows, который записывает журналы в текстовый или JSON-файл.

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

    • Храните файлы на локальном диске компьютера, на котором запущен агент Azure Monitor, и в каталоге, который отслеживается.
    • Выполните делайнацию конца записи с окончанием строки.
    • Используйте кодировку ASCII или UTF-8. Другие форматы, например, UTF-16, не поддерживаются.
    • Создавайте новый файл журнала каждый день, чтобы можно было легко удалить старые файлы.
    • Удалите все файлы журналов в отслеживаемом каталоге. Отслеживание большого количества файлов журналов может ускорить использование ЦП и памяти агента. Подождите по крайней мере 2 дня, чтобы обеспечить достаточное время для обработки всех журналов.
    • Не перезаписывать существующий файл новыми записями. К концу файла следует добавлять только новые записи. Перезапись приведет к потере данных.
    • Не переименуйте файл в новое имя, а затем откройте новый файл с тем же именем. Это может привести к потере данных.
    • Не переименуйте или не копируйте большие файлы журнала, соответствующие шаблону сканирования файлов в отслеживаемом каталоге. Если необходимо, не превышать 50 МБ в минуту.
    • Не переименуйте файл, соответствующий шаблону сканирования файлов, новому имени, который также соответствует шаблону сканирования файлов. Это приведет к приему повторяющихся данных.

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

Таблица, созданная в скрипте, содержит два столбца:

  • TimeGenerated (datetime) [Обязательный]
  • RawData (строка) [Необязательно, если указана схема таблицы]
  • FilePath (string) [Необязательно]
  • YourOptionalColumn (строка) [Необязательно]

Схема таблицы по умолчанию для данных журнала, собранных из текстовых файлов, — TimeGenerated и RawData. Добавление FilePath в любую команду является необязательным. Если вы знаете, что окончательная схема или источник является журналом JSON, вы можете добавить окончательные столбцы в скрипт перед созданием таблицы. Вы всегда можете добавлять столбцы с помощью пользовательского интерфейса таблицы Log Analytics позже.

Имена столбцов и атрибуты JSON должны точно совпадать, чтобы автоматически анализировать таблицу. Оба столбца и атрибуты JSON чувствительны к регистру. Например, Rawdata данные о событии не собираются. Это должно быть RawData. Прием приведет к удалению атрибутов JSON, не имеющих соответствующего столбца.

Самый простой способ сделать вызов REST — из командной строки Azure Cloud PowerShell (CLI). Чтобы открыть оболочку, перейдите к портал Azure, нажмите кнопку Cloud Shell и выберите PowerShell. Если вы впервые используете Azure Cloud PowerShell, вам потребуется ознакомиться с мастером одноразовой настройки.

Скопируйте и вставьте этот скрипт в PowerShell, чтобы создать таблицу в рабочей области:

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "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

Вы должны получить ответ 200 и подробные сведения о созданной таблице.

Создание правила сбора данных для текстового или JSON-файла

Правило сбора данных определяет следующее:

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

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

Примечание.

Чтобы отправлять данные между клиентами, необходимо сначала включить Azure Lighthouse.

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

Чтобы создать правило сбора данных в портал Azure, выполните следующие действия.

  1. В меню "Монитор" выберите "Правила сбора данных".

  2. Выберите "Создать", чтобы создать новое правило сбора данных и связи.

    Снимок экрана: кнопка

  3. Введите имя правила и укажите подписку, группу ресурсов, регион, тип платформы и конечную точку сбора данных:

    • Параметр Регион указывает, где будет создано правило сбора данных. Виртуальные машины и их связи могут находиться в любой подписке или группе ресурсов в клиенте.
    • Параметр Тип платформы указывает тип ресурсов, к которому применяется правило. Настраиваемый параметр позволяет использовать как типы Windows, так и Для Linux.
    • Конечная точка сбора данных указывает конечную точку сбора данных, в которую агент Azure Monitor отправляет собранные данные. Эта конечная точка сбора данных должна находиться в том же регионе, что и рабочая область Log Analytics. Дополнительные сведения см. в статье о настройке конечных точек сбора данных на основе развертывания.

    Снимок экрана: вкладка

  4. На вкладке "Ресурсы":

    1. Выберите +Добавить ресурсы и свяжите ресурсы с правилом сбора данных. Ресурсы могут быть виртуальными машинами, Масштабируемые наборы виртуальных машин и Azure Arc для серверов. Портал Azure устанавливает агент Azure Monitor на ресурсы, которые еще не установлены.

      Внимание

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

    2. Выберите "Включить конечные точки сбора данных".

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

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

    Снимок экрана: вкладка

  5. На вкладке Сбор и доставка нажмите Добавить источник данных, чтобы добавить источник данных и задать назначение.

  6. В раскрывающемся списке типа источника данных выберите настраиваемые текстовые журналы или журналы JSON.

  7. Укажите следующую информацию:

    • Шаблон файла— определяет расположение файлов журнала на локальном диске. Можно ввести несколько шаблонов файлов, разделенных запятыми (в Linux, AMA версии 1.26 или более поздней требуется для сбора из разделенного запятыми списка шаблонов файлов).

      Примеры допустимых входных данных:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Примечание.

      Несколько файлов журнала одного типа обычно существуют в одном каталоге. Например, компьютер может создавать новый файл каждый день, чтобы предотвратить увеличение размера файла журнала. Для сбора данных журнала в этом сценарии можно использовать дикий файл карта. Используйте формат C:\directoryA\directoryB\*MyLog.txt для Windows и /var/*.log Linux. Не поддерживается дикий каталог карта.

    • Имя таблицы — имя целевой таблицы, созданной в рабочей области Log Analytics. Дополнительные сведения см. в разделе "Создание настраиваемой таблицы".

    • Разделитель записей — будет использоваться в будущем, чтобы разрешить разделители, отличные от поддерживаемого в настоящее время конца строки (/r/n).

    • Преобразование. Добавьте преобразование во время приема или оставьте источник, если не нужно преобразовывать собранные данные.

  8. На вкладке Назначение добавьте одно или несколько назначений для источника данных. Можно выбрать несколько назначений одного или разных типов. Например, можно выбрать несколько рабочих областей Log Analytics, которые также называются многодомными.

    Снимок экрана: вкладка назначения экрана

  9. Выберите "Проверка и создание ", чтобы просмотреть сведения о правиле сбора данных и сопоставлении с набором виртуальных машин.

  10. Выберите Создать, чтобы создать правило сбора данных.

Примечание.

После создания правила сбора данных может потребоваться до 10 минут.

Пример запросов журнала

Используемые здесь имена столбцов приведены только для примера. Скорее всего, имена столбцов для журнала будут отличаться.

  • Подсчитайте количество событий по коду.

    MyApp_CL
    | summarize count() by code
    

Пример правила генерации оповещения

  • Создание правила генерации оповещений для любого события ошибки.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

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

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

Проверка приема данных в настраиваемую таблицу

Начните с проверка, если какие-либо записи были приняты в настраиваемую таблицу журналов, выполнив следующий запрос в Log Analytics:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

Если записи не возвращаются, проверка другие разделы для возможных причин. Этот запрос ищет записи за последние два дня, но вы можете изменить другой диапазон времени. Для отображения новых данных в таблице может потребоваться 5–7 минут. Агент Azure Monitor собирает только данные, записанные в текстовый или JSON-файл после связывания правила сбора данных с виртуальной машиной.

Убедитесь, что вы создали настраиваемую таблицу

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

Проверка успешной отправки пульса агентом

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

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"]
        }
    ]

Этот шаблон файла должен соответствовать журналам на компьютере агента.

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

Использование средства устранения неполадок агента Azure Monitor

Используйте средство устранения неполадок агента Azure Monitor для поиска распространенных проблем и совместного использования результатов с корпорацией Майкрософт.

Убедитесь, что журналы заполняются

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

# 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)

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

См. также: