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.

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

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:

  1. 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 
    
  2. 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"
    
  3. 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.

  4. 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:

  1. 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:

    Screenshot of a DataFrame generated in a notebook with log ingestion data retrieved from a Log Analytics workspace.

  2. 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:

    A graph that shows the amount of data ingested into each of the tables in a Log Analytics workspace over seven days.

    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.

  1. 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:

    1. Laden Sie diese Beispieldatei hoch, um das Tabellenschema zu definieren:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. 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
    
  3. 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.

  4. Vergewissern Sie sich, dass die Daten jetzt in Ihrer benutzerdefinierten Tabelle angezeigt werden.

    Screenshot that shows a query in Log Analytics on a custom table into which the analysis results from the notebook were ingested.

Nächste Schritte

Erfahren Sie mehr über Folgendes: