Tutorial: Analisar dados nos Logs do Azure Monitor usando um bloco de anotações

Os blocos de notas são ambientes integrados que lhe permitem criar e partilhar documentos com código dinâmico, equações, visualizações e texto. A integração de um bloco de anotações com um espaço de trabalho do Log Analytics permite criar um processo de várias etapas que executa 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, guias de solução de problemas (TSGs) para necessidades de suporte e muito mais.

A integração de um bloco de anotações com um espaço de trabalho do Log Analytics também permite:

  • Execute consultas KQL e código personalizado em qualquer idioma.
  • Introduza novos recursos de análise e visualização, como novos modelos de aprendizado de máquina, cronogramas personalizados e árvores de processos.
  • Integre conjuntos de dados fora dos Logs do Azure Monitor, como conjuntos de dados locais.
  • Aproveite os limites de serviço aumentados usando os limites da API de Consulta em comparação com o portal do Azure.

Neste tutorial, irá aprender a:

  • Integrar um bloco de anotações com seu espaço de trabalho do Log Analytics usando a biblioteca de cliente do Azure Monitor Query e a biblioteca de cliente do Azure Identity
  • Explore e visualize dados do seu espaço de trabalho do Log Analytics em um bloco de anotações
  • Ingerir dados do seu bloco de notas numa tabela personalizada na área de trabalho do Log Analytics (opcional)

Para obter um exemplo de como criar um pipeline de aprendizado de máquina para analisar dados nos Logs do Azure Monitor usando um bloco de anotações, consulte este bloco de anotações de exemplo: Detetar anomalias nos Logs do Azure Monitor usando técnicas de aprendizado de máquina.

Gorjeta

Para contornar limitações relacionadas à API, divida consultas maiores em várias consultas menores.

Pré-requisitos

Para este tutorial, você precisa:

  • Um espaço de trabalho do Azure Machine Learning com uma instância de computação de CPU com:

    • Um caderno.
    • Um kernel definido como Python 3.8 ou superior.
  • As seguintes funções e permissões:

    • Em Logs do Azure Monitor: a função de Colaborador do Logs Analytics para ler e enviar dados para seu espaço de trabalho do Logs Analytics. Para obter mais informações, consulte Gerenciar o acesso a espaços de trabalho do Log Analytics.

    • No Azure Machine Learning:

      • Uma função de Proprietário ou Colaborador no nível do grupo de recursos para criar um novo espaço de trabalho do Azure Machine Learning, se necessário.
      • Uma função de Colaborador no espaço de trabalho do Azure Machine Learning onde você executa seu bloco de anotações.

      Para obter mais informações, consulte Gerenciar o acesso a um espaço de trabalho do Azure Machine Learning.

Ferramentas e cadernos

Neste tutorial, você usa estas ferramentas:

Ferramenta Descrição
Biblioteca de cliente do Azure Monitor Query Permite executar consultas somente leitura em dados nos Logs do Azure Monitor.
Biblioteca de cliente do Azure Identity Permite que os clientes do SDK do Azure se autentiquem com o Microsoft Entra ID.
Biblioteca de cliente do Azure Monitor Ingestion 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 espaço de trabalho do Log Analytics (opcional)
Regra de coleta de dados, ponto de extremidade de coleta de dados e um aplicativo registrado Necessário para ingerir dados analisados em uma tabela personalizada no espaço de trabalho do Log Analytics (opcional)

Outras bibliotecas de consulta que você pode usar incluem:

  • A biblioteca Kqlmagic permite executar consultas KQL diretamente dentro de um bloco de anotações da mesma forma que executa consultas KQL a partir da ferramenta Log Analytics.
  • A biblioteca MSTICPY fornece consultas modeladas que invocam séries cronológicas KQL incorporadas e recursos de aprendizado de máquina, além de fornecer ferramentas avançadas de visualização e análises de dados no espaço de trabalho do Log Analytics.

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

1. Integre seu espaço de trabalho do Log Analytics ao seu bloco de anotações

Configure seu bloco de anotações para consultar seu espaço de trabalho do Log Analytics:

  1. Instale as bibliotecas de cliente Azure Monitor Query, Azure Identity e Azure Monitor Ingestion juntamente com a biblioteca de análise de dados Pandas, biblioteca de visualização 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. Defina a LOGS_WORKSPACE_ID variável abaixo como o ID do seu espaço de trabalho do Log Analytics. A variável está atualmente definida para usar o espaço de trabalho Demonstração do Azure Monitor, que você pode usar para demonstrar o bloco de anotações.

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

    Este código é configurado 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ó suporta 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 espaço de trabalho de demonstração. A disponibilidade e o acesso a este espaço de trabalho de demonstração estão sujeitos a alterações, por isso recomendamos usar seu próprio espaço de trabalho do Log Analytics.

  4. Defina uma função auxiliar, chamada query_logs_workspace, para executar uma determinada consulta no espaço de trabalho do Log Analytics e retornar os resultados como um 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. Explore e visualize dados do seu espaço de trabalho do Log Analytics no seu bloco de anotações

Vamos examinar alguns dados no espaço de trabalho executando uma consulta do bloco de anotações:

  1. Esta consulta verifica a quantidade de dados (em Megabytes) que você ingeriu em cada uma das tabelas (tipos de dados) no espaço de trabalho do Log Analytics a cada hora na semana passada:

    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 horária em cada uma das tabelas no espaço de trabalho do Log Analytics:

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

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

    O gráfico resultante tem esta aparência:

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

    Você consultou e visualizou com êxito os dados de log do seu espaço de trabalho do Log Analytics em seu bloco de anotações.

3. Analise os dados

Como um exemplo simples, vamos pegar 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 bloco de anotações de exemplo: Detetar anomalias nos Logs do Azure Monitor usando técnicas de aprendizado de máquina.

4. Ingerir dados analisados em uma tabela personalizada no espaço de trabalho do Log Analytics (opcional)

Envie os resultados da análise para uma tabela personalizada no espaço de trabalho 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 o Azure Monitor Logs com API de ingestão de logs (portal do Azure).

    Quando você cria 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 espaço de trabalho 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}")
    

    Nota

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

  4. Verifique se os dados agora aparecem na tabela personalizada.

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

Próximos passos

Saiba mais sobre como: