Transformações de recolha de dados no Azure Monitor

Com as transformações no Azure Monitor, pode filtrar ou modificar os dados recebidos antes de serem enviados para uma área de trabalho do Log Analytics. Este artigo fornece uma descrição básica das transformações e como são implementadas. Fornece ligações para outros conteúdos para criar uma transformação.

Porquê utilizar transformações

A tabela seguinte descreve os diferentes objetivos que pode alcançar ao utilizar transformações.

Categoria Detalhes
Remover dados confidenciais Poderá ter uma origem de dados que envia informações que não pretende armazenar por motivos de privacidade ou conformidade.

Filtrar informações confidenciais. Filtre linhas inteiras ou colunas específicas que contenham informações confidenciais.

Obfuscate informações confidenciais. Substitua informações como dígitos num endereço IP ou número de telefone por um caráter comum.

Enviar para uma tabela alternativa. Enviar registos confidenciais para uma tabela alternativa com uma configuração de controlo de acesso baseada em funções diferente.
Melhorar dados com mais ou informações calculadas Utilize uma transformação para adicionar informações a dados que fornecem contexto empresarial ou simplificam a consulta dos dados mais tarde.

Adicione uma coluna com mais informações. Por exemplo, pode adicionar uma coluna que identifica se um endereço IP noutra coluna é interno ou externo.

Adicione informações específicas da empresa. Por exemplo, pode adicionar uma coluna que indica uma divisão da empresa com base nas informações de localização noutras colunas.
Reduzir os custos de dados Uma vez que lhe é cobrado o custo de ingestão de dados enviados para uma área de trabalho do Log Analytics, quer filtrar quaisquer dados de que não necessite para reduzir os custos.

Remover linhas inteiras. Por exemplo, pode ter uma definição de diagnóstico para recolher registos de recursos de um determinado recurso, mas não requer todas as entradas de registo geradas. Crie uma transformação que filtre registos que correspondam a determinados critérios.

Remover uma coluna de cada linha. Por exemplo, os seus dados podem incluir colunas com dados redundantes ou com um valor mínimo. Crie uma transformação que filtre as colunas que não são necessárias.

Analisar dados importantes de uma coluna. Poderá ter uma tabela com dados valiosos enterrados numa determinada coluna. Utilize uma transformação para analisar os dados valiosos numa nova coluna e remover o original.

Enviar determinadas linhas para registos básicos. Envie linhas nos seus dados que necessitem de capacidades básicas de consulta para tabelas de registos básicas para um custo de ingestão mais baixo.

Tabelas suportadas

Pode aplicar transformações às seguintes tabelas numa área de trabalho do Log Analytics:

Como funcionam as transformações

As transformações são realizadas no Azure Monitor no pipeline de ingestão de dados após a origem de dados fornecer os dados e antes de serem enviados para o destino. A origem de dados pode executar a sua própria filtragem antes de enviar dados, mas, em seguida, depender da transformação para manipulação adicional antes de ser enviada para o destino.

As transformações são definidas numa regra de recolha de dados (DCR) e utilizam uma instrução Linguagem de Pesquisa Kusto (KQL) que é aplicada individualmente a cada entrada nos dados recebidos. Tem de compreender o formato dos dados recebidos e criar a saída na estrutura esperada pelo destino.

Por exemplo, um DCR que recolhe dados de uma máquina virtual com o Agente do Azure Monitor especificaria dados específicos a recolher do sistema operativo cliente. Também pode incluir uma transformação que seria aplicada a esses dados depois de serem enviados para o pipeline de ingestão de dados que filtram ainda mais os dados ou adicionam uma coluna calculada. O diagrama seguinte mostra este fluxo de trabalho.

Diagrama que mostra a transformação do tempo de ingestão para o Agente do Azure Monitor.

Outro exemplo são os dados enviados a partir de uma aplicação personalizada com a API de ingestão de registos. Neste caso, a aplicação envia os dados para um ponto final de recolha de dados e especifica um DCR na chamada à API REST. O DCR inclui a transformação e a área de trabalho e tabela de destino.

Diagrama que mostra a transformação do tempo de ingestão para a aplicação personalizada com a API de ingestão de registos.

DCR de transformação da área de trabalho

O DCR de transformação da área de trabalho é um DCR especial que é aplicado diretamente a uma área de trabalho do Log Analytics. Inclui transformações predefinidas para uma ou mais tabelas suportadas. Estas transformações são aplicadas a quaisquer dados enviados para estas tabelas, a menos que esses dados tenham sido provenientes de outro DCR.

Por exemplo, se criar uma transformação no DCR de transformação da área de trabalho para a Event tabela, esta será aplicada a eventos recolhidos por máquinas virtuais que executem o agente do Log Analytics porque este agente não utiliza um DCR. A transformação seria ignorada por quaisquer dados enviados do Agente do Azure Monitor porque utiliza um DCR e seria de esperar que fornecesse a sua própria transformação.

Uma utilização comum do DCR de transformação da área de trabalho é a recolha de registos de recursos configurados com uma definição de diagnóstico. O exemplo seguinte mostra este processo.

Diagrama que mostra a transformação da área de trabalho para registos de recursos configurados com definições de diagnóstico.

Vários destinos

Com as transformações, pode enviar dados para vários destinos numa área de trabalho do Log Analytics com um único DCR. Fornece uma consulta KQL para cada destino e os resultados de cada consulta são enviados para a localização correspondente. Pode enviar diferentes conjuntos de dados para tabelas diferentes ou utilizar várias consultas para enviar diferentes conjuntos de dados para a mesma tabela.

Por exemplo, pode enviar dados de eventos para o Azure Monitor com a API de Ingestão de Registos. A maioria dos eventos deve ser enviada para uma tabela de análise onde pode ser consultada regularmente, enquanto os eventos de auditoria devem ser enviados para uma tabela personalizada configurada para registos básicos para reduzir os custos.

Para utilizar vários destinos, tem de criar manualmente um novo DCR ou editar um existente. Veja a secção Exemplos para obter exemplos de DCRs que utilizam vários destinos.

Importante

Atualmente, as tabelas no DCR têm de estar na mesma área de trabalho do Log Analytics. Para enviar para várias áreas de trabalho a partir de uma única origem de dados, utilize vários DCRs e configure a sua aplicação para enviar os dados para cada uma.

Diagrama que mostra a transformação a enviar dados para múltiplas tabelas.

Criar uma transformação

Existem vários métodos para criar transformações consoante o método de recolha de dados. A tabela seguinte lista as orientações para diferentes métodos de criação de transformações.

Tipo Referência
API de ingestão de registos com transformação Enviar dados para os Registos do Azure Monitor com a API REST (portal do Azure)
Enviar dados para os Registos do Azure Monitor com a API REST (modelos do Azure Resource Manager)
Transformação na área de trabalho DCR Adicionar a transformação da área de trabalho aos Registos do Azure Monitor com o portal do Azure
Adicionar a transformação da área de trabalho aos Registos do Azure Monitor com modelos de Resource Manager

Custo das transformações

Embora as transformações em si não incorrem em custos diretos, os seguintes cenários podem resultar em custos adicionais:

  • Se uma transformação aumentar o tamanho dos dados recebidos, como ao adicionar uma coluna calculada, ser-lhe-á cobrada a taxa de ingestão padrão dos dados adicionais.
  • Se uma transformação reduzir os dados recebidos em mais de 50%, ser-lhe-á cobrada a quantidade de dados filtrados acima de 50%.

Para calcular o custo de processamento de dados resultante das transformações, utilize a seguinte fórmula: [GB filtrado por transformações] - ([Total de GB ingeridos] /2). Por exemplo, se ingerir 100 GB de dados e as transformações removerem 70 GB, ser-lhe-ão cobrados 70 GB - (100 GB/2), ou seja, 20 GB. Este cálculo é feito por regra de recolha de dados e por dia. Para evitar este custo, recomenda-se filtrar os dados recebidos através de métodos alternativos antes de aplicar transformações. Ao fazê-lo, pode reduzir a quantidade de dados processados por transformações e, por conseguinte, minimizar quaisquer custos adicionais.

Veja Preços do Azure Monitor para obter os custos atuais para ingestão e retenção de dados de registo no Azure Monitor.

Importante

Se o Azure Sentinel estiver ativado para a área de trabalho do Log Analytics, não haverá custos de ingestão de filtragem, independentemente da quantidade de dados que a transformação filtra.

Amostras

Os seguintes modelos de Resource Manager mostram DCRs de exemplo com padrões diferentes. Pode utilizar estes modelos como um ponto de partida para criar DCRs com transformações para os seus próprios cenários.

Destino único

O exemplo seguinte é um DCR para o Agente do Azure Monitor que envia dados para a Syslog tabela. Neste exemplo, a transformação filtra os dados dos registos com error na mensagem.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        {
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "singleDestinationDCR", 
            "apiVersion": "2021-09-01-preview", 
            "location": "eastus", 
            "properties": { 
              "dataSources": { 
                "syslog": [ 
                  { 
                    "name": "sysLogsDataSource", 
                    "streams": [ 
                      "Microsoft-Syslog" 
                    ], 
                    "facilityNames": [ 
                      "auth",
                      "authpriv",
                      "cron",
                      "daemon",
                      "mark",
                      "kern",
                      "mail",
                      "news",
                      "syslog",
                      "user",
                      "uucp"
                    ], 
                    "logLevels": [ 
                      "Debug", 
                      "Critical", 
                      "Emergency" 
                    ] 
                  } 
                ] 
              }, 
              "destinations": { 
                "logAnalytics": [ 
                  { 
                    "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                    "name": "centralWorkspace" 
                  } 
                ] 
              }, 
              "dataFlows": [ 
                { 
                  "streams": [ 
                    "Microsoft-Syslog" 
                  ], 
                  "transformKql": "source | where message has 'error'", 
                  "destinations": [ 
                    "centralWorkspace" 
                  ] 
                } 
              ] 
            }
        }
    ]
} 

Várias tabelas do Azure

O exemplo seguinte é um DCR para dados da API de Ingestão de Registos que envia dados para as Syslog tabelas e SecurityEvent . Este DCR requer uma separação dataFlow para cada um com um diferente transformKql e OutputStream para cada um. Neste exemplo, todos os dados recebidos são enviados para a Syslog tabela enquanto os dados maliciosos também são enviados para a SecurityEvent tabela. Se não quisesse replicar os dados maliciosos em ambas as tabelas, poderia adicionar uma where instrução à primeira consulta para remover esses registos.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, Message = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | where (AdditionalContext has 'malicious traffic!' | project TimeGenerated = Time, Computer, Subject = AdditionalContext", 
                        "outputStream": "Microsoft-SecurityEvent" 
                    } 
                ] 
            } 
        }
    ]
}

Combinação de tabelas personalizadas e do Azure

O exemplo seguinte é um DCR para dados da API de Ingestão de Registos que envia dados para a Syslog tabela e para uma tabela personalizada com os dados num formato diferente. Este DCR requer uma separação dataFlow para cada um com um diferente transformKql e OutputStream para cada um.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, SyslogMessage = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | extend jsonContext = parse_json(AdditionalContext) | project TimeGenerated = Time, Computer, AdditionalContext = jsonContext, ExtendedColumn=tostring(jsonContext.CounterName)", 
                        "outputStream": "Custom-MyTable_CL" 
                    } 
                ] 
            } 
        }
    ]
}

Passos seguintes

Crie uma regra de recolha de dados e uma associação a partir de uma máquina virtual com o Agente do Azure Monitor.