Megosztás a következőn keresztül:


Oktatóanyag: Adatok elemzése az Azure Monitor-naplókban jegyzetfüzet használatával

A jegyzetfüzetek olyan integrált környezetek, amelyek lehetővé teszik dokumentumok létrehozását és megosztását élő kóddal, egyenletekkel, vizualizációkkal és szöveggel. Egy jegyzetfüzet Log Analytics-munkaterülettel való integrálásával létrehozhat egy többlépéses folyamatot, amely az előző lépés eredményei alapján minden lépésben futtat kódot. Ilyen leegyszerűsített folyamatokkal gépi tanulási folyamatokat, fejlett elemzési eszközöket, hibaelhárítási útmutatókat (TSG-ket) hozhat létre a támogatási igényeknek megfelelően, és így tovább.

A jegyzetfüzetek Log Analytics-munkaterülettel való integrálásával a következőket is lehetővé teszi:

  • KQL-lekérdezések és egyéni kód futtatása bármilyen nyelven.
  • Új elemzési és vizualizációs képességek, például új gépi tanulási modellek, egyéni ütemtervek és folyamatfák bemutatása.
  • Integrálhatók az Azure Monitor-naplókon kívüli adatkészletek, például egy helyszíni adatkészletek.
  • Használja ki a megnövekedett szolgáltatási korlátokat a Query API-korlátok használatával az Azure Portalhoz képest.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

Az Azure Monitor-naplók adatainak notebook használatával történő elemzésére szolgáló gépi tanulási folyamat létrehozásához tekintse meg ezt a mintajegyzetfüzetet: Az Azure Monitor-naplók rendellenességeinek észlelése gépi tanulási technikákkal.

Tipp.

Az API-val kapcsolatos korlátozások megkerüléséhez ossza fel a nagyobb lekérdezéseket több kisebb lekérdezésre.

Előfeltételek

Ebben az oktatóanyagban a következőkre van szüksége:

Eszközök és jegyzetfüzetek

Ebben az oktatóanyagban az alábbi eszközöket használja:

Eszköz Leírás
Azure Monitor Query ügyfélkódtár Lehetővé teszi írásvédett lekérdezések futtatását az adatokon az Azure Monitor-naplókban.
Azure Identity-ügyfélkódtár Lehetővé teszi az Azure SDK-ügyfelek számára a Microsoft Entra-azonosítóval való hitelesítést.
Azure Monitor Betöltési ügyfélkódtár Lehetővé teszi egyéni naplók küldését az Azure Monitorba a Logs Ingestion API használatával. Az elemzett adatok Log Analytics-munkaterületen lévő egyéni táblába való betöltéséhez szükséges (nem kötelező)
Adatgyűjtési szabály, adatgyűjtési végpont és regisztrált alkalmazás Az elemzett adatok Log Analytics-munkaterületen lévő egyéni táblába való betöltéséhez szükséges (nem kötelező)

További használható lekérdezéstárak:

  • A Kqlmagic-kódtár lehetővé teszi a KQL-lekérdezések közvetlen futtatását közvetlenül egy jegyzetfüzetben, ugyanúgy, mint a Log Analytics eszköz KQL-lekérdezéseit.
  • Az MSTICPY-kódtár olyan sablonalapú lekérdezéseket biztosít, amelyek beépített KQL-idősorokat és gépi tanulási képességeket hívnak meg, valamint fejlett vizualizációs eszközöket és adatelemzéseket biztosítanak a Log Analytics-munkaterületen.

A microsoftos jegyzetfüzetek további speciális elemzési felületei a következők:

1. A Log Analytics-munkaterület integrálása a jegyzetfüzettel

Állítsa be a jegyzetfüzetet a Log Analytics-munkaterület lekérdezéséhez:

  1. Telepítse az Azure Monitor Query, az Azure Identity és az Azure Monitor Betöltési ügyfélkódtárakat, valamint a Pandas adatelemzési könyvtárát, a Plotly visualization libraryt:

    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. Állítsa az LOGS_WORKSPACE_ID alábbi változót a Log Analytics-munkaterület azonosítójára. A változó jelenleg az Azure Monitor Demo munkaterület használatára van beállítva, amellyel lefokozhatja a jegyzetfüzetet.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Állítsa be LogsQueryClient az Azure Monitor-naplók hitelesítését és lekérdezését.

    Ez a kód a következővel DefaultAzureCredentialállítja be LogsQueryClient a hitelesítést:

    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 általában csak a Microsoft Entra-jogkivonat hitelesítő adataival való hitelesítést támogatja. Azonban át tudunk adni egy egyéni hitelesítési szabályzatot az API-kulcsok használatának engedélyezéséhez. Így az ügyfél lekérdezheti a bemutató munkaterületet. A bemutató munkaterület rendelkezésre állása és elérése változhat, ezért javasoljuk, hogy saját Log Analytics-munkaterületet használjon.

  4. Adjon meg egy úgynevezett query_logs_workspacesegédfüggvényt, amellyel futtathat egy adott lekérdezést a Log Analytics-munkaterületen, és pandas DataFrame-ként adja vissza az eredményeket.

    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. A Log Analytics-munkaterület adatainak felfedezése és vizualizációja a jegyzetfüzetben

Tekintsünk meg néhány adatot a munkaterületen a jegyzetfüzetből származó lekérdezés futtatásával:

  1. Ez a lekérdezés ellenőrzi, hogy mennyi adatot (megabájtban) fogadott be a Log Analytics-munkaterület minden egyes táblájába (adattípusába) az elmúlt hét minden órájában:

    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)
    

    Az eredményül kapott DataFrame a Log Analytics-munkaterület minden táblájában megjeleníti az óránkénti betöltést:

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

  2. Most tekintsük meg az adatokat egy grafikonként, amely a Pandas DataFrame alapján megjeleníti a különböző adattípusok óránkénti használatát:

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

    Az eredményként kapott gráf a következőképpen néz ki:

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

    Sikeresen lekérdezte és vizualizálta a naplóadatokat a Log Analytics-munkaterületről a jegyzetfüzetben.

3. Adatok elemzése

Egyszerű példaként vegyük az első öt sort:

analyzed_df = df.head(5)

Az Azure Monitor-naplókban lévő adatok elemzésére szolgáló gépi tanulási technikák implementálásához tekintse meg ezt a mintajegyzetfüzetet: A rendellenességek észlelése az Azure Monitor-naplókban gépi tanulási technikákkal.

4. Elemezt adatok betöltése egyéni táblába a Log Analytics-munkaterületen (nem kötelező)

Küldje el az elemzési eredményeket a Log Analytics-munkaterület egy egyéni táblájába riasztások aktiválásához vagy további elemzéshez való elérhetővé tétele érdekében.

  1. Ahhoz, hogy adatokat küldjön a Log Analytics-munkaterületre, szüksége van egy egyéni táblára, adatgyűjtési végpontra, adatgyűjtési szabályra és egy regisztrált Microsoft Entra-alkalmazásra az adatgyűjtési szabály használatára vonatkozó engedéllyel, az oktatóanyagban leírtak szerint: Adatok küldése az Azure Monitor-naplókba a Logs ingestion API-val (Azure Portal).

    Az egyéni tábla létrehozásakor:

    1. Töltse fel ezt a mintafájlt a táblaséma definiálásához:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Adja meg a Logs Ingestion API-hoz szükséges állandókat:

    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. Az adatok betöltése az egyéni táblába a Log Analytics-munkaterületen:

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

    Megjegyzés:

    Amikor létrehoz egy táblát a Log Analytics-munkaterületen, az akár 15 percet is igénybe vehet, amíg a betöltött adatok megjelennek a táblában.

  4. Ellenőrizze, hogy az adatok most már megjelennek-e az egyéni táblában.

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

Következő lépések

További információ az alábbiakról: