Tutorial: adicionar uma transformação na regra de coleta de dados do workspace ao Azure Monitor usando os modelos do Resource Manager
Este tutorial orienta você pela configuração de uma transformação de amostra em uma regra de coleta de dados de workspace usando modelos do Resource Manager. As transformações no Azure Monitor permitem que você filtre ou modifique os dados de entrada antes de serem enviados para seu destino. As transformações de workspace oferecem suporte para transformações em tempo de ingestão para fluxos de trabalho que ainda não usam o pipeline de ingestão de dados do Azure Monitor.
As transformações de workspace são armazenadas juntas em uma única DCR (regra de coleta de dados) para o workspace, chamada DCR do workspace. Cada transformação está associada a uma tabela específica. A transformação será aplicada a todos os dados enviados a essa tabela de qualquer fluxo de trabalho que não esteja usando um DCR.
Observação
Este tutorial usa modelos do Resource Manager e a API REST para configurar uma transformação de workspace. Confira Tutorial: Adicionar uma transformação na regra de coleta de dados do workspace ao Azure Monitor usando o portal do Azure para o mesmo tutorial usando o portal do Azure.
Neste tutorial, você aprenderá a:
- Configure a transformação de workspace para uma tabela em um workspace do Log Analytics.
- Gravar uma consulta de log para uma transformação de tempo de ingestão
Observação
Este tutorial usa o PowerShell do Azure Cloud Shell para fazer chamadas à API REST usando a API Tables do Azure Monitor e o portal do Azure para instalar modelos do Resource Manager. Você pode usar qualquer outro método para fazer essas chamadas.
Pré-requisitos
Para concluir este tutorial, você precisará do seguinte:
- Workspace do Log Analytics em que você tem pelo menos direitos de colaborador.
- Permissões para criar objetos de Regra de Coleta de Dados no workspace.
- A tabela já deve ter alguns dados.
- A tabela ainda não pode ser vinculada ao DCR de transformação do workspace.
Visão geral do tutorial
Neste tutorial, você reduzirá o requisito de armazenamento para a tabela LAQueryLogs
filtrando determinados registros. Você também removerá o conteúdo de uma coluna ao analisar os dados da coluna para armazenar uma parte dos dados em uma coluna personalizada. A tabela LAQueryLogs é criada quando você habilita a auditoria de consulta de log em um workspace, mas isso só é usado como exemplo para o tutorial. Você pode usar esse mesmo processo básico para criar uma transformação para qualquer tabela com suporte em um workspace do Log Analytics.
Habilitar logs de auditoria de consulta
Você precisa habilitar a auditoria de consulta para o workspace para criar a tabela LAQueryLogs
com a qual trabalhará. Isso não é necessário para todas as transformações de tempo de ingestão. É apenas para gerar os dados de exemplo que essa transformação de exemplo usará.
No menu Workspaces do Log Analytics no portal do Azure, selecione Configurações de diagnóstico e, em seguida, Adicionar configuração de diagnóstico.
Forneça um nome para a configuração de diagnóstico e selecione o workspace para que os dados de auditoria sejam armazenados no mesmo workspace. Selecione a categoria Auditoria e clique em Salvar para salvar a configuração de diagnóstico e fechar a página de configuração de diagnóstico.
Selecione Logs e, em seguida, execute algumas consultas para preencher
LAQueryLogs
com alguns dados. Essas consultas não precisam retornar dados.
Esquema da tabela do Azure
Antes de criar a transformação, as duas alterações a seguir devem ser feitas na tabela:
- A tabela deve ser habilitada para transformação de tworkspace. Isso é necessário para qualquer tabela que terá uma transformação, mesmo que a transformação não modifique o esquema da tabela.
- Todas as colunas adicionais preenchidas pela transformação devem ser adicionadas à tabela.
Use a API Tables - Update para configurar a tabela com o código do PowerShell abaixo. Chamar a API habilita a tabela para transformações de workspace, independentemente de colunas personalizadas serem definidas. Neste exemplo, ela inclui uma coluna personalizada chamada Resources_CF, que será preenchida com a consulta de transformação.
Importante
Todas as colunas personalizadas adicionadas a uma tabela interna devem terminar em _CF. Colunas adicionadas a uma tabela personalizada (uma tabela com um nome que termina em _CL) não precisam ter esse sufixo.
Clique no botão Cloud Shell no portal do Azure e verifique se o ambiente está definido como PowerShell.
Copie o código do PowerShell a seguir e substitua o parâmetro Path pelos detalhes do workspace.
$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
Cole o código no prompt do Cloud Shell para executá-lo.
Você pode verificar se a coluna foi adicionada acessando o menu Workspaces do Log Analytics no portal do Azure. Selecione Logs para abrir o Log Analytics e, em seguida, expanda a tabela
LAQueryLogs
para exibir as colunas.
Definir consulta de transformação
Use o Log Analytics para testar a consulta de transformação, antes de adicioná-la a uma regra de coleta de dados.
Abra o workspace no menu Workspaces do Log Analytics no portal do Azure e selecione Logs para abrir o Log Analytics.
Execute a consulta a seguir para exibir o conteúdo da tabela
LAQueryLogs
. Observe o conteúdo da colunaRequestContext
. A transformação recuperará o nome do workspace dessa coluna e removerá o restante dos dados.LAQueryLogs | take 10
Modifique a consulta de acordo com o seguinte:
LAQueryLogs | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Workspace_CF = tostring(Context['workspaces'][0]) | project-away RequestContext, Context
Isso faz as seguintes alterações:
- Remova as linhas relacionadas à consulta da própria tabela
LAQueryLogs
para economizar espaço, pois essas entradas de log não são úteis. - Adicione uma coluna para o nome do workspace consultado.
- Remova os dados da coluna
RequestContext
para economizar espaço.
- Remova as linhas relacionadas à consulta da própria tabela
Faça as seguintes alterações na consulta para usá-la na transformação:
- Em vez de especificar um nome de tabela (
LAQueryLogs
, nesse caso) como a fonte de dados para essa consulta, use a palavra-chavesource
. Essa é uma tabela virtual que sempre representa os dados de entrada em uma consulta de transformação. - Remova os operadores que não têm suporte por consultas de transformação. Consulte Recursos de KQL com suporte para obter uma lista dos detalhes de operadores com suporte.
- Nivele a consulta para uma única linha para que possa se ajustar ao JSON da DCR.
Veja a seguir a consulta que você usará na transformação após essas modificações:
source | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''
- Em vez de especificar um nome de tabela (
Crie uma DCR (regra de coleta de dados)
Como essa é a primeira transformação no workspace, você precisa criar uma DCR de transformação do workspace. Se você criar transformações de workspace para outras tabelas no mesmo workspace, elas deverão ser armazenadas nesta mesma DCR.
Na caixa de pesquisa do portal do Azure, digite modelo e selecione Implantar um modelo personalizado.
Clique em Criar seu próprio modelo no editor.
Cole o modelo do Resource Manager abaixo no editor e, em seguida, clique em Salvar. Esse modelo define a DCR e contém a consulta de transformação. Você não precisa modificar esse modelo, pois ele coletará os valores para seus parâmetros.
{ "$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'))]" } } }
Na tela Implantação personalizada, especifique uma Assinatura e um Grupo de recursos para armazenar a regra de coleta de dados e, em seguida, forneça os valores definidos no modelo. Isso inclui um Nome para a regra de coleta de dados e a ID de Recurso do Workspace que você coletou em uma etapa anterior. O Local deve ser o mesmo local do workspace. A Região já estará preenchida e será usada para o local da regra de coleta de dados.
Clique em Examinar + criar e, em seguida, Criar ao examinar os detalhes.
Quando a implantação for concluída, expanda a caixa Detalhes da implantação e clique na regra de coleta de dados para exibir os detalhes. Clique em Exibição JSON.
Copie a ID de Recurso da regra de coleta de dados. Você usará isso na próxima etapa.
Vincular workspace à DCR
A etapa final para habilitar a transformação é vincular a DCR ao workspace.
Importante
Um workspace só pode ser conectado a uma única DCR e a DCR vinculada deve conter esse workspace como destino.
Use a API Workspaces - Update para configurar a tabela com o código do PowerShell abaixo.
Clique no botão Cloud Shell para abrir o Cloud Shell novamente. Copie o código do PowerShell a seguir e substitua os parâmetros pelos valores do workspace e da 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
Cole o código no prompt do Cloud Shell para executá-lo.
Testar transformação
Aguarde cerca de 30 minutos para que a transformação entre em vigor e você poderá testá-la executando uma consulta na tabela. Somente os dados enviados para a tabela após a aplicação da transformação serão afetados.
Para este tutorial, execute algumas consultas de exemplo para enviar dados para a tabela LAQueryLogs
. Inclua algumas consultas em LAQueryLogs
para que você possa verificar se a transformação filtra esses registros. Observe se a saída tem a nova coluna Workspace_CF
e se não há registros para LAQueryLogs
.
Solução de problemas
Esta seção descreve diferentes condições de erro que você pode receber e como corrigi-las.
O IntelliSense no Log Analytics não reconhece novas colunas na tabela
O cache que direciona o IntelliSense pode levar até 24 horas para ser atualizado.
A transformação em uma coluna dinâmica não está funcionando
No momento, há um problema conhecido que afeta as colunas dinâmicas. Uma solução alternativa temporária é analisar explicitamente os dados de coluna dinâmicos usando parse_json()
, antes de executar qualquer operação em relação a eles.