Share via


Exportieren von Daten aus einem Log Analytics-Arbeitsbereich in ein Speicherkonto mithilfe von Logic Apps

In diesem Artikel wird eine Methode zur Verwendung von Azure Logic Apps zum Abfragen von Daten aus einem Log Analytics-Arbeitsbereich in Azure Monitor und zum Senden der Daten an Azure Storage beschrieben. Nutzen Sie diesen Prozess, wenn Sie Ihre Azure Monitor-Protokolldaten für Überprüfungs- und Complianceszenarien exportieren müssen oder wenn Sie einem anderen Dienst das Abrufen dieser Daten ermöglichen müssen.

Andere Exportmethoden

In der in diesem Artikel erörterten Methode wird ein geplanter Export aus einer Protokollabfrage mithilfe einer Logik-App beschrieben. Weitere Möglichkeiten zum Exportieren von Daten für bestimmte Szenarien umfassen:

Übersicht

Für dieses Verfahren wird der Connector für Azure Monitor-Protokolle verwendet, mit dem Sie eine Protokollabfrage über eine Logik-App ausführen und das Ergebnis in anderen Aktionen im Workflow nutzen können. Der Azure Blob Storage-Connector wird in diesem Verfahren verwendet, um das Abfrageergebnis an den Speicher zu senden.

Screenshot that shows a Logic Apps overview.

Wenn Sie Daten aus einem Log Analytics-Arbeitsbereich exportieren, sollten Sie die Menge der von Ihrem Logic Apps-Workflow verarbeiteten Daten begrenzen. Filtern und aggregieren Sie Ihre Protokolldaten in der Abfrage, um die erforderlichen Daten zu reduzieren. Wenn Sie beispielsweise Anmeldeereignisse exportieren müssen, sollten Sie nach erforderlichen Ereignissen filtern und nur die erforderlichen Felder projizieren. Beispiel:

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

Wenn Sie die Daten nach einem Zeitplan exportieren, verwenden Sie die ingestion_time()-Funktion in Ihrer Abfrage, um sicherzustellen, dass auch spät eintreffende Daten berücksichtigt werden. Wenn Daten aufgrund eines Netzwerk- oder Plattformproblems verzögert eintreffen, wird mithilfe der Erfassungszeit sichergestellt, dass die Daten in die nächste Logic Apps-Ausführung einbezogen werden. Ein Beispiel finden Sie im Schritt „Hinzufügen der Azure Monitor-Protokollaktion“ im Abschnitt Logic Apps-Verfahren.

Voraussetzungen

Die folgenden Voraussetzungen müssen erfüllt sein, bevor Sie dieses Verfahren starten:

  • Log Analytics-Arbeitsbereich: Der Benutzer, der die Logik-App erstellt, muss mindestens über eine Leseberechtigung für den Arbeitsbereich verfügen.
  • Speicherkonto: Das Speicherkonto muss sich nicht im selben Abonnement wie der Log Analytics-Arbeitsbereich befinden. Der Benutzer, der die Logik-App erstellt, muss über eine Schreibberechtigung für das Speicherkonto verfügen.

Grenzwerte des Connectors

Beim Log Analytics-Arbeitsbereich und bei Protokollabfragen in Azure Monitor handelt es sich um mehrinstanzenfähige Dienste, die Grenzwerte enthalten, um Kunden zu schützen und zu isolieren und Servicequalität zu gewährleisten. Beim Abfragen großer Datenmengen sollten Sie die folgenden Grenzwerte beachten, die sich auf die Konfiguration der Logic Apps-Wiederholungen und Ihrer Protokollabfrage auswirken können:

  • Protokollabfragen können maximal 500.000 Zeilen zurückgeben.
  • Protokollabfragen können maximal 64.000.000 Bytes zurückgeben.
  • Protokollabfragen können maximal 10 Minuten ausgeführt werden.
  • Der Log Analytics-Connector ist auf 100 Aufrufe pro Minute begrenzt.

Logic Apps-Verfahren

In den folgenden Abschnitten wird das Verfahren schrittweise beschrieben.

Erstellen eines Containers im Speicherkonto

Verwenden Sie das Verfahren in Erstellen eines Containers, um Ihrem Speicherkonto zum Speichern der exportierten Daten einen Container hinzuzufügen. Für den Container in diesem Artikel wird der Name loganalytics-data verwendet. Sie können jedoch einen beliebigen anderen Namen verwenden.

Erstellen eines Logik-App-Workflows

  1. Gehen Sie im Azure-Portal zu Logic Apps, und klicken Sie auf Hinzufügen. Wählen Sie ein Abonnement, eine Ressourcengruppe und eine Region aus, um die neue Logik-App zu speichern. Geben Sie ihr dann einen eindeutigen Namen. Sie können die Einstellung Log Analytics aktivieren, um Informationen über Laufzeitdaten und Ereignisse zu sammeln, wie unter Einrichten von Azure Monitor-Protokollen und Sammeln von Diagnosedaten für Azure Logic Apps beschrieben. Diese Einstellung ist für die Verwendung des Connectors für Azure Monitor-Protokolle nicht erforderlich.

    Screenshot that shows creating a logic app.

  2. Wählen Sie Überprüfen und erstellen und anschließend Erstellen aus. Nachdem die Bereitstellung abgeschlossen ist, wählen Sie Zu Ressource wechseln, um den Logic Apps-Designer zu öffnen.

Triggers für den Workflow erstellen

Wählen Sie unter Starten Sie mit einem gängigen Trigger die Option Wiederholung aus. Durch diese Einstellung wird ein Logik-App-Workflow erstellt, der automatisch in regelmäßigen Abständen ausgeführt wird. Wählen Sie im Feld Häufigkeit der Aktion die Option Tag aus. Geben Sie im Feld Intervall den Wert 1 ein, um den Workflow einmal pro Tag auszuführen.

Screenshot that shows a Recurrence action.

Hinzufügen einer Azure Monitor-Protokollaktion

Mit der Aktion „Azure Monitor-Protokolle“ können Sie die auszuführende Abfrage festlegen. Die in diesem Beispiel verwendete Protokollabfrage ist für eine stündliche Wiederholung optimiert und sammelt die für die jeweilige Ausführungszeit erfassten Daten. Wenn der Workflow beispielsweise um 4:35 ausgeführt wird, liegt der Zeitbereich zwischen 3:00 und 4:00. Wenn Sie die Logik-App so ändern, dass die Ausführung mit einer anderen Häufigkeit erfolgt, müssen Sie auch die Abfrage entsprechend ändern. Beispiel: Wenn Sie das Wiederholungsintervall auf eine tägliche Ausführung festlegen, legen Sie startTime in der Abfrage auf startofday(make_datetime(year,month,day,0,0)) fest.

Sie werden aufgefordert, einen Mandanten auszuwählen, um Zugriff auf den Log Analytics-Arbeitsbereich mit dem Konto zu gewähren, das im Workflow zum Ausführen der Abfrage verwendet wird.

  1. Wählen Sie + Neuer Schritt, um eine Aktion hinzuzufügen, die nach der Wiederholungsaktion ausgeführt wird. Geben Sie unter Aktion auswählen den Wert azure monitor ein. Wählen Sie dann Azure Monitor-Protokolle aus.

    Screenshot that shows an Azure Monitor Logs action.

  2. Wählen Sie Azure Log Analytics – Abfrage ausführen und Ergebnisse auflisten aus.

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

  3. Wählen Sie das Abonnement und die Ressourcengruppe für Ihren Log Analytics-Arbeitsbereich aus. Wählen Sie Log Analytics-Arbeitsbereich als Ressourcentyp aus. Wählen Sie dann unter Ressourcenname den Arbeitsbereichsnamen aus.

  4. Fügen Sie im Fenster Abfrage die folgende Protokollabfrage ein:

    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. Mit dem Zeitbereich werden die Datensätze angegeben, die basierend auf der Spalte TimeGenerated in die Abfrage einbezogen werden. Der Wert muss höher als der in der Abfrage ausgewählte Zeitbereich sein. Da die Spalte TimeGenerated in dieser Abfrage nicht verwendet wird, ist die Option In Abfrage festlegen nicht verfügbar. Weitere Informationen zum Zeitbereich finden Sie unter Abfragebereich. Wählen Sie für den Zeitbereich die Option Letzte 4 Stunden aus. Diese Einstellung stellt sicher, dass Datensätze, bei denen der Wert für die Erfassungszeit größer ist als der Wert für TimeGenerated, in die Ergebnisse einbezogen werden.

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

Hinzufügen einer JSON-Analyseaktion (optional)

Die Ausgabe der Aktion Abfrage ausführen und Ergebnisse auflisten ist in JSON formatiert. Sie können diese Daten im Rahmen der Vorbereitung auf die Aktion Compose analysieren und bearbeiten.

Sie können ein JSON-Schema angeben, das die Nutzdaten beschreibt, die Sie zu empfangen erwarten. Der Designer analysiert JSON-Inhalte mithilfe dieses Schemas und generiert benutzerfreundliche Token, die die Eigenschaften in Ihrem JSON-Inhalt darstellen. Sie können dann in Ihrem Logik-App-Workflow ganz einfach auf diese Eigenschaften verweisen und sie verwenden.

Sie können eine Beispielausgabe aus dem Schritt Abfrage ausführen und Ergebnisse auflisten verwenden.

  1. Wählen Sie im Logic Apps-Menüband die Option Trigger ausführen aus. Wählen Sie dann Ausführen aus, laden Sie einen Ausgabedatensatz herunter, und speichern Sie diesen. Für die Beispielabfrage im vorigen Abschnitt können Sie die folgende Beispielausgabe verwenden:

    {
        "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. Wählen Sie + Neuer Schritt und anschließend + Aktion hinzufügen aus. Geben Sie unter Vorgang auswählenjson ein, und wählen Sie dann JSON analysieren aus.

    Screenshot that shows selecting a Parse JSON operator.

  3. Wählen Sie das Feld Inhalt aus, um eine Liste mit Werten aus früheren Aktivitäten anzuzeigen. Wählen Sie in der Aktion Abfrage ausführen und Ergebnisse auflisten die Option Body (Textkörper) aus. Dies ist die Ausgabe der Protokollabfrage.

    Screenshot that shows selecting a Body.

  4. Kopieren Sie den zuvor gespeicherten Beispieldatensatz. Wählen Sie Beispielnutzdaten zum Generieren eines Schemas verwenden aus, und fügen Sie diese ein.

    Screenshot that shows parsing a JSON payload.

Hinzufügen der Aktion „Compose“

Bei der Aktion Compose wird mithilfe der analysierten JSON-Ausgabe das Objekt erstellt, das im Blob gespeichert werden muss.

  1. Wählen Sie + Neuer Schritt und anschließend + Aktion hinzufügen aus. Geben Sie unter Vorgang auswählen die Zeichenfolge Verfassen ein. Wählen Sie dann die Aktion Verfassen aus.

    Screenshot that shows selecting a Compose action.

  2. Wählen Sie das Feld Eingaben aus, um eine Liste mit Werten aus früheren Aktivitäten anzuzeigen. Wählen Sie in der Aktion JSON analysieren die Option Body (Textkörper) aus. Dies ist die Analyseausgabe der Protokollabfrage.

    Screenshot that shows selecting a body for a Compose action.

Hinzufügen der Aktion „Blob erstellen“

Mit der Aktion Blob erstellen wird die zusammengesetzte JSON-Ausgabe in den Speicher geschrieben.

  1. Wählen Sie + Neuer Schritt und anschließend + Aktion hinzufügen aus. Geben Sie unter Vorgang auswählen die Zeichenfolge Blob ein. Wählen Sie dann die Aktion Blob erstellen aus.

    Screenshot that shows selecting the Create Blob action.

  2. Geben Sie unter Verbindungsname einen Namen für die Verbindung mit Ihrem Speicherkonto ein. Wählen Sie dann das Ordnersymbol im Feld Ordnerpfad aus, um den Container in Ihrem Speicherkonto auszuwählen. Wählen Sie das Feld Blobname aus, um eine Liste mit Werten aus früheren Aktivitäten anzuzeigen. Wählen Sie Ausdruck aus, und geben Sie einen Ausdruck ein, der Ihrem Zeitintervall entspricht. Für diese Abfrage, die stündlich ausgeführt wird, wird mit dem folgenden Ausdruck der Blobname auf „pro vorheriger Stunde“ festgelegt:

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

    Screenshot that shows a blob expression.

  3. Wählen Sie das Feld Blobinhalt aus, um eine Liste mit Werten aus früheren Aktivitäten anzuzeigen. Wählen Sie dann im Abschnitt Verfassen die Option Ausgaben aus.

    Screenshot that shows creating a blob expression.

Testen des Workflows

Wählen Sie Ausführen aus, um den Workflow zu testen. Wenn der Workflow Fehler aufweist, werden diese im Schritt zusammen mit dem Problem angegeben. Sie können die Ausführungen anzeigen und einen Drilldown auf die einzelnen Schritte ausführen, um zur Untersuchung von Fehlern die Eingabe und die Ausgabe anzuzeigen. Informationen hierzu finden Sie ggf. unter Diagnostizieren und Beheben von Workflowfehlern in Azure Logic Apps.

Screenshot that shows Runs history.

Anzeigen von Protokollen im Speicher

Wechseln Sie zum Menü Speicherkonten im Azure-Portal, und wählen Sie Ihr Speicherkonto aus. Wählen Sie die Kachel Blobs. Wählen Sie dann den Container aus, den Sie in der Aktion Blob erstellen angegeben haben. Wählen Sie ein Blob und dann Blob bearbeiten aus.

Screenshot that shows blob data.

Logik-App-Vorlage

Der optionale Schritt „JSON analysieren“ ist nicht in der Vorlage enthalten.

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

Nächste Schritte