Tutorial: Analisar dados nos logs do Azure Monitor usando um notebook

Notebooks são ambientes integrados que permitem criar e compartilhar documentos com código dinâmico, equações, visualizações e texto. A integração de um notebook a um workspace do Log Analytics permite criar um processo de várias etapas que executa o código em cada etapa com base nos resultados da etapa anterior. Você pode usar esses processos simplificados para criar pipelines de aprendizado de máquina, ferramentas de análise avançadas, TSGs (guias de solução de problemas) para necessidades de suporte e muito mais.

A integração de um notebook a um workspace do Log Analytics também permite:

  • Executar consultas KQL e código personalizado em qualquer idioma.
  • Introduzir novos recursos de análise e visualização, como novos modelos de aprendizado de máquina, linhas do tempo personalizadas e árvores de processo.
  • Integrar conjuntos de dados fora dos Logs do Azure Monitor, como conjuntos de dados locais.
  • Aproveitar o aumento dos limites de serviço usando os limites da API de Consulta em comparação com o portal do Azure.

Neste tutorial, você aprenderá como:

Para obter um exemplo de como criar um pipeline de aprendizado de máquina para analisar dados nos Logs do Azure Monitor usando um notebook, consulte este notebook de exemplo : Detectar anomalias nos Logs do Azure Monitor usando técnicas de aprendizado de máquina.

Pré-requisitos

Para este tutorial, é necessário:

Ferramentas e notebooks

Neste tutorial, você usa estas ferramentas:

Ferramenta Descrição
Biblioteca de clientes de Consulta do Azure Monitor Permite executar consultas somente leitura em dados nos Logs do Azure Monitor.
Biblioteca de clientes da Identidade do Azure Permite que os clientes do SDK do Azure se autentiquem com o Microsoft Entra ID.
Biblioteca de clientes de Ingestão do Azure Monitor Permite enviar logs personalizados para o Azure Monitor usando a API de Ingestão de Logs. Necessário para ingerir dados analisados em uma tabela personalizada no workspace do Log Analytics (opcional)
Regra de coleta de dados de ponto de extremidade de coleta de dados e um aplicativo registrado Necessário para ingerir dados analisados em uma tabela personalizada no workspace do Log Analytics (opcional)

Outras bibliotecas de consulta que você pode usar incluem:

  • A biblioteca Kqlmagic permite executar consultas KQL diretamente dentro de um notebook da mesma forma que você executa consultas KQL na ferramenta Log Analytics.
  • A biblioteca MSTICPY fornece consultas modelo que invocam recursos internos de série temporal KQL e de aprendizado de máquina e fornece ferramentas de visualização avançadas e análises de dados no workspace do Log Analytics.

Outras experiências de notebook da Microsoft para análise avançada incluem:

1. Integrar seu workspace do Log Analytics ao seu notebook

Configure seu notebook para consultar seu workspace do Log Analytics:

  1. Instale as bibliotecas de clientes de Consulta do Azure Monitor, Identidade do Azure e Ingestão do Azure Monitor juntamente com a biblioteca de análise de dados do Pandas, biblioteca de visualização plotada:

    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. Defina a variável LOGS_WORKSPACE_ID abaixo como a ID do workspace do Log Analytics. No momento, a variável está definida para usar o workspace de demonstração do Azure Monitor, que você pode usar para demonstração do notebook.

    LOGS_WORKSPACE_ID = "DEMO_WORKSPACE"
    
  3. Configure LogsQueryClient para autenticar e consultar logs do Azure Monitor.

    Esse código configura LogsQueryClient para autenticar usando 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 normalmente só oferece suporte à autenticação com credenciais de token do Microsoft Entra. No entanto, podemos passar uma política de autenticação personalizada para habilitar o uso de chaves de API. Isso permite que o cliente consulte o workspace de demonstração. A disponibilidade e o acesso a esse workspace de demonstração estão sujeitos a alterações, portanto, recomendamos usar seu próprio workspace do Log Analytics.

  4. Defina uma função auxiliar, chamada query_logs_workspace, para executar uma determinada consulta no workspace do Log Analytics e retornar os resultados como um DataFrame do 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 e visualizar dados do workspace do Log Analytics em seu notebook

Vamos examinar alguns dados no workspace executando uma consulta no notebook:

  1. Essa consulta verifica quantos dados (em Megabytes) você ingeriu em cada uma das tabelas (tipos de dados) no workspace do Log Analytics a cada hora na última semana:

    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)
    

    O DataFrame resultante mostra a ingestão por hora em cada uma das tabelas no workspace do Log Analytics:

    Captura de tela de um DataFrame gerado em um notebook com log de ingestão de dados recuperado de um workspace do Log Analytics.

  2. Agora, vamos exibir os dados como um grafo que mostra o uso por hora para vários tipos de dados ao longo do tempo, com base no DataFrame do 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()
    

    O grafo resultante tem esta aparência:

    Um grafo que mostra a quantidade de dados ingeridos em cada tabela em workspace do Log Analytics durante sete dias.

    Você consultou e visualizou com sucesso os dados de log do workspace do Log Analytics em seu notebook.

3 – Analisar dados

Como um exemplo simples, vamos usar as cinco primeiras linhas:

analyzed_df = df.head(5)

Para obter um exemplo de como implementar técnicas de aprendizado de máquina para analisar dados nos Logs do Azure Monitor, consulte este notebook de exemplo : Detectar anomalias nos Logs do Azure Monitor usando técnicas de aprendizado de máquina.

4. Ingerir dados analisados em uma tabela personalizada no workspace do Log Analytics (opcional)

Envie os resultados da análise para uma tabela personalizada no workspace do Log Analytics para disparar alertas ou disponibilizá-los para análise posterior.

  1. Para enviar dados para seu espaço de trabalho do Log Analytics, você precisa de uma tabela personalizada, ponto de extremidade de coleta de dados, regra de coleta de dados e um aplicativo Microsoft Entra registrado com permissão para usar a regra de coleta de dados, conforme explicado em Tutorial: enviar dados para logs do Azure Monitor com API de ingestão de logs (portal do Azure).

    Ao criar sua tabela personalizada:

    1. Carregue este arquivo de exemplo para definir o esquema da tabela:

      [
        {
          "TimeGenerated": "2023-03-19T19:56:43.7447391Z",    
          "ActualUsage": 40.1,    
          "DataType": "AzureDiagnostics"     
        } 
      ]
      
  2. Defina as constantes necessárias para a API de Ingestão de Logs:

    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. Ingerir os dados na tabela personalizada no workspace do 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}")
    

    Observação

    Quando você cria uma tabela no workspace do Log Analytics, pode levar até 15 minutos para que os dados ingeridos apareçam na tabela.

  4. Verifique se os dados agora aparecem em sua tabela personalizada.

    Captura de tela que mostra uma consulta no Log Analytics em uma tabela personalizada na qual os resultados da análise do bloco de anotações foram ingeridos.

Próximas etapas

Saiba mais sobre como: