Share via


Självstudie: Analysera data i Azure Monitor-loggar med hjälp av en notebook-fil

Notebook-filer är integrerade miljöer där du kan skapa och dela dokument med livekod, ekvationer, visualiseringar och text. Genom att integrera en notebook-fil med en Log Analytics-arbetsyta kan du skapa en process i flera steg som kör kod i varje steg baserat på resultatet från föregående steg. Du kan använda sådana effektiva processer för att skapa maskininlärningspipelines, avancerade analysverktyg, felsökningsguider (TSG:er) för supportbehov med mera.

När du integrerar en notebook-fil med en Log Analytics-arbetsyta kan du också:

  • Kör KQL-frågor och anpassad kod på valfritt språk.
  • Introducera nya analys- och visualiseringsfunktioner, till exempel nya maskininlärningsmodeller, anpassade tidslinjer och processträd.
  • Integrera datauppsättningar utanför Azure Monitor-loggar, till exempel en lokal datauppsättning.
  • Dra nytta av ökade tjänstgränser med hjälp av fråge-API-gränserna jämfört med Azure-portalen.

I den här självstudien lär du dig att:

Ett exempel på hur du skapar en maskininlärningspipeline för att analysera data i Azure Monitor-loggar med hjälp av en notebook-fil finns i den här exempelanteckningsboken: Identifiera avvikelser i Azure Monitor-loggar med hjälp av maskininlärningstekniker.

Förutsättningar

Du behöver följande för den här självstudien:

Verktyg och anteckningsböcker

I den här självstudien använder du följande verktyg:

Verktyg Description
Azure Monitor Query-klientbibliotek Gör att du kan köra skrivskyddade frågor på data i Azure Monitor-loggar.
Azure Identity-klientbibliotek Gör att Azure SDK-klienter kan autentisera med Microsoft Entra-ID.
Azure Monitor-klientbibliotek för inmatning Gör att du kan skicka anpassade loggar till Azure Monitor med hjälp av API:et för logginmatning. Krävs för att mata in analyserade data i en anpassad tabell på din Log Analytics-arbetsyta (valfritt)
Datainsamlingsregel, datainsamlingsslutpunkt och ett registrerat program Krävs för att mata in analyserade data i en anpassad tabell på din Log Analytics-arbetsyta (valfritt)

Andra frågebibliotek som du kan använda är:

  • Med Kqlmagic-biblioteket kan du köra KQL-frågor direkt i en notebook-fil på samma sätt som du kör KQL-frågor från Log Analytics-verktyget.
  • MSTICPY-biblioteket innehåller mallade frågor som anropar inbyggda KQL-tidsserier och maskininlärningsfunktioner och tillhandahåller avancerade visualiseringsverktyg och analyser av data på Log Analytics-arbetsytan.

Andra Microsoft Notebook-funktioner för avancerad analys är:

1. Integrera din Log Analytics-arbetsyta med din notebook-fil

Konfigurera din notebook-fil för att fråga din Log Analytics-arbetsyta:

  1. Installera klientbiblioteken för Azure Monitor Query, Azure Identity och Azure Monitor Ingestion tillsammans med Pandas-dataanalysbiblioteket, plottvisualiseringsbiblioteket:

    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. Ange variabeln LOGS_WORKSPACE_ID nedan till ID för din Log Analytics-arbetsyta. Variabeln är för närvarande inställd på att använda Azure Monitor Demo-arbetsytan, som du kan använda för att demonstrera notebook-filen.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Konfigurera LogsQueryClient för att autentisera och fråga Azure Monitor-loggar.

    Den här koden konfigureras LogsQueryClient för att autentisera med :DefaultAzureCredential

    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 stöder vanligtvis endast autentisering med autentiseringsuppgifter för Microsoft Entra-token. Vi kan dock skicka en anpassad autentiseringsprincip för att aktivera användning av API-nycklar. På så sätt kan klienten köra frågor mot demoarbetsytan. Tillgängligheten och åtkomsten till den här demoarbetsytan kan komma att ändras, så vi rekommenderar att du använder din egen Log Analytics-arbetsyta.

  4. Definiera en hjälpfunktion med namnet query_logs_workspace, för att köra en viss fråga på Log Analytics-arbetsytan och returnera resultatet som en Pandas DataFrame.

    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. Utforska och visualisera data från Log Analytics-arbetsytan i anteckningsboken

Nu ska vi titta på vissa data på arbetsytan genom att köra en fråga från notebook-filen:

  1. Den här frågan kontrollerar hur mycket data (i Megabyte) som du har matat in i var och en av tabellerna (datatyperna) på Din Log Analytics-arbetsyta varje timme under den senaste veckan:

    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)
    

    Den resulterande DataFrame visar timinmatningen i var och en av tabellerna på Log Analytics-arbetsytan:

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

  2. Nu ska vi visa data som ett diagram som visar användning per timme för olika datatyper över tid, baserat på Pandas DataFrame:

    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()
    

    Det resulterande diagrammet ser ut så här:

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

    Du har frågat och visualiserat loggdata från Log Analytics-arbetsytan i notebook-filen.

3. Analysera data

Som ett enkelt exempel tar vi de första fem raderna:

analyzed_df = df.head(5)

Ett exempel på hur du implementerar maskininlärningstekniker för att analysera data i Azure Monitor-loggar finns i den här exempelanteckningsboken: Identifiera avvikelser i Azure Monitor-loggar med hjälp av maskininlärningstekniker.

4. Mata in analyserade data i en anpassad tabell på din Log Analytics-arbetsyta (valfritt)

Skicka dina analysresultat till en anpassad tabell i Log Analytics-arbetsytan för att utlösa aviseringar eller för att göra dem tillgängliga för ytterligare analys.

  1. Om du vill skicka data till Log Analytics-arbetsytan behöver du en anpassad tabell, slutpunkt för datainsamling, datainsamlingsregel och ett registrerat Microsoft Entra-program med behörighet att använda datainsamlingsregeln, enligt beskrivningen i Självstudie: Skicka data till Azure Monitor-loggar med Inmatnings-API för loggar (Azure-portalen).

    När du skapar din anpassade tabell:

    1. Ladda upp den här exempelfilen för att definiera tabellschemat:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Definiera de konstanter som du behöver för API:et för logginmatning:

    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. Mata in data i den anpassade tabellen på Log Analytics-arbetsytan:

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

    Kommentar

    När du skapar en tabell på Log Analytics-arbetsytan kan det ta upp till 15 minuter innan inmatade data visas i tabellen.

  4. Kontrollera att data nu visas i den anpassade tabellen.

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

Nästa steg

Läs mer om hur du: