Tutorial: Analysieren von Daten in Azure Monitor-Protokollen mithilfe eines Notebooks
Notebooks sind integrierte Umgebungen, mit denen Sie Dokumente mit Echtzeit-Code, Formeln, Visualisierungen und Text erstellen und freigeben können. Durch die Integration eines Notebooks in einen Log Analytics-Arbeitsbereich können Sie einen mehrstufigen Prozess erstellen, bei dem Code in jedem Schritt basierend auf den Ergebnissen des vorherigen Schritts ausgeführt wird. Sie können solche optimierten Prozesse verwenden, Machine Learning-Pipelines, erweiterte Analysetools, Anleitungen zur Problembehandlung (Troubleshooting Guides, TSGs) bei benötigtem Support und vieles mehr zu erstellen.
Die Integration eines Notebooks in einen Log Analytics-Arbeitsbereich ermöglicht darüber hinaus Folgendes:
- Ausführen von KQL-Abfragen und benutzerdefiniertem Code in einer beliebigen Sprache
- Einführen neuer Analyse- und Visualisierungsfunktionen, z. B. neuer Machine Learning-Modelle, benutzerdefinierter Zeitachsen und Prozessstrukturen
- Integrieren von Datasets außerhalb von Azure Monitor-Protokollen, z. B. lokale Datasets
- Profitieren von erhöhten Diensteinschränkungen mithilfe der Abfrage-API-Grenzwerte (im Vergleich zum Azure-Portal)
In diesem Tutorial lernen Sie, wie die folgenden Aufgaben ausgeführt werden:
- Integrieren eines Notebooks in Ihren Log Analytics-Arbeitsbereich mithilfe der Azure Monitor Query-Clientbibliothek und der Azure Identity-Clientbibliothek
- Untersuchen und Visualisieren von Daten aus Ihrem Log Analytics-Arbeitsbereich in einem Notebook
- Erfassen von Daten aus Ihrem Notebook in einer benutzerdefinierten Tabelle in Ihrem Log Analytics-Arbeitsbereich (optional)
Ein Beispiel zum Erstellen einer Machine Learning-Pipeline zum Analysieren von Daten in Azure Monitor-Protokollen mithilfe eines Notebooks finden Sie in diesem Beispielnotebook: Erkennen von Anomalien in Azure Monitor-Protokollen mithilfe von Machine Learning-Techniken.
Tipp
Um API-bezogene Einschränkungen zu umgehen, teilen Sie größere Abfragen in mehrere kleinere auf.
Voraussetzungen
Für dieses Tutorial benötigen Sie Folgendes:
Ein Azure Machine Learning-Arbeitsbereich mit einer ausgeführten CPU-Compute-Instanz mit:
- einem Notebook.
- Ein Kernel, der auf Python 3.8 oder höher festgelegt ist.
Die folgenden Rollen und Berechtigungen:
In Azure Monitor-Protokollen: Die Rolle“Log Analytics-Mitwirkender“ zum Lesen von Daten aus Ihrem und zum Senden von Daten an Ihren Logs Analytics-Arbeitsbereich. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf Log Analytics-Arbeitsbereiche.
In Azure Machine Learning:
- Eine Rolle Inhaber oder Mitwirkender auf Ressourcengruppenebene, um bei Bedarf einen neuen Azure Machine Learning-Arbeitsbereich zu erstellen.
- Eine Rolle Mitwirkender im Azure Machine Learning-Arbeitsbereich, in dem Sie Ihr Notebook ausführen.
Weitere Informationen finden Sie unter Zugriff auf einen Azure Machine Learning-Arbeitsbereich verwalten.
Tools und Notebooks
In diesem Tutorial verwenden Sie die folgenden Tools:
Tool | BESCHREIBUNG |
---|---|
Azure Monitor Query-Clientbibliothek | Sie ermöglicht das Ausführen schreibgeschützter Abfragen für Daten in Azure Monitor-Protokollen. |
Azure Identity-Clientbibliothek | Sie ermöglicht Azure SDK-Clients die Authentifizierung bei Microsoft Entra ID. |
Azure Monitor Ingestion-Clientbibliothek | Sie ermöglicht das Senden benutzerdefinierter Protokolle an Azure Monitor mithilfe der Protokollerfassungs-API. Sie ist erforderlich, um analysierte Daten in einer benutzerdefinierten Tabelle in Ihrem Log Analytics-Arbeitsbereich zu erfassen (optional). |
Datensammlungsregel, Datensammlungsendpunkt und eine registrierte Anwendung | Sie ist erforderlich, um analysierte Daten in einer benutzerdefinierten Tabelle in Ihrem Log Analytics-Arbeitsbereich zu erfassen (optional). |
Weitere Abfragebibliotheken, die Sie verwenden können, sind:
- Mithilfe der Kqlmagic-Bibliothek können Sie KQL-Abfragen direkt in einem Notebook auf die gleiche Weise wie KQL-Abfragen über das Log Analytics-Tool ausführen.
- Die MSTICPY-Bibliothek bietet Ihnen Vorlagen für Abfragen, die integrierte KQL-Zeitreihen- und Machine Learning-Funktionen aufrufen, sowie erweiterte Visualisierungstools und Analysemöglichkeiten für Daten im Log Analytics-Arbeitsbereich.
Weitere Microsoft Notebooks für erweiterte Analysen sind:
1. Integrieren Ihres Log Analytics-Arbeitsbereichs in Ihr Notebook
Richten Sie Ihr Notebook ein, um Ihren Log Analytics-Arbeitsbereich abzufragen:
Installieren Sie die Clientbibliotheken „Azure Monitor Query“, „Azure Identity“ und „Azure Monitor Ingestion“ zusammen mit der Pandas-Datenanalysebibliothek und der Plotly-Visualisierungsbibliothek:
import sys !{sys.executable} -m pip install --upgrade azure-monitor-query azure-identity azure-monitor-ingestion !{sys.executable} -m pip install --upgrade pandas plotly
Legen Sie die folgende Variable „
LOGS_WORKSPACE_ID
“ auf die ID Ihres Log Analytics-Arbeitsbereichs fest. Die Variable ist derzeit so festgelegt, dass sie den Azure Monitor Demo-Arbeitsbereich verwendet, den Sie als Demo für das Notebook verwenden können.LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
Richten Sie „
LogsQueryClient
“ ein , um Azure Monitor-Protokolle zu authentifizieren und abzufragen.Der folgende Code richtet „
LogsQueryClient
“ ein, um die Authentifizierung mithilfe von „DefaultAzureCredential
“ zu ermöglichen:from azure.core.credentials import AzureKeyCredential from azure.core.pipeline.policies import AzureKeyCredentialPolicy from azure.identity import DefaultAzureCredential from azure.monitor.query import LogsQueryClient if LOGS_WORKSPACE_ID == "DEMO_WORKSPACE": credential = AzureKeyCredential("DEMO_KEY") authentication_policy = AzureKeyCredentialPolicy(name="X-Api-Key", credential=credential) else: credential = DefaultAzureCredential() authentication_policy = None logs_query_client = LogsQueryClient(credential, authentication_policy=authentication_policy)
„
LogsQueryClient
“ unterstützt in der Regel nur die Authentifizierung mit Microsoft Entra-Tokenanmeldeinformationen. Wir können jedoch eine benutzerdefinierte Authentifizierungsrichtlinie übergeben, um die Verwendung von API-Schlüsseln zu ermöglichen. Dadurch kann der Client den Demoarbeitsbereich abfragen. Die Verfügbarkeit und der Zugriff auf diesen Demoarbeitsbereich können sich ändern, daher wird empfohlen, Ihren eigenen Log Analytics-Arbeitsbereich zu verwenden.Definieren Sie eine Hilfsfunktion namens „
query_logs_workspace
“, um eine bestimmte Abfrage im Log Analytics-Arbeitsbereich auszuführen und die Ergebnisse als Pandas-DataFrame zurückzugeben.import pandas as pd import plotly.express as px from azure.monitor.query import LogsQueryStatus from azure.core.exceptions import HttpResponseError def query_logs_workspace(query): try: response = logs_query_client.query_workspace(LOGS_WORKSPACE_ID, query, timespan=None) if response.status == LogsQueryStatus.PARTIAL: error = response.partial_error data = response.partial_data print(error.message) elif response.status == LogsQueryStatus.SUCCESS: data = response.tables for table in data: my_data = pd.DataFrame(data=table.rows, columns=table.columns) except HttpResponseError as err: print("something fatal happened") print (err) return my_data
2. Untersuchen und Visualisieren von Daten aus Ihrem Log Analytics-Arbeitsbereich in Ihrem Notebook
Sehen wir uns einige Daten im Arbeitsbereich an, indem wir eine Abfrage aus dem Notebook heraus ausführen:
Mit dieser Abfrage wird überprüft, welche Menge an Daten (in Megabyte) Sie in den einzelnen Tabellen (Datentypen) in Ihrem Log Analytics-Arbeitsbereich in der letzten Woche pro Stunde erfasst haben:
TABLE = "Usage" QUERY = f""" let starttime = 7d; // Start date for the time series, counting back from the current date let endtime = 0d; // today {TABLE} | project TimeGenerated, DataType, Quantity | where TimeGenerated between (ago(starttime)..ago(endtime)) | summarize ActualUsage=sum(Quantity) by TimeGenerated=bin(TimeGenerated, 1h), DataType """ df = query_logs_workspace(QUERY) display(df)
Der resultierende DataFrame zeigt die stündliche Erfassung in jeder der Tabellen im Log Analytics-Arbeitsbereich an:
Nun zeigen wir die Daten als Diagramm an, das die stündliche Nutzung für verschiedene Datentypen basierend auf dem Pandas-DataFrame im Laufe der Zeit zeigt:
df = df.sort_values(by="TimeGenerated") graph = px.line(df, x='TimeGenerated', y="ActualUsage", color='DataType', title="Usage in the last week - All data types") graph.show()
Das resultierende Diagramm sieht folgendermaßen aus:
Sie haben erfolgreich Protokolldaten aus Ihrem Log Analytics-Arbeitsbereich in Ihrem Notebook abgefragt und visualisiert.
3. Daten analysieren
Als einfaches Beispiel nehmen wir die ersten fünf Zeilen:
analyzed_df = df.head(5)
Ein Beispiel zum Implementieren von Machine Learning-Techniken zum Analysieren von Daten in Azure Monitor-Protokollen finden Sie in diesem Beispielnotebook: Erkennen von Anomalien in Azure Monitor-Protokollen mithilfe von Machine Learning-Techniken.
4 Erfassen analysierte Daten in einer benutzerdefinierten Tabelle in Ihrem Log Analytics-Arbeitsbereich (optional)
Senden Sie Ihre Analyseergebnisse an eine benutzerdefinierte Tabelle in Ihrem Log Analytics-Arbeitsbereich, um Benachrichtigungen auszulösen oder sie für weitere Analysen verfügbar zu machen.
Um Daten an Ihren Log Analytics-Arbeitsbereich zu senden, benötigen Sie eine benutzerdefinierte Tabelle, einen Datensammlungsendpunkt, eine Datensammlungsregel und eine registrierte Microsoft Entra-Anwendung mit der Berechtigung zur Verwendung der Datensammlungsregel, wie im Tutorial: Senden von Daten an Azure Monitor-Protokolle mithilfe der Protokollerfassungs-API (Azure-Portal) erläutert wird.
Wenn Sie Ihre benutzerdefinierte Tabelle erstellen:
Laden Sie diese Beispieldatei hoch, um das Tabellenschema zu definieren:
[ { "TimeGenerated": "2023-03-19T19:56:43.7447391Z", "ActualUsage": 40.1, "DataType": "AzureDiagnostics" } ]
Definieren Sie die Konstanten, die Sie für die Protokollerfassungs-API benötigen:
os.environ['AZURE_TENANT_ID'] = "<Tenant ID>"; #ID of the tenant where the data collection endpoint resides os.environ['AZURE_CLIENT_ID'] = "<Application ID>"; #Application ID to which you granted permissions to your data collection rule os.environ['AZURE_CLIENT_SECRET'] = "<Client secret>"; #Secret created for the application os.environ['LOGS_DCR_STREAM_NAME'] = "<Custom stream name>" ##Name of the custom stream from the data collection rule os.environ['LOGS_DCR_RULE_ID'] = "<Data collection rule immutableId>" # immutableId of your data collection rule os.environ['DATA_COLLECTION_ENDPOINT'] = "<Logs ingestion URL of your endpoint>" # URL that looks like this: https://xxxx.ingest.monitor.azure.com
Erfassen Sie die Daten in der benutzerdefinierten Tabelle in Ihrem Log Analytics-Arbeitsbereich:
from azure.core.exceptions import HttpResponseError from azure.identity import ClientSecretCredential from azure.monitor.ingestion import LogsIngestionClient import json credential = ClientSecretCredential( tenant_id=AZURE_TENANT_ID, client_id=AZURE_CLIENT_ID, client_secret=AZURE_CLIENT_SECRET ) client = LogsIngestionClient(endpoint=DATA_COLLECTION_ENDPOINT, credential=credential, logging_enable=True) body = json.loads(analyzed_df.to_json(orient='records', date_format='iso')) try: response = client.upload(rule_id=LOGS_DCR_RULE_ID, stream_name=LOGS_DCR_STREAM_NAME, logs=body) print("Upload request accepted") except HttpResponseError as e: print(f"Upload failed: {e}")
Hinweis
Wenn Sie eine Tabelle in Ihrem Log Analytics-Arbeitsbereich erstellen, kann es bis zu 15 Minuten dauern, bis erfasste Daten in der Tabelle angezeigt werden.
Vergewissern Sie sich, dass die Daten jetzt in Ihrer benutzerdefinierten Tabelle angezeigt werden.
Nächste Schritte
Erfahren Sie mehr über Folgendes: