Руководство. Добавление преобразования в правило сбора данных рабочей области в Azure Monitor с помощью шаблонов Resource Manager
В этом руководстве описывается настройка примера преобразования в правиле сбора данных рабочей области с помощью шаблонов Resource Manager. Преобразования в Azure Monitor позволяют фильтровать или изменять входящие данные до отправки в место назначения. Преобразования рабочей области обеспечивают поддержку преобразований времени приема для рабочих процессов, которые еще не используют конвейер приема данных Azure Monitor.
Преобразования рабочей области хранятся вместе в одном правиле сбора данных (DCR) для рабочей области. Это правило называется DCR рабочей области. Каждое преобразование связано с определенной таблицей. Преобразование применяется ко всем данным, отправленным в эту таблицу из любого рабочего процесса, не использующим DCR.
Примечание.
В этом руководстве используются шаблоны Resource Manager и REST API для настройки преобразования рабочей области. См. руководство. Добавление преобразования в правило сбора данных рабочей области в Azure Monitor с помощью портал Azure для того же руководства с помощью портал Azure.
Из этого руководства вы узнаете, как:
- Настройте преобразование рабочей области для таблицы в рабочей области Log Analytics.
- Написание запроса к журналу для преобразования времени приема.
Примечание.
В этом учебнике используется PowerShell из Azure Cloud Shell для выполнения вызовов REST API с помощью API таблиц Azure Monitor и портал Azure для установки шаблонов Resource Manager. Для выполнения этих вызовов можно использовать любой другой метод.
Необходимые компоненты
Для работы с этим руководством вам нужно следующее:
- Рабочая область Log Analytics, в которой у вас есть как минимум права участника.
- Разрешения на создание объектов правила сбора данных в рабочей области.
- В таблице уже должны быть некоторые данные.
- Эту таблицу уже нельзя связать с DCR преобразования рабочей области.
Обзор учебника
В этом учебнике вы снизите потребность в пространстве для хранения для таблицы LAQueryLogs
путем фильтрации по определенным записям. Вы также удалите содержимое столбца при анализе его данных для сохранения фрагмента данных в пользовательском столбце. Таблица LAQueryLogs создается после включения аудита запросов к журналу в рабочей области, но в этом учебнике она используется только в качестве примера. Этот же базовый процесс можно использовать для создания преобразования любой поддерживаемой таблицы в рабочей области Log Analytics.
Включение журналов аудита запросов
Чтобы создать таблицу LAQueryLogs
, с которой вы будете работать, необходимо включить аудит запросов для рабочей области. Для всех преобразований времени приема делать это не требуется. Это нужно только для создания примера данных, которые будет использовать этот пример преобразования.
В меню Рабочие области Log Analytics на портале Azure выберите Параметры диагностики, а затем — Добавить параметр диагностики.
Укажите имя для параметра диагностики и выберите ту же рабочую область, чтобы сохранять в ней данные аудита. Выберите категорию Аудит и нажмите кнопку Сохранить, чтобы сохранить параметры диагностики и закрыть страницу параметров.
Выберите Журналы, а затем выполните несколько запросов для заполнения таблицы
LAQueryLogs
данными. Необязательно, чтобы эти запросы возвращали данные.
Обновление схемы таблицы
Перед созданием преобразования необходимо внести в таблицу следующие два изменения:
- Таблица должна быть включена для преобразования рабочей области. Это необходимо для любой таблицы с преобразованием, даже если преобразование не изменяет схему таблицы.
- Все дополнительные столбцы, заполненные преобразованием, нужно добавить в таблицу.
Используйте API обновления таблиц, чтобы настроить таблицу с помощью приведенного ниже кода PowerShell. Вызов API позволяет использовать преобразования рабочей области для таблицы независимо от того, определены ли пользовательские столбцы. В этом примере он включает пользовательский столбец с именем Resources_CF, который будет заполнен запросом преобразования.
Внимание
Имена всех пользовательских столбцов, добавляемых во встроенную таблицу, должны заканчиваться на _CF. Для столбцов, добавленных в настраиваемую таблицу (таблица с именем, заканчивающимся на _CL), этот суффикс не требуется.
Нажмите кнопку Cloud Shell на портале Azure и убедитесь, что для среды задано значение PowerShell.
Скопируйте следующий код PowerShell и замените параметр Path значениями для рабочей области.
$tableParams = @' { "properties": { "schema": { "name": "LAQueryLogs", "columns": [ { "name": "Resources_CF", "description": "The list of resources, this query ran against", "type": "string", "isDefaultDisplay": true, "isHidden": false } ] } } } '@ Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/LAQueryLogs?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
Вставьте код в запрос Cloud Shell, чтобы запустить его.
Чтобы проверить, добавлен ли столбец, перейдите в меню Рабочая область Log Analytics на портале Azure. Выберите Журналы, чтобы открыть Log Analytics, а затем разверните таблицу
LAQueryLogs
, чтобы просмотреть ее столбцы.
Определение запроса преобразования
Используйте Log Analytics, чтобы протестировать запрос преобразования перед его добавлением в правило сбора данных.
Откройте рабочую область в меню Рабочие области Log Analytics на портале Azure и выберите Журналы, чтобы открыть Log Analytics.
Выполните следующий запрос, чтобы просмотреть содержимое таблицы
LAQueryLogs
. Обратите внимание на содержимое столбцаRequestContext
. Преобразование извлечет имя рабочей области из этого столбца и удалит остальные данные в нем.LAQueryLogs | take 10
Измените запрос следующим образом:
LAQueryLogs | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Workspace_CF = tostring(Context['workspaces'][0]) | project-away RequestContext, Context
Этот код вносит следующие изменения:
- Удалите строки, связанные с запросом непосредственно к таблице
LAQueryLogs
, чтобы сэкономить место, так как эти записи журнала не нужны. - Добавьте столбец для имени запрашиваемой рабочей области.
- Удалите данные из столбца
RequestContext
для экономии пространства.
- Удалите строки, связанные с запросом непосредственно к таблице
Внесите следующие изменения в запрос, чтобы использовать его в преобразовании:
- Вместо указания имени таблицы (
LAQueryLogs
в этом случае) в качестве источника данных для этого запроса используйте ключевое словоsource
. Это виртуальная таблица, которая всегда представляет входящие данные в запросе преобразования. - Удалите все операторы, которые не поддерживаются запросами преобразования. Дополнительные сведения о поддерживаемых функциях KQL см. в разделе "Поддерживаемые функции KQL".
- Сведите запрос в одну строку, чтобы его можно было поместить в JSON DCR.
Ниже приведен запрос, который будет использоваться в преобразовании после этих изменений:
source | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''
- Вместо указания имени таблицы (
Создание правила сбора данных (DCR)
Так как это первое преобразование в рабочей области, необходимо создать DCR преобразования рабочей области. При создании преобразований рабочей области для других таблиц в той же рабочей области они должны храниться в этом же DCR.
На портале Azure в поле поиска введите шаблон, а затем выберите Развернуть настраиваемый шаблон.
Выберите Создать собственный шаблон в редакторе.
Вставьте приведенный ниже шаблон Resource Manager в редактор и нажмите кнопку Сохранить. Этот шаблон определяет DCR и содержит запрос преобразования. Вам не нужно изменять этот шаблон, так как он соберет значения для своих параметров.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "dataCollectionRuleName": { "type": "string", "metadata": { "description": "Specifies the name of the Data Collection Rule to create." } }, "location": { "type": "string", "defaultValue": "westus2", "allowedValues": [ "westus2", "eastus2", "eastus2euap" ], "metadata": { "description": "Specifies the location in which to create the Data Collection Rule." } }, "workspaceResourceId": { "type": "string", "metadata": { "description": "Specifies the Azure resource ID of the Log Analytics workspace to use." } } }, "resources": [ { "type": "Microsoft.Insights/dataCollectionRules", "name": "[parameters('dataCollectionRuleName')]", "location": "[parameters('location')]", "apiVersion": "2021-09-01-preview", "kind": "WorkspaceTransforms", "properties": { "destinations": { "logAnalytics": [ { "workspaceResourceId": "[parameters('workspaceResourceId')]", "name": "clv2ws1" } ] }, "dataFlows": [ { "streams": [ "Microsoft-Table-LAQueryLogs" ], "destinations": [ "clv2ws1" ], "transformKql": "source |where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''" } ] } } ], "outputs": { "dataCollectionRuleId": { "type": "string", "value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]" } } }
На экране Настраиваемое развертывание укажите значения для параметров Подписка и Группа ресурсов, чтобы сохранить правило сбора данных, а затем укажите значения, определенные в шаблоне. К ним относятся Имя для правила сбора данных и Идентификатор ресурса рабочей области, который вы собрали на предыдущем шаге. Расположение должно быть тем же расположением, которое указано в рабочей области. Значение параметра Регион уже будет заполнено и используется в качестве расположения для правила сбора данных.
Щелкните Проверить и создать и Создать после просмотра сведений.
По завершении развертывания разверните поле Сведения о развертывании и щелкните правило сбора данных, чтобы просмотреть сведения о нем. Щелкните Представление JSON.
Скопируйте идентификатор ресурса для правила сбора данных. Он понадобится вам на следующем шаге.
Связывание рабочей области с DCR
Последним шагом для включения преобразования является связывание DCR с рабочей областью.
Внимание
Рабочая область может быть подключена только к одному DCR, а связанное DCR должно содержать эту рабочую область в качестве назначения.
Используйте API обновления рабочих областей, чтобы настроить таблицу с помощью приведенного ниже кода PowerShell.
Нажмите кнопку Cloud Shell, чтобы снова открыть Cloud Shell . Скопируйте следующий код PowerShell и замените параметры значениями для рабочей области и DCR.
$defaultDcrParams = @' { "properties": { "defaultDataCollectionRuleResourceId": "/subscriptions/{subscription}/resourceGroups/{resourcegroup}/providers/Microsoft.Insights/dataCollectionRules/{DCR}" } } '@ Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}?api-version=2021-12-01-preview" -Method PATCH -payload $defaultDcrParams
Вставьте код в запрос Cloud Shell, чтобы запустить его.
Тестовое преобразование
Преобразование вступает в силу в течение 30 минут. После этого вы можете протестировать его, выполнив запрос к таблице. Будут затронуты только данные, отправленные в таблицу после применения преобразования.
Для работы с этим учебником выполните несколько примеров запросов для отправки данных в таблицу LAQueryLogs
. Также добавьте запросы к LAQueryLogs
, чтобы убедиться, что преобразование отфильтровывает эти записи. Обратите внимание, что у выходных данных есть новый столбец Workspace_CF
, а записей для LAQueryLogs
нет.
Устранение неполадок
В этом разделе описаны различные состояния ошибок, которые могут у вас возникать, и способы их устранения.
IntelliSense в Log Analytics не распознает новые столбцы в таблице
Для обновления кэша, на базе которого работает технология IntelliSense, может потребоваться до 24 часов.
Преобразование в динамическом столбце не работает
В настоящее время существует известная ошибка, затрагивающая динамические столбцы. Временное решение заключается в анализе данных динамического столбца явным образом с помощью метода parse_json()
перед выполнением каких-либо операций с ними.