Esercitazione: Analizzare i dati nei log di Monitoraggio di Azure usando un notebook

I notebook sono ambienti integrati che consentono di creare e condividere documenti con codice live, equazioni, visualizzazioni e testo. L'integrazione di un notebook con un'area di lavoro Log Analytics consente di creare un processo in più passaggi che esegue il codice in ogni passaggio in base ai risultati del passaggio precedente. È possibile usare questi processi semplificati per creare pipeline di Machine Learning, strumenti di analisi avanzati, guide alla risoluzione dei problemi (TSG) per esigenze di supporto e altro ancora.

L'integrazione di un notebook con un'area di lavoro Log Analytics consente anche di:

  • Eseguire query KQL e codice personalizzato in qualsiasi linguaggio.
  • Introdurre nuove funzionalità di analisi e visualizzazione, ad esempio nuovi modelli di Machine Learning, sequenze temporali personalizzate e alberi di elaborazione.
  • Integrare set di dati all'esterno dei log di Monitoraggio di Azure, ad esempio set di dati locali.
  • Sfruttare i vantaggi dell'aumento dei limiti del servizio usando i limiti dell'API query rispetto al portale di Azure.

In questa esercitazione apprenderai a:

  • Integrare un notebook con l'area di lavoro Log Analytics usando la libreria client di Query di Monitoraggio di Azure e la libreria client di Identità di Azure
  • Esplorare e visualizzare i dati dall'area di lavoro Log Analytics in un notebook
  • Inserire dati dal notebook in una tabella personalizzata nell'area di lavoro Log Analytics (facoltativo)

Per un esempio di come creare una pipeline di Machine Learning per analizzare i dati nei log di Monitoraggio di Azure usando un notebook, vedere questo notebook di esempio: Rilevare le anomalie nei log di Monitoraggio di Azure usando tecniche di Machine Learning.

Suggerimento

Per ovviare alle limitazioni correlate all'API, suddividere le query di dimensioni maggiori in più query più piccole.

Prerequisiti

Per eseguire questa esercitazione, è necessario avere:

  • Un'area di lavoro di Azure Machine Learning con un'istanza di calcolo della CPU con:

    • Un notebook.
    • Un kernel impostato su Python 3.8 o versione successiva.
  • I ruoli e le autorizzazioni seguenti:

    • Nei log di Monitoraggio di Azure: ruolo Collaboratore log analytics per leggere i dati da e inviare dati all'area di lavoro Log Analytics. Per altre informazioni, vedere Gestire l'accesso alle aree di lavoro Log Analytics.

    • In Azure Machine Learning:

      • Ruolo Proprietario o Collaboratore a livello di gruppo di risorse per creare una nuova area di lavoro di Azure Machine Learning, se necessario.
      • Ruolo Collaboratore nell'area di lavoro di Azure Machine Learning in cui si esegue il notebook.

      Per altre informazioni, vedere Gestire l'accesso a un'area di lavoro di Azure Machine Learning.

Strumenti e notebook

In questa esercitazione si usano questi strumenti:

Strumento Descrizione
Libreria client di Query di Monitoraggio di Azure Consente di eseguire query di sola lettura sui dati nei log di Monitoraggio di Azure.
Libreria client di Identità di Azure Consente ai client Azure SDK di eseguire l'autenticazione con Microsoft Entra ID.
Libreria client di inserimento di Monitoraggio di Azure Consente di inviare log personalizzati a Monitoraggio di Azure usando l'API di inserimento dei log. Necessario per inserire dati analizzati in una tabella personalizzata nell'area di lavoro Log Analytics (facoltativo)
Regola di raccolta dati, endpoint di raccolta dati e applicazione registrata Necessario per inserire dati analizzati in una tabella personalizzata nell'area di lavoro Log Analytics (facoltativo)

Altre librerie di query che è possibile usare includono:

  • La libreria Kqlmagic consente di eseguire query KQL direttamente all'interno di un notebook nello stesso modo in cui si eseguono query KQL dallo strumento Log Analytics.
  • La libreria MSTICPY fornisce query basate su modelli che richiamano le funzionalità predefinite della serie temporale KQL e di Machine Learning e fornisce strumenti di visualizzazione avanzati e analisi dei dati nell'area di lavoro Log Analytics.

Altre esperienze dei notebook Microsoft per l'analisi avanzata includono:

1. Integrare l'area di lavoro Log Analytics con il notebook

Configurare il notebook per eseguire query nell'area di lavoro Log Analytics:

  1. Installare le librerie client di inserimento di Monitoraggio di Azure, Identità di Azure e Monitoraggio di Azure insieme alla libreria di analisi dei dati Pandas, libreria di visualizzazione Plotly:

    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. Impostare la LOGS_WORKSPACE_ID variabile seguente sull'ID dell'area di lavoro Log Analytics. La variabile è attualmente impostata per l'uso dell'area di lavoro Demo di Monitoraggio di Azure, che è possibile usare per demore il notebook.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Configurare LogsQueryClient per autenticare ed eseguire query sui log di Monitoraggio di Azure.

    Questo codice viene configurato LogsQueryClient per l'autenticazione tramite 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 in genere supporta solo l'autenticazione con le credenziali del token Microsoft Entra. È tuttavia possibile passare criteri di autenticazione personalizzati per abilitare l'uso delle chiavi API. In questo modo il client può eseguire una query sull'area di lavoro demo. La disponibilità e l'accesso a questa area di lavoro demo sono soggetti a modifiche, quindi è consigliabile usare la propria area di lavoro Log Analytics.

  4. Definire una funzione helper, denominata query_logs_workspace, per eseguire una determinata query nell'area di lavoro Log Analytics e restituire i risultati come dataframe Pandas.

    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. Esplorare e visualizzare i dati dall'area di lavoro Log Analytics nel notebook

Verranno ora esaminati alcuni dati nell'area di lavoro eseguendo una query dal notebook:

  1. Questa query controlla la quantità di dati (in megabyte) inseriti in ognuna delle tabelle (tipi di dati) nell'area di lavoro Log Analytics ogni ora nell'ultima settimana:

    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)
    

    Il dataframe risultante mostra l'inserimento orario in ognuna delle tabelle nell'area di lavoro Log Analytics:

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

  2. È ora possibile visualizzare i dati come grafico che mostra l'utilizzo orario per vari tipi di dati nel tempo, in base al dataframe Pandas:

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

    Il grafico risultante è simile al seguente:

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

    I dati di log dell'area di lavoro Log Analytics sono stati sottoposti a query e visualizzati correttamente nel notebook.

3. Analizzare i dati

Come esempio semplice, si prendano le prime cinque righe:

analyzed_df = df.head(5)

Per un esempio di come implementare tecniche di Machine Learning per analizzare i dati nei log di Monitoraggio di Azure, vedere questo notebook di esempio: Rilevare le anomalie nei log di Monitoraggio di Azure usando tecniche di Machine Learning.

4. Inserire dati analizzati in una tabella personalizzata nell'area di lavoro Log Analytics (facoltativo)

Inviare i risultati dell'analisi a una tabella personalizzata nell'area di lavoro Log Analytics per attivare gli avvisi o renderli disponibili per un'ulteriore analisi.

  1. Per inviare dati all'area di lavoro Log Analytics, è necessaria una tabella personalizzata, un endpoint di raccolta dati, una regola di raccolta dati e un'applicazione Microsoft Entra registrata con l'autorizzazione per usare la regola di raccolta dati, come illustrato in Esercitazione: Inviare dati ai log di Monitoraggio di Azure con l'API di inserimento log (portale di Azure).

    Quando si crea la tabella personalizzata:

    1. Caricare questo file di esempio per definire lo schema della tabella:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Definire le costanti necessarie per l'API di inserimento log:

    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. Inserire i dati nella tabella personalizzata nell'area di lavoro Log Analytics:

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

    Nota

    Quando si crea una tabella nell'area di lavoro Log Analytics, la visualizzazione dei dati inseriti nella tabella può richiedere fino a 15 minuti.

  4. Verificare che i dati siano ora visualizzati nella tabella personalizzata.

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

Passaggi successivi

Altre informazioni su come: