Esportare dati da un'area di lavoro Log Analytics a un account di archiviazione usando App per la logica

Questo articolo descrive un metodo per usare App per la logica di Azure per eseguire query sui dati da un'area di lavoro Log Analytics in Monitoraggio di Azure e inviarli a Archiviazione di Azure. Usare questo processo quando è necessario esportare i dati dei log di Monitoraggio di Azure per scenari di controllo e conformità o per consentire a un altro servizio di recuperare questi dati.

Altri metodi di esportazione

Il metodo descritto in questo articolo descrive un'esportazione pianificata da una query di log usando un'app per la logica. Altre opzioni per esportare i dati per scenari specifici includono:

Panoramica

Questa procedura usa il connettore Log di Monitoraggio di Azure, che consente di eseguire una query di log da un'app per la logica e di usare il relativo output in altre azioni nel flusso di lavoro. Il connettore Archiviazione BLOB di Azure viene usato in questa procedura per inviare l'output della query all'archiviazione.

Screenshot that shows a Logic Apps overview.

Quando si esportano dati da un'area di lavoro Log Analytics, limitare la quantità di dati elaborati dal flusso di lavoro di App per la logica. Filtrare e aggregare i dati di log nella query per ridurre i dati necessari. Ad esempio, se è necessario esportare gli eventi di accesso, filtrare gli eventi obbligatori e proiettare solo i campi obbligatori. Ad esempio:

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

Quando si esportano i dati in base a una pianificazione, usare la ingestion_time() funzione nella query per assicurarsi di non perdere i dati in ritardo. Se i dati vengono ritardati a causa di problemi di rete o piattaforma, l'uso del tempo di inserimento garantisce che i dati vengano inclusi nella successiva esecuzione di App per la logica. Per un esempio, vedere il passaggio "Aggiungere l'azione Log di Monitoraggio di Azure" nella sezione Relativa alle app per la logica .

Prerequisiti

Prima di iniziare questa procedura, è necessario completare i prerequisiti seguenti:

  • Area di lavoro Log Analytics: l'utente che crea l'app per la logica deve disporre almeno dell'autorizzazione di lettura per l'area di lavoro.
  • Archiviazione account: l'account di archiviazione non deve trovarsi nella stessa sottoscrizione dell'area di lavoro Log Analytics. L'utente che crea l'app per la logica deve disporre dell'autorizzazione di scrittura per l'account di archiviazione.

limiti di Connessione or

L'area di lavoro Log Analytics e le query di log in Monitoraggio di Azure sono servizi multi-tenancy che includono limiti per proteggere e isolare i clienti e mantenere la qualità del servizio. Quando si esegue una query per una grande quantità di dati, considerare i limiti seguenti, che possono influire sulla modalità di configurazione della ricorrenza di App per la logica e della query di log:

  • Le query di log non possono restituire più di 500.000 righe.
  • Le query di log non possono restituire più di 64.000.000 byte.
  • Le query di log non possono essere eseguite più di 10 minuti.
  • Il connettore di Log Analytics è limitato a 100 chiamate al minuto.

Procedura di App per la logica

Le sezioni seguenti illustrano la procedura.

Creare un contenitore nell'account di archiviazione

Usare la procedura descritta in Creare un contenitore per aggiungere un contenitore all'account di archiviazione per contenere i dati esportati. Il nome usato per il contenitore in questo articolo è loganalytics-data, ma è possibile usare qualsiasi nome.

Creare il flusso di lavoro di un'app per la logica

  1. Passare ad App per la logica nel portale di Azure e selezionare Aggiungi. Selezionare una sottoscrizione, un gruppo di risorse eun'area per archiviare la nuova app per la logica. Assegnare quindi un nome univoco. È possibile attivare l'impostazione Log Analytics per raccogliere informazioni sui dati e sugli eventi di runtime, come descritto in Configurare i log di Monitoraggio di Azure e raccogliere i dati di diagnostica per App per la logica di Azure. Questa impostazione non è necessaria per l'uso del connettore Log di Monitoraggio di Azure.

    Screenshot that shows creating a logic app.

  2. Selezionare Rivedi e crea e quindi Crea. Al termine della distribuzione, selezionare Vai alla risorsa per aprire Progettazione app per la logica.

Creare un trigger per il flusso di lavoro

In Inizia con un trigger comune selezionare Ricorrenza. Questa impostazione crea un flusso di lavoro dell'app per la logica che viene eseguito automaticamente a intervalli regolari. Nella casella Frequenza dell'azione selezionare Giorno. Nella casella Intervallo immettere 1 per eseguire il flusso di lavoro una volta al giorno.

Screenshot that shows a Recurrence action.

Aggiungere un'azione Log di Monitoraggio di Azure

L'azione Log di Monitoraggio di Azure consente di specificare la query da eseguire. La query di log usata in questo esempio è ottimizzata per la ricorrenza oraria. Raccoglie i dati inseriti per il tempo di esecuzione specifico. Ad esempio, se il flusso di lavoro viene eseguito alle 4:35, l'intervallo di tempo sarà compreso tra 3:00 e 4:00. Se si modifica l'app per la logica per l'esecuzione a una frequenza diversa, è necessario modificare anche la query. Ad esempio, se si imposta la ricorrenza per l'esecuzione giornaliera, impostare startTime nella query su startofday(make_datetime(year,month,day,0,0)).

Viene richiesto di selezionare un tenant per concedere l'accesso all'area di lavoro Log Analytics con l'account che verrà usato dal flusso di lavoro per eseguire la query.

  1. Selezionare + Nuovo passaggio per aggiungere un'azione eseguita dopo l'azione di ricorrenza. In Scegliere un'azione immettere Monitoraggio di Azure. Selezionare quindi Log di Monitoraggio di Azure.

    Screenshot that shows an Azure Monitor Logs action.

  2. Selezionare Azure Log Analytics - Eseguire query ed elencare i risultati.

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

  3. Selezionare la sottoscrizione e il gruppo di risorse per l'area di lavoro Log Analytics. Selezionare Area di lavoro Log Analytics per Tipo di risorsa. Selezionare quindi il nome dell'area di lavoro in Nome risorsa.

  4. Aggiungere la query di log seguente alla finestra Query :

    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. L'intervallo di tempo specifica i record che verranno inclusi nella query in base alla colonna TimeGenerated. Il valore deve essere maggiore dell'intervallo di tempo selezionato nella query. Poiché questa query non usa la colonna TimeGenerated , l'opzione Imposta nella query non è disponibile. Per altre informazioni sull'intervallo di tempo, vedere Ambito query. Selezionare Ultime 4 ore per Intervallo di tempo. Questa impostazione garantisce che tutti i record con un tempo di inserimento superiore a TimeGenerated vengano inclusi nei risultati.

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

Aggiungere un'azione Parse JSON (facoltativo)

L'output dell'azione Esegui query e risultati elenco è formattato in JSON. È possibile analizzare questi dati e modificarli come parte della preparazione per l'azione Componi .

È possibile fornire uno schema JSON che descrive il payload che si prevede di ricevere. La finestra di progettazione consente di analizzare il contenuto JSON con questo schema e genera i token descrittivi che rappresentano le proprietà presenti nel contenuto JSON. È quindi possibile fare riferimento e usare facilmente tali proprietà nel flusso di lavoro dell'app per la logica.

È possibile usare un output di esempio del passaggio Esegui query ed elenco risultati .

  1. Selezionare Esegui trigger nella barra multifunzione app per la logica. Selezionare quindi Esegui e scarica e salva un record di output. Per la query di esempio nello stem precedente, è possibile usare l'output di esempio seguente:

    {
        "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. Selezionare + Nuovo passaggio e quindi + Aggiungi un'azione. In Scegliere un'operazione immettere json e quindi selezionare Analizza JSON.

    Screenshot that shows selecting a Parse JSON operator.

  3. Selezionare la casella Contenuto per visualizzare un elenco di valori delle attività precedenti. Selezionare Corpo nell'azione Esegui query ed elenco risultati . Questo output proviene dalla query di log.

    Screenshot that shows selecting a Body.

  4. Copiare il record di esempio salvato in precedenza. Selezionare Usa payload di esempio per generare lo schema e incollarlo.

    Screenshot that shows parsing a JSON payload.

Aggiungere l'azione Componi

L'azione Compose esegue l'output JSON analizzato e crea l'oggetto da archiviare nel BLOB.

  1. Selezionare + Nuovo passaggio e quindi + Aggiungi un'azione. In Scegli un'operazione immettere compose. Selezionare quindi l'azione Componi .

    Screenshot that shows selecting a Compose action.

  2. Selezionare la casella Input per visualizzare un elenco di valori delle attività precedenti. Selezionare Corpo dall'azione Analizza JSON . Questo output analizzato proviene dalla query di log.

    Screenshot that shows selecting a body for a Compose action.

Aggiungere l'azione Crea BLOB

L'azione Crea BLOB scrive il codice JSON composto nell'archiviazione.

  1. Selezionare + Nuovo passaggio e quindi + Aggiungi un'azione. In Scegliere un'operazione immettere BLOB. Selezionare quindi l'azione Crea BLOB .

    Screenshot that shows selecting the Create Blob action.

  2. Immettere un nome per la connessione all'account di archiviazione in nome Connessione ion. Selezionare quindi l'icona della cartella nella casella Percorso cartella per selezionare il contenitore nell'account di archiviazione. Selezionare Nome BLOB per visualizzare un elenco di valori delle attività precedenti. Selezionare Espressione e immettere un'espressione corrispondente all'intervallo di tempo. Per questa query, che viene eseguita ogni ora, l'espressione seguente imposta il nome del BLOB per ora precedente:

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

    Screenshot that shows a blob expression.

  3. Selezionare la casella Contenuto BLOB per visualizzare un elenco di valori delle attività precedenti. Selezionare quindi Output nella sezione Compose .

    Screenshot that shows creating a blob expression.

Testare il flusso di lavoro

Per testare il flusso di lavoro, selezionare Esegui. Se il flusso di lavoro presenta errori, vengono indicati nel passaggio con il problema. È possibile visualizzare le esecuzioni ed eseguire il drill-in in ogni passaggio per visualizzare l'input e l'output per analizzare gli errori. Vedere Risolvere e diagnosticare gli errori del flusso di lavoro in App per la logica di Azure, se necessario.

Screenshot that shows Runs history.

Visualizzare i log nell'archiviazione

Passare al menu Archiviazione account nel portale di Azure e selezionare l'account di archiviazione. Selezionare il riquadro BLOB. Selezionare quindi il contenitore specificato nell'azione Crea BLOB . Selezionare uno dei BLOB e quindi selezionare Modifica BLOB.

Screenshot that shows blob data.

Modello di app per la logica

Il passaggio facoltativo Parse JSON non è incluso nel modello

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

Passaggi successivi