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:
- Integrar um notebook ao workspace do Log Analytics usando a biblioteca de clientes de Consulta do Azure Monitor e a biblioteca de clientes da Identidade do Azure
- Explorar e visualizar dados do workspace do Log Analytics em um notebook
- Ingerir dados do notebook em uma tabela personalizada no workspace 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 notebook, consulte este notebook de exemplo : Detectar anomalias nos Logs do Azure Monitor usando técnicas de aprendizado de máquina.
Dica
Para contornar as limitações relacionadas à API, divida consultas maiores em várias consultas menores.
Pré-requisitos
Para este tutorial, é necessário:
Um workspace do Azure Machine Learning com uma instância de computação da CPUcom:
- Um notebook.
- Um kernel definido como Python 3.8 ou superior.
As seguintes funções e permissões:
Nos Logs do Azure Monitor: a função colaborador do Logs Analytics para ler dados e enviar dados para o workspace do Logs Analytics. Para obter mais informações, consulte Gerenciar o acesso a workspaces 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 Workspace do Azure Machine Learning, se necessário.
- Uma função de Colaborador no Workspace do Azure Machine Learning onde você executará seus notebooks do Azure Sentinel.
Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.
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:
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
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"
Configure
LogsQueryClient
para autenticar e consultar logs do Azure Monitor.Esse código configura
LogsQueryClient
para autenticar usandoDefaultAzureCredential
: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.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:
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:
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:
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.
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:
Carregue este arquivo de exemplo para definir o esquema da tabela:
[ { "TimeGenerated": "2023-03-19T19:56:43.7447391Z", "ActualUsage": 40.1, "DataType": "AzureDiagnostics" } ]
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
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.
Verifique se os dados agora aparecem em sua tabela personalizada.
Próximas etapas
Saiba mais sobre como: