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:
- Wenn Sie Daten aus dem Log Analytics-Arbeitsbereich in ein Speicherkonto oder Azure Event Hubs exportieren möchten, verwenden Sie das Datenexportfeature von Azure Monitor-Protokollen im Log Analytics-Arbeitsbereich. Weitere Informationen finden Sie unter Datenexport im Log Analytics-Arbeitsbereich in Azure Monitor.
- Einmaliger Export mit einer Logik-App. Siehe Connector für Azure Monitor-Protokolle für Logic Apps.
- Einmaliger Export auf einen lokalen Computer mithilfe eines PowerShell-Skripts. Informationen hierzu finden Sie unter Invoke-AzOperationalInsightsQueryExport.
Ü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.
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
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.
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.
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.
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.
Wählen Sie Azure Log Analytics – Abfrage ausführen und Ergebnisse auflisten aus.
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.
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
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.
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.
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" }
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.
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.
Kopieren Sie den zuvor gespeicherten Beispieldatensatz. Wählen Sie Beispielnutzdaten zum Generieren eines Schemas verwenden aus, und fügen Sie diese ein.
Hinzufügen der Aktion „Compose“
Bei der Aktion Compose wird mithilfe der analysierten JSON-Ausgabe das Objekt erstellt, das im Blob gespeichert werden muss.
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.
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.
Hinzufügen der Aktion „Blob erstellen“
Mit der Aktion Blob erstellen wird die zusammengesetzte JSON-Ausgabe in den Speicher geschrieben.
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.
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')
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.
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.
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.
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
- Erfahren Sie mehr über Protokollabfragen in Azure Monitor.
- Informieren Sie sich ausführlicher über Logic Apps.
- Weitere Informationen zu Power Automate