Exportar dados de um espaço de trabalho do Log Analytics para uma conta de armazenamento usando aplicativos lógicos

Este artigo descreve um método para usar os Aplicativos Lógicos do Azure para consultar dados de um espaço de trabalho do Log Analytics no Azure Monitor e enviá-los para o Armazenamento do Azure. Use esse processo quando precisar exportar seus dados de Logs do Azure Monitor para cenários de auditoria e conformidade ou para permitir que outro serviço recupere esses dados.

Outros métodos de exportação

O método discutido neste artigo descreve uma exportação agendada de uma consulta de log usando um aplicativo lógico. Outras opções para exportar dados para cenários específicos incluem:

Descrição geral

Este procedimento usa o conector Azure Monitor Logs, que permite executar uma consulta de log de um aplicativo lógico e usar sua saída em outras ações no fluxo de trabalho. O conector de Armazenamento de Blob do Azure é usado neste procedimento para enviar a saída da consulta para o armazenamento.

Screenshot that shows a Logic Apps overview.

Ao exportar dados de um espaço de trabalho do Log Analytics, limite a quantidade de dados processados pelo fluxo de trabalho do Logic Apps. Filtre e agregue seus dados de log na consulta para reduzir os dados necessários. Por exemplo, se você precisar exportar eventos de entrada, filtre os eventos necessários e projete apenas os campos obrigatórios. Por exemplo:

SecurityEvent
| where EventID == 4624 or EventID == 4625
| project TimeGenerated , Account , AccountType , Computer

Ao exportar os dados em uma agenda, use a ingestion_time() função em sua consulta para garantir que você não perca os dados que chegam atrasados. Se os dados estiverem atrasados devido a problemas de rede ou plataforma, usar o tempo de ingestão garante que os dados sejam incluídos na próxima execução de Aplicativos Lógicos. Para obter um exemplo, consulte a etapa "Adicionar ação de Logs do Azure Monitor" na seção Procedimento de Aplicativos Lógicos.

Pré-requisitos

Os seguintes pré-requisitos devem ser preenchidos antes de iniciar este procedimento:

  • Espaço de trabalho do Log Analytics: o usuário que cria o aplicativo lógico deve ter pelo menos permissão de leitura para o espaço de trabalho.
  • Conta de armazenamento: a conta de armazenamento não precisa estar na mesma assinatura do espaço de trabalho do Log Analytics. O usuário que cria o aplicativo lógico deve ter permissão de gravação para a conta de armazenamento.

Limites do conector

O espaço de trabalho do Log Analytics e as consultas de log no Azure Monitor são serviços de multilocação que incluem limites para proteger e isolar clientes e manter a qualidade do serviço. Ao consultar uma grande quantidade de dados, considere os seguintes limites, que podem afetar a forma como você configura a recorrência de Aplicativos Lógicos e sua consulta de log:

  • As consultas de log não podem retornar mais de 500.000 linhas.
  • As consultas de log não podem retornar mais de 64.000.000 bytes.
  • As consultas de log não podem ser executadas por mais de 10 minutos.
  • O conector do Log Analytics é limitado a 100 chamadas por minuto.

Procedimento de aplicativos lógicos

As seções a seguir orientam você pelo procedimento.

Criar um contêiner na conta de armazenamento

Use o procedimento em Criar um contêiner para adicionar um contêiner à sua conta de armazenamento para armazenar os dados exportados. O nome usado para o contêiner neste artigo é loganalytics-data, mas você pode usar qualquer nome.

Criar um fluxo de trabalho de aplicativo lógico

  1. Vá para Aplicativos Lógicos no portal do Azure e selecione Adicionar. Selecione uma Assinatura, um grupo de recursos e uma Região para armazenar o novo aplicativo lógico. Em seguida, dê-lhe um nome único. Você pode ativar a configuração do Log Analytics para coletar informações sobre dados e eventos de tempo de execução, conforme descrito em Configurar Logs do Azure Monitor e coletar dados de diagnóstico para Aplicativos Lógicos do Azure. Essa configuração não é necessária para usar o conector Azure Monitor Logs.

    Screenshot that shows creating a logic app.

  2. Selecione Rever + criar e, em seguida, selecione Criar. Após a conclusão da implantação, selecione Ir para o recurso para abrir o Designer de Aplicativos Lógicos.

Criar um gatilho para o fluxo de trabalho

Em Iniciar com um gatilho comum, selecione Recorrência. Essa configuração cria um fluxo de trabalho de aplicativo lógico que é executado automaticamente em um intervalo regular. Na caixa Frequência da ação, selecione Dia. Na caixa Intervalo, digite 1 para executar o fluxo de trabalho uma vez por dia.

Screenshot that shows a Recurrence action.

Adicionar uma ação de Logs do Azure Monitor

A ação Logs do Azure Monitor permite especificar a consulta a ser executada. A consulta de log usada neste exemplo é otimizada para recorrência horária. Recolhe os dados ingeridos para o tempo de execução específico. Por exemplo, se o fluxo de trabalho for executado às 4:35, o intervalo de tempo será de 3:00 a 4:00. Se você alterar o aplicativo lógico para ser executado em uma frequência diferente, precisará alterar a consulta também. Por exemplo, se você definir a recorrência para ser executada diariamente, definirá startTime na consulta como startofday(make_datetime(year,month,day,0,0)).

Você será solicitado a selecionar um locatário para conceder acesso ao espaço de trabalho do Log Analytics com a conta que o fluxo de trabalho usará para executar a consulta.

  1. Selecione + Nova etapa para adicionar uma ação que seja executada após a ação de recorrência. Em Escolha uma ação, insira azure monitor. Em seguida, selecione Azure Monitor Logs.

    Screenshot that shows an Azure Monitor Logs action.

  2. Selecione Azure Log Analytics – Executar resultados de consulta e lista.

    Screenshot that shows Azure Monitor Logs is highlighted under Choose an action.

  3. Selecione o Grupo de Assinaturas e Recursos para seu espaço de trabalho do Log Analytics. Selecione Espaço de trabalho do Log Analytics para o tipo de recurso. Em seguida, selecione o nome do espaço de trabalho em Nome do Recurso.

  4. Adicione a seguinte consulta de log à janela Consulta :

    let dt = now();
    let year = datetime_part('year', dt);
    let month = datetime_part('month', dt);
    let day = datetime_part('day', dt);
     let hour = datetime_part('hour', dt);
    let startTime = make_datetime(year,month,day,hour,0)-1h;
    let endTime = startTime + 1h - 1tick;
    AzureActivity
    | where ingestion_time() between(startTime .. endTime)
    | project 
        TimeGenerated,
        BlobTime = startTime, 
        OperationName ,
        OperationNameValue ,
        Level ,
        ActivityStatus ,
        ResourceGroup ,
        SubscriptionId ,
        Category ,
        EventSubmissionTimestamp ,
        ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,
        ResourceId = _ResourceId 
    
  5. O Intervalo de Tempo especifica os registros que serão incluídos na consulta com base na coluna TimeGerated . O valor deve ser maior do que o intervalo de tempo selecionado na consulta. Como essa consulta não está usando a coluna TimeGerated, a opção Definir na consulta não está disponível. Para obter mais informações sobre o intervalo de tempo, consulte Escopo da consulta. Selecione Últimas 4 horas para o Intervalo de tempo. Essa configuração garante que todos os registros com um tempo de ingestão maior que o TimeGenerated serão incluídos nos resultados.

    Screenshot that shows the settings for the new Azure Monitor Logs action named Run query and visualize results.

Adicionar uma ação Analisar JSON (opcional)

A saída da ação Executar consulta e resultados de lista é formatada em JSON. Você pode analisar esses dados e manipulá-los como parte da preparação para a ação Compor .

Você pode fornecer um esquema JSON que descreva a carga que você espera receber. O designer analisa o conteúdo JSON usando esse esquema e gera tokens amigáveis que representam as propriedades em seu conteúdo JSON. Em seguida, você pode facilmente referenciar e usar essas propriedades em todo o fluxo de trabalho do seu Logic App.

Você pode usar uma saída de exemplo da etapa Executar consulta e resultados de lista .

  1. Selecione Executar gatilho na faixa de opções Aplicativos lógicos. Em seguida, selecione Executar , baixe e salve um registro de saída. Para a consulta de exemplo no tronco anterior, você pode usar a seguinte saída de exemplo:

    {
        "TimeGenerated": "2020-09-29T23:11:02.578Z",
        "BlobTime": "2020-09-29T23:00:00Z",
        "OperationName": "Returns Storage Account SAS Token",
        "OperationNameValue": "MICROSOFT.RESOURCES/DEPLOYMENTS/WRITE",
        "Level": "Informational",
        "ActivityStatus": "Started",
        "ResourceGroup": "monitoring",
        "SubscriptionId": "00000000-0000-0000-0000-000000000000",
        "Category": "Administrative",
        "EventSubmissionTimestamp": "2020-09-29T23:11:02Z",
        "ClientIpAddress": "192.168.1.100",
        "ResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/monitoring/providers/microsoft.storage/storageaccounts/my-storage-account"
    }
    
  2. Selecione + Nova etapa e, em seguida, selecione + Adicionar uma ação. Em Escolha uma operação, digite json e selecione Analisar JSON.

    Screenshot that shows selecting a Parse JSON operator.

  3. Selecione a caixa Conteúdo para exibir uma lista de valores de atividades anteriores. Selecione Corpo na ação Executar consulta e listar resultados . Essa saída é da consulta de log.

    Screenshot that shows selecting a Body.

  4. Copie o registro de exemplo salvo anteriormente. Selecione Usar carga útil de amostra para gerar esquema e colar.

    Screenshot that shows parsing a JSON payload.

Adicionar a ação Redigir

A ação Compor usa a saída JSON analisada e cria o objeto que você precisa armazenar no blob.

  1. Selecione + Nova etapa e, em seguida, selecione + Adicionar uma ação. Em Escolha uma operação, insira compor. Em seguida, selecione a ação Compor .

    Screenshot that shows selecting a Compose action.

  2. Selecione a caixa Entradas para exibir uma lista de valores de atividades anteriores. Selecione Corpo na ação Analisar JSON . Essa saída analisada é da consulta de log.

    Screenshot that shows selecting a body for a Compose action.

Adicionar a ação Criar blob

A ação Criar blob grava o JSON composto no armazenamento.

  1. Selecione + Nova etapa e, em seguida, selecione + Adicionar uma ação. Em Escolha uma operação, insira blob. Em seguida, selecione a ação Criar blob .

    Screenshot that shows selecting the Create Blob action.

  2. Introduza um nome para a ligação à sua conta de armazenamento em Nome da Ligação. Em seguida, selecione o ícone de pasta na caixa Caminho da pasta para selecionar o contêiner em sua conta de armazenamento. Selecione Nome do Blob para ver uma lista de valores de atividades anteriores. Selecione Expressão e insira uma expressão que corresponda ao seu intervalo de tempo. Para essa consulta, que é executada de hora em hora, a expressão a seguir define o nome do blob por hora anterior:

    subtractFromTime(formatDateTime(utcNow(),'yyyy-MM-ddTHH:00:00'), 1,'Hour')
    

    Screenshot that shows a blob expression.

  3. Selecione a caixa de conteúdo Blob para exibir uma lista de valores de atividades anteriores. Em seguida, selecione Saídas na seção Compor .

    Screenshot that shows creating a blob expression.

Testar o fluxo de trabalho

Para testar o fluxo de trabalho, selecione Executar. Se o fluxo de trabalho tiver erros, eles serão indicados na etapa com o problema. Você pode visualizar as execuções e detalhar cada etapa para visualizar a entrada e a saída para investigar falhas. Consulte Solucionar problemas e diagnosticar falhas de fluxo de trabalho nos Aplicativos Lógicos do Azure, se necessário.

Screenshot that shows Runs history.

Ver registos no armazenamento

Vá para o menu Contas de armazenamento no portal do Azure e selecione sua conta de armazenamento. Selecione o bloco Blobs . Em seguida, selecione o contêiner especificado na ação Criar blob . Selecione um dos blobs e, em seguida, selecione Editar blob.

Screenshot that shows blob data.

Modelo de Aplicativo Lógico

A etapa opcional Parse JSON não está incluída no modelo

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@body('Run_query_and_list_results')",
                "runAfter": {
                    "Run_query_and_list_results": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Create_blob_(V2)": {
                "inputs": {
                    "body": "@outputs('Compose')",
                    "headers": {
                        "ReadFileMetadataFromServer": true
                    },
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('AccountNameFromSettings'))}/files",
                    "queries": {
                        "folderPath": "/logicappexport",
                        "name": "@{utcNow()}",
                        "queryParametersSingleEncoded": true
                    }
                },
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "runtimeConfiguration": {
                    "contentTransfer": {
                        "transferMode": "Chunked"
                    }
                },
                "type": "ApiConnection"
            },
            "Run_query_and_list_results": {
                "inputs": {
                    "body": "let dt = now();\nlet year = datetime_part('year', dt);\nlet month = datetime_part('month', dt);\nlet day = datetime_part('day', dt);\n let hour = datetime_part('hour', dt);\nlet startTime = make_datetime(year,month,day,hour,0)-1h;\nlet endTime = startTime + 1h - 1tick;\nAzureActivity\n| where ingestion_time() between(startTime .. endTime)\n| project \n    TimeGenerated,\n    BlobTime = startTime, \n    OperationName ,\n    OperationNameValue ,\n    Level ,\n    ActivityStatus ,\n    ResourceGroup ,\n    SubscriptionId ,\n    Category ,\n    EventSubmissionTimestamp ,\n    ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,\n    ResourceId = _ResourceId ",
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/queryData",
                    "queries": {
                        "resourcegroups": "resource-group-name",
                        "resourcename": "workspace-name",
                        "resourcetype": "Log Analytics Workspace",
                        "subscriptions": "workspace-subscription-id",
                        "timerange": "Set in query"
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "evaluatedRecurrence": {
                    "frequency": "Day",
                    "interval": 1
                },
                "recurrence": {
                    "frequency": "Day",
                    "interval": 1
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {
        "$connections": {
            "value": {
                "azureblob": {
                    "connectionId": "/subscriptions/logic-app-subscription-id/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/blob-connection-name",
                    "connectionName": "blob-connection-name",
                    "id": "/subscriptions/logic-app-subscription-id/providers/Microsoft.Web/locations/canadacentral/managedApis/azureblob"
                },
                "azuremonitorlogs": {
                    "connectionId": "/subscriptions/blob-connection-name/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/azure-monitor-logs-connection-name",
                    "connectionName": "azure-monitor-logs-connection-name",
                    "id": "/subscriptions/blob-connection-name/providers/Microsoft.Web/locations/canadacentral/managedApis/azuremonitorlogs"
                }
            }
        }
    }
}

Próximos passos