Condividi tramite


Esportare i 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 di Log Analytics in Monitoraggio di Azure e inviarli ad Archiviazione di Azure. Usare questo processo quando è necessario esportare i dati di 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 di Archiviazione BLOB di Azure viene usato in questa procedura per inviare l'output della query all'archiviazione.

Screenshot che mostra una panoramica di App per la logica.

Quando si esportano dati da un'area di lavoro di 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 funzione ingestion_time() 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 Procedura su App per la logica.

Prerequisiti

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

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

Limiti del connettore

L'area di lavoro di 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. Andare a App per la logica nel portale di Azure e selezionare Aggiungi. Selezionare una sottoscrizione, un gruppo di risorse e un'area per archiviare la nuova app per la logica. Assegnare quindi un nome univoco. È possibile attivare l'impostazione Log Analytics per raccogliere informazioni su dati ed eventi di runtime, come descritto in Configurare 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 che mostra la creazione di un'app per la logica.

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

Creare un trigger per il flusso di lavoro

In Iniziare 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 che mostra un'azione Ricorrenza.

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 di 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 che mostra un'azione Log di Monitoraggio di Azure.

  2. Selezionare Azure Log Analytics - Esegui query ed elenca i risultati.

    Screenshot che mostra che Log di Monitoraggio di Azure è evidenziato in Scegliere un'azione.

  3. Selezionare la sottoscrizione e il gruppo di risorse per l'area di lavoro di 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 che mostra le impostazioni per la nuova azione Log di Monitoraggio di Azure denominata Esegui query e visualizzare i risultati.

Aggiungere un'azione Parse JSON (facoltativo)

L'output dell'azione Esegui query ed elenca i risultati è 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. È possibile quindi fare riferimento a tali proprietà e usarle facilmente nel flusso di lavoro dell'App per la logica.

È possibile usare un output di esempio del passaggio Esegui query ed elenca i 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. Fare clic su + Nuovo passaggio e selezionare + Aggiungi un'azione. In Scegliere un'operazione immettere json e quindi selezionare Analizza JSON.

    Screenshot che mostra la selezione di un operatore Parse JSON.

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

    Screenshot che mostra la selezione di un corpo.

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

    Screenshot che mostra l'analisi di un payload JSON.

Aggiungere l'azione Componi

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

  1. Fare clic su + Nuovo passaggio e selezionare + Aggiungi un'azione. In Scegliere un'operazione immettere componi. Selezionare quindi l'azione Componi.

    Screenshot che mostra la selezione di un'azione Componi.

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

    Screenshot che mostra la selezione di un corpo per un'azione Componi.

Aggiungere l'azione Crea BLOB

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

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

    Screenshot che mostra la selezione dell'azione Crea BLOB.

  2. Immettere un nome per la connessione all'account di archiviazione in Nome connessione. 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 che mostra un'espressione BLOB.

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

    Screenshot che mostra la creazione di un'espressione BLOB.

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-down in ogni passaggio per visualizzare l'input e l'output per analizzare gli errori. Vedere Informazioni su come risolvere i problemi e diagnosticare gli errori del flusso di lavoro nelle App per la logica di Azure, se necessario.

Screenshot che mostra la cronologia esecuzioni.

Visualizzare i log nell'archiviazione

Andare al menu Account di archiviazione 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 che mostra i dati del BLOB.

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