Measurement and Instrumentation
Building a Real-time Analytics Dashboard Using Azure Data Explorer
Table of Contents
Introdução
No ambiente de negócios atual, a capacidade de analisar dados à medida que chegam, não horas depois, pode significar a diferença entre aproveitar uma oportunidade e perdê-la completamente. Painéis de análise em tempo real fornecem equipes operacionais, executivos e analistas de dados com insights continuamente atualizados em métricas como saúde do sistema, comportamento do cliente, leituras de sensores de IoT e transações financeiras. Construir um painel assim requer uma infraestrutura que pode ingerir dados de alta velocidade, armazená-lo eficientemente e responder a consultas complexas em segundos.
O Azure Data Explorer (ADX) surge como uma solução líder projetada especificamente para essas demandas. Ele oferece pipelines de ingestão gerenciados, armazenamento colunar otimizado para séries temporais e dados de log, e o poderoso Kusto Query Language (KQL) para transformar eventos brutos em visualizações acionáveis. Este artigo fornece um guia prático e prático para construir um painel de análise em tempo real de produção usando o Azure Data Explorer e integrando-o com o Power BI para relatórios interativos. Você aprenderá como configurar um cluster ADX, transmitir dados de fontes como o Event Hubs, escrever consultas eficientes do KQL, conectar-se ao Power BI e otimizar todo o gasoduto para atualizações de baixa latência.
O que é o Azure Data Explorer?
O Azure Data Explorer é um serviço de análise de dados big que se destaca na análise interativa de grandes volumes de dados estruturados e semiestruturados. É construído para cenários como monitoramento de aplicações[, Telemetria de IoT, análise de log de segurança[, e inteligência de negócios[[]] onde os dados chegam continuamente e as consultas devem retornar resultados em segundos ou até milissegundos.
Principais características que fazem ADX ideal para painéis em tempo real incluem:
- Ingestão de fluxo: Ingerir dados de Azure Event Hubs, IoT Hub, Kafka, e outras fontes de streaming com latências tão baixas quanto poucos segundos.
- Armazenamento e indexação de colunas: Os dados são compactados e indexados usando índices invertidos e de árvores B, permitindo a digitalização e filtragem rápidas.
- Kusto Query Language (KQL): Uma linguagem somente para leitura, SQL-like com operadores incorporados para análise de séries temporais, funções estatísticas, junções e agregações.
- Integração de NAtive Power BI: O modo DirectQuery e o modo de importação permitem que os painéis refresquem automaticamente ou em tempo quase real.
- Auto-scaling e gerenciamento de custos: Os clusters podem escalar o cálculo e armazenamento de forma independente, e você pode definir uma política de cache para manter dados quentes na memória para consultas rápidas.
ADX é frequentemente comparado a armazéns de dados tradicionais como Azure Synapse ou Amazon Redshift, mas é otimizado para alta cardinalidade (por exemplo, milhões de dispositivos únicos) e só para as cargas de trabalho ] típicas de logs e séries temporais. Para uma compreensão mais profunda, consulte a documentação oficial do Azure Data Explorer[.
Configurando o Ambiente
Criar um cluster de exploração de dados Azure
Para começar, faça login no portal azul e crie um novo recurso do tipo "Azure Data Explorer Cluster". Escolha uma assinatura, grupo de recursos e região que se alinha com suas fontes de dados (de preferência a mesma região para minimizar a latência). Selecione um SKU de computação baseado na taxa de ingestão esperada e concurrância de consultas:
- Dev/Test: Dev(Standard D13 v2) ou Standard D14 v2 para pequenas cargas de trabalho.
- Produção: Standard L8s v2, Standard L16s v2, ou a mais recente família SKU com SSDs NVMe locais (por exemplo, Standard L8s v3) para alta taxa de rendimento.
- Alta concordância: Aglomerados com várias instâncias que podem escalar automaticamente com base na CPU ou carga de ingestão.
Depois de o cluster ser implantado, crie um banco de dados dentro dele. Use as políticas de retenção e cache padrão inicialmente. Para painéis em tempo real, você pode querer definir uma política de cache ] de vários dias (ou semanas) para que todos os dados recentes sejam servidos da memória. A política de retenção deve ser longa o suficiente para cobrir suas necessidades de relatórios (por exemplo, 30-90 dias).
Configurando Fontes de Ingestão de Dados
Os painéis em tempo real dependem de dados de streaming. ADX suporta várias abordagens de ingestão:
- Event Hubs: Mais comum para logs e telemetria. Crie um espaço de nomes Event Hubs e um hub, então configure uma conexão de dados em ADX que mapeia os eventos JSON ou Avro para um esquema de tabela.
- IoT Hub: Para dispositivos IoT, o IoT Hub fornece autenticação do dispositivo e encaminhamento de mensagens diretamente para ADX.
- Kafka: Use o conector ADX Kafka para trazer fluxos de Apache Kafka ou Confluente.
- Blob Storage/Data Lake:] Para a ingestão em lote ou quase em tempo real de arquivos Parquet/CSV armazenados em Azure Blob ou ADLS Gen2.
Ao configurar os Hubs de Evento, certifique-se de que a contagem de partições corresponda às suas necessidades de rendimento. ADX pode ingerir dados de várias partições simultaneamente. Para cada conexão de dados, você irá definir uma tabela e um mapeamento que transforma os campos JSON em colunas ADX. O mapeamento também pode lidar com conversões de tipos de dados (por exemplo, datas de época até à data).
Ingerindo Dados em Tempo Real
Criar Tabelas e Mapeamentos
Antes de ingerir, crie a tabela de destino no seu banco de dados ADX usando o KQL. Por exemplo, uma tabela para registros de erros de aplicativos pode parecer:
.create table AppLogs (Timestamp: datetime, Level: string, Service: string, Message: string, CorrelationId: string)
Em seguida, crie um mapeamento de ingestão para o formato que sua fonte de streaming usa. Para JSON a partir de Event Hubs, o comando é:
.create table AppLogs ingestion json mapping 'AppLogsJsonMapping' '[{"column":"Timestamp","datatype":"datetime","properties":{"path":"$.timestamp"}},{"column":"Level","datatype":"string","properties":{"path":"$.level"}},{"column":"Service","datatype":"string","properties":{"path":"$.service"}},{"column":"Message","datatype":"string","properties":{"path":"$.message"}},{"column":"CorrelationId","datatype":"string","properties":{"path":"$.correlationId"}}]'
Esses mapeamentos dizem ao ADX como extrair campos de cada evento.
Configurar a Ligação de Eventos
No portal Azure, navegue até o seu banco de dados ADX, selecione "Conexões de dados" e adicione uma conexão Event Hubs. Forneça o espaço de nomes do Event Hubs, nome do hub, grupo de consumidores (use um grupo de consumidores dedicado para ADX para evitar conflitos) e o nome da tabela. Especifique a referência de mapeamento que você criou. O ADX irá automaticamente começar a consumir eventos e torná-los disponíveis para consultas em segundos.
Para cenários de alta produtividade, considere usar ]difusão de ingestão (ativado no cluster) em vez de ingestão em lote. A ingestão de fluxo escreve dados diretamente nas extensões colunares sem estadiamento intermediário, fornecendo latências em menos de 10 segundos. Para a maioria dos painéis em tempo real, este é o modo preferido. A ingestão de lote (padrão) coleta dados por até alguns minutos antes de finalizar as extensões, o que pode introduzir 2-5 minutos de atraso.
Consultando com Kusto Consultar Linguagem (KQL)
O coração de qualquer painel ADX é as consultas do KQL que agregam e filtram dados em tempo real. Abaixo estão os padrões que você usará com frequência.
Filtragem e agregação básicas
Para contar os eventos de erro por serviço durante a última hora em caixas de um minuto:
AppLogs
| where Timestamp > ago(1h)
| where Level == "Error"
| summarize ErrorCount = count() by Service, bin(Timestamp, 1m)
| order by Timestamp asc
Isto devolve uma série temporal pronta para um gráfico de linhas.
Cálculos Percentil
Para as métricas de latência, você pode querer P50, P95 e P99:
ServiceLatency
| where Timestamp > ago(30m)
| summarize P50 = percentile(LatencyMs, 50), P95 = percentile(LatencyMs, 95), P99 = percentile(LatencyMs, 99) by Service
Juntando-se com Dados de Referência
Muitas vezes, os painéis precisam enriquecer eventos com dados de busca estática (por exemplo, locais de dispositivos). ADX suporta junções leves. Por exemplo, junte o fluxo de telemetria com uma tabela de dispositivos:
Telemetry
| where Timestamp > ago(15m)
| lookup Devices on DeviceId
| project Timestamp, DeviceId, Region, MetricValue
Para tabelas de referência grandes, considere materializá-las usando vistas materializadas ou armazená-las em um cluster separado com uma política de cache apropriada.
Funções da Série Temporal
ADX inclui operações poderosas de séries temporais como para detecção de anomalias, para sazonalidade e para análise de frequência. Exemplo: detectar anomalias nas contagens de erros HTTP:
AppLogs
| where Timestamp > ago(2h)
| make-series ErrorCount = count() on Timestamp step 1m
| extend anomalies = series_decompose(ErrorCount, -1, 2.0, 'ok')
| mv-expand Timestamp, ErrorCount, anomalies
| where anomalies[2] < 0 or anomalies[2] > 0
Tais consultas são avançadas, mas podem alimentar painéis de alerta diretamente.
Para uma referência completa, consulte a documentação da linguagem Kusto Query Language .
Construindo o Painel de energia BI
Ligando o poder BI ao ADX
O Azure Data Explorer integra-se com o Power BI através do conector Azure Data Explorer (Kusto). Para conectar:
- Abrir a área de trabalho do BI de energia, clique em "Get Data" > "Mais..."
- Procure por "Azure Data Explorer" e selecione o conector.
- Digite o seu URL de cluster (por exemplo, ]) e o nome do banco de dados.
- Escolha entre Importar (os dados são puxados para Power BI e atualizados periodicamente) ou DirectQuery[ (as consultas são enviadas para ADX em cada interação). Para painéis em tempo real, use DirectQuery. Isto garante que cada filtro, slicer e visual desencadeie uma consulta do KQL contra os dados mais recentes.
A gravar as Consultas KQL no Power BI
Na janela do conector, você pode digitar uma consulta do KQL diretamente. Mantenha as consultas focadas e garanta que eles retornam dados tabulares que o Power BI pode modelar. Por exemplo, para criar um conjunto de dados com contagens de erros por serviço por minuto na última hora:
AppLogs
| where Timestamp > ago(1h)
| summarize ErrorCount = count() by Service, bin(Timestamp, 1m)
Após carregar a consulta, use a modelagem do Power BI para definir medidas, hierarquias e relacionamentos se você tiver várias consultas. Evite carregar registros completos brutos – agregar o máximo possível no KQL.
Configurando Atualizações em Tempo Real
No modo DirectQuery, os visuais re-querem automaticamente ADX quando os usuários interagem com o relatório (por exemplo, alterando um cortador de datas). No entanto, para fazer o painel atualizar automaticamente sem interação com o usuário, você precisa definir o recurso de atualização de página automática no serviço Power BI:
- Publicar o relatório num espaço de trabalho App com capacidade Premium (ou PPU).
- Nas configurações do relatório, em "Reash agendado", defina o intervalo de atualização DirectQuery — para painéis em tempo real, use 1 ou 2 minutos.
- Em alternativa, use o recurso Auto-refresh (preview) que atualiza a página em um intervalo fixo (por exemplo, a cada 30 segundos).
Tenha em mente que cada atualização automática irá executar todas as consultas do KQL subjacentes aos visuais. Otimize suas consultas para retornar rapidamente (menos de 5 segundos) para evitar esperas do usuário e carga excessiva de cluster.
Melhores práticas de visualização
- Utilizar visualmente card para KPIs (por exemplo, erros totais nos últimos 5 minutos).
- Linha de gráficos para tendências da série temporal.
- Gráficos de barras para desagregações top-N (por exemplo, serviços de falha superior).
- Mapas geoespaciais se você tiver dados de localização.
- Gaúges para mostrar o progresso em direção aos limiares.
Dado que o DirectQuery envia consultas em todas as interacções, evite usar visuais personalizados que geram muitas consultas. Também, aplique filtros o mais cedo possível no KQL para reduzir o volume de dados.
Otimizando o desempenho para consultas em tempo real
Agregação e ajuste de índices
ADX cria automaticamente e mescla extensões (com os fragmentos de dados) ao longo do tempo. No entanto, você pode influenciar o desempenho por:
- Escolhendo uma política de agrupamento que equilibra o rendimento de ingestão elevado com a concorrência de consultas. Para painéis em tempo real com muitas consultas visuais, dimensione (acrescente instâncias) em vez de aumentar a escala.
- Definição apropriada política de cache] na base de dados ou tabelas. Por exemplo, para manter os últimos 7 dias em cache quente: ]
- Usando visualizações materializadas para resultados pré-agregados que atualizam incrementalmente. Uma visualização materializada pode calcular resumos horários ou diários, que servem painéis de alto nível instantaneamente.
Dicas de Otimização de Consulta
- Filtro inicial: Utilizar cláusulas na coluna de datapasta e dimensões de alta frequência para reduzir os dados digitalizados.
- Minimizar junções: Se possível, desnormalizar dados durante a ingestão para que os dados de referência já estejam incorporados em eventos.
- Evite em projetos: Lista explícita de colunas necessárias para reduzir largura de banda e memória.
- Use para grandes operações para distribuir agregação entre nós.
- Limite resultados: Use sempre , , ou em pesquisas de desenvolvimento. No Power BI, os visuais geralmente têm seus próprios filtros top-N, mas adicione-os no KQL também.
Monitoramento da Saúde do Agregado
O Azure Data Explorer fornece registros de diagnóstico e métricas embutidos através do Azure Monitor. métricas chave para assistir:
- Lentidade de ingestão: Tempo médio desde a criação de eventos até ser questionável.
- Exame latência: Tempos de execução P50 e P99.
- CPU e uso de memória: Se consistentemente alto, considere escalar.
- Taxa de ingestão: Certifique-se de que você não está se estrangulando; divida fluxos em mais partições, se necessário.
Configure alertas no Azure Monitor para quando as latências da consulta excederem um limiar (por exemplo, P99 > 10 segundos) para que você possa sintonizar proativamente.
Alerta e Automação em tempo real
Um painel em tempo real é mais poderoso quando emparelhado com respostas automatizadas. O Azure Data Explorer oferece vários pontos de integração:
Alertas de Monitor Azure da ADX
Você pode criar consultas agendadas no ADX que executam em um cronograma (por exemplo, a cada 5 minutos) e enviam resultados para o Monitor Azure. Em seguida, defina regras de alerta que disparam quando as condições são cumpridas (por exemplo, contagem de erro > 100 em uma janela de 5 minutos). Isto permite ações como:
- Enviando um e-mail ou SMS através de Grupos de Ação.
- Ativando o Azure Logic Apps para executar fluxos de trabalho (por exemplo, reiniciar um serviço, criar um ticket incidente).
- Chamando webhooks para notificar sistemas externos.
Azure Logic Apps e Microsoft Power Automatizar
Use o aplicativo lógico com o conector "Execute Kusto Query" para obter dados do ADX e então tomar medidas. Por exemplo, se uma consulta detectar um pico no uso da CPU em VMs, uma aplicação lógica pode ativar um executório de Automação Azure para ampliar o VMSS. Isto fecha o loop entre monitoramento e remediação.
Análise de fluxo e ADX como Sink
Para alertas de latência ainda mais baixos, transmita dados através do Azure Stream Analytics, que pode aplicar janelas temporais e empurrar eventos de alerta simultaneamente para ADX (para análise histórica) e para um assinante do Event Hubs para alerta imediato.
Casos de uso e exemplos do mundo real
- DevOps Painel de Observabilidade: Registros agregados, métricas e traços de microservices em clusters Kubernetes. ADX ingere de Fluentd/Logstash Azure Event Hubs, e o painel Power BI mostra taxas de solicitação, respostas de erro e latências de cauda.
- Monitoramento da Frota de IoT:] Ligue o Hub de IoT ao ADX para telemetria de veículos (localização, velocidade, estado da bateria). Um mapa em tempo real de imagens em Power BI actualiza à medida que os veículos se reportam.
- Detecção de Fraude Financeira: Transacções de fluxo através de Hubs de Evento em ADX. Os painéis mostram volumes de transação por região e pontuações de anomalia; alertas disparam blocklists quando os limiares são violados.
- Análise de fluxo de cliques: A atividade do usuário de sites é ingerida em ADX. O painel rastreia usuários ativos, visualizações de página por segundo e funil de conversão atualizados a cada minuto.
Conclusão
Construir um painel de análise em tempo real com o Azure Data Explorer e Power BI é uma abordagem robusta e escalável que satisfaz a crescente demanda por insights instantâneos. Ao alavancar a ingestão de streaming da ADX, os recursos poderosos da série de tempo da KQL e as conexões DirectQuery no Power BI, você pode criar painéis que atualizam a cada poucos segundos e lidam com terabytes de dados recebidos. A chave para o sucesso reside no planejamento cuidadoso de capacidade, design de consultas pensativas e monitoramento contínuo do desempenho.
Comece pequeno com um único fluxo de telemetria, itere em consultas e expanda gradualmente para mais fontes de dados. À medida que as necessidades da sua organização crescem, a elasticidade do ADX garante que o seu painel de instrumentos escale sem comprometer a velocidade. Para mais informações, explore o guia de ingestão de Hubs de eventos e o Power BI to Azure Data Explorer documentation.