Tutorial: Análisis de datos en registros de Azure Monitor mediante un cuaderno

Los cuadernos son entornos integrados que permiten crear y compartir documentos con código dinámico, ecuaciones, visualizaciones y texto. La integración de un cuaderno con un área de trabajo de Log Analytics le permite crear un proceso de varios pasos que ejecute código en cada paso en función de los resultados del paso anterior. Puede usar estos procesos simplificados para crear canalizaciones de aprendizaje automático, herramientas de análisis avanzadas, guías de solución de problemas (TSG) para las necesidades de soporte técnico, etc.

La integración de un cuaderno con un área de trabajo de Log Analytics también le permite:

  • Ejecutar consultas KQL y código personalizado en cualquier lenguaje.
  • Introducir nuevas funcionalidades de análisis y visualización, como nuevos modelos de aprendizaje automático, escalas de tiempo personalizadas y árboles de proceso.
  • Integrar conjuntos de datos fuera de los registros de Azure Monitor, como conjuntos de datos locales.
  • Aprovechar los límites de servicio aumentados mediante los límites de API de consulta en comparación con el Azure Portal.

En este tutorial, aprenderá a:

Para ver un ejemplo de cómo crear una canalización de aprendizaje automático para analizar datos en registros de Azure Monitor mediante un cuaderno, consulte este cuaderno de ejemplo: Detección de anomalías en los registros de Azure Monitor mediante técnicas de aprendizaje automático.

Prerrequisitos

En este tutorial, necesitará:

Herramientas y cuadernos

En este tutorial, usará estas herramientas:

Herramienta Descripción
Biblioteca cliente de consulta de Azure Monitor Permite ejecutar consultas de solo lectura en los datos de los registros de Azure Monitor.
Biblioteca cliente de Azure Identity Permite a los clientes de Azure SDK autenticarse con Microsoft Entra ID.
Biblioteca cliente de ingesta de Azure Monitor Permite enviar registros personalizados a Azure Monitor mediante la API de ingesta de registros. Necesario para ingerir datos analizados en una tabla personalizada en el área de trabajo de Log Analytics (opcional)
Regla de recopilación de datos, punto de conexión de recopilación de datos y una aplicación registrada Necesario para ingerir datos analizados en una tabla personalizada en el área de trabajo de Log Analytics (opcional)

Otras bibliotecas de consultas que puede usar incluyen:

  • La biblioteca Kqlmagic le permite ejecutar consultas de KQL directamente dentro de un cuaderno de la misma manera que ejecuta consultas KQL desde la herramienta Log Analytics.
  • La biblioteca MSTICPY proporciona consultas con plantillas que invocan funcionalidades de aprendizaje automático y serie temporal de KQL integradas, y proporcionan herramientas de visualización avanzadas y análisis de datos en el área de trabajo de Log Analytics.

Otras experiencias de cuadernos de Microsoft para el análisis avanzado incluyen:

1. Integración del área de trabajo de Log Analytics con el cuaderno

Configure el cuaderno para consultar el área de trabajo de Log Analytics:

  1. Instale las bibliotecas cliente de ingesta de Azure Monitor, Azure Identity y Azure Monitor, junto con la biblioteca de análisis de datos de Pandas, y la biblioteca de visualización de 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. Establezca la variable LOGS_WORKSPACE_ID siguiente en el identificador del área de trabajo de Log Analytics. La variable está establecida actualmente para usar el área de trabajo demostración de Azure Monitor, que puede usar para demostrar el cuaderno.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Configure LogsQueryClient para autenticar y consultar registros de Azure Monitor.

    Este código configura LogsQueryClient para autenticarse mediante 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)
    

    Normalmente, LogsQueryClient solo admite la autenticación con credenciales de token de Microsoft Entra. Sin embargo, podemos pasar una directiva de autenticación personalizada para habilitar el uso de claves de API. Esto permite al cliente consultar el área de trabajo de demostración. La disponibilidad y el acceso a esta área de trabajo de demostración están sujetas a cambios, por lo que se recomienda usar su propio área de trabajo de Log Analytics.

  4. Defina una función auxiliar, denominada query_logs_workspace, para ejecutar una consulta determinada en el área de trabajo de Log Analytics y devolver los resultados como DataFrame de 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. Explorar y visualizar los datos desde el área de trabajo de Log Analytics en su cuaderno

Echemos un vistazo a algunos datos del área de trabajo ejecutando una consulta desde el cuaderno:

  1. Esta consulta comprueba la cantidad de datos (en Megabytes) que ingirió en cada una de las tablas (tipos de datos) del área de trabajo de Log Analytics cada hora en la semana pasada:

    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)
    

    El DataFrame resultante muestra la ingesta por hora en cada una de las tablas del área de trabajo de Log Analytics:

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

  2. Ahora, veamos los datos como un gráfico que muestra el uso por hora de varios tipos de datos a lo largo del tiempo, en función del DataFrame de 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()
    

    El grafo resultante tendrá este aspecto:

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

    Ha consultado y visualizado correctamente los datos de registro desde el área de trabajo de Log Analytics en el cuaderno.

3. Análisis de datos

Como ejemplo sencillo, vamos a tomar las cinco primeras filas:

analyzed_df = df.head(5)

Para ver un ejemplo de cómo implementar técnicas de aprendizaje automático para analizar datos en registros de Azure Monitor, consulte este cuaderno de ejemplo: Detección de anomalías en los registros de Azure Monitor mediante técnicas de aprendizaje automático.

4. Ingesta de datos analizados en una tabla personalizada en el área de trabajo de Log Analytics (opcional)

Envíe los resultados del análisis a una tabla personalizada en el área de trabajo de Log Analytics para desencadenar alertas o para que estén disponibles para su análisis posterior.

  1. Para enviar datos al área de trabajo de Log Analytics, necesita una tabla personalizada, un punto de conexión de recopilación de datos, una regla de recopilación de datos y una aplicación de Microsoft Entra registrada con permiso para usar la regla de recopilación de datos, como se explica en Tutorial: Envío de datos a registros de Azure Monitor con la API de ingesta de registros (Azure Portal).

    Al crear la tabla personalizada:

    1. Cargue este archivo de ejemplo para definir el esquema de tabla:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Defina las constantes que necesita para la API de ingesta de registros:

    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. Ingiera los datos en la tabla personalizada en el área de trabajo de 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

    Al crear una tabla en el área de trabajo de Log Analytics, los datos ingeridos pueden tardar hasta 15 minutos en aparecer en la tabla.

  4. Compruebe que los datos ahora aparecen en la tabla personalizada.

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

Pasos siguientes

Obtén más información sobre cómo: