Gráficos de série temporal no QRadar Pulse

À primeira vista, criar um gráfico de série temporal a partir de dados relacionais no QRadar® Pulse pode ser um desafio. A quantidade de dados que são retornados por uma consulta AQL pode ser pesada, mas com algum conhecimento prévio e planejamento cuidadoso, é possível produzir gráficos de séries temporais relevantes e significativos.

Nota: Depois de ler sobre gráficos de séries temporais, crie um gráfico de séries temporais dinâmicas, seguindo o procedimento em Como acompanhar os cinco dispositivos mais ativos nos últimos dez minutos. No QRadar Pulse V2.1.4 ou mais recente, o gráfico de séries temporais tem uma opção de série dinâmica que é útil quando você não sabe quais dispositivos deseja rastrear ou acha difícil fazer os gráficos de séries temporais funcionarem corretamente. Ele detecta séries automaticamente e as exibe como linhas separadas no gráfico de séries temporais.
A ordenação de uma métrica por starttime rende uma série temporal, como a consulta AQL a seguir, mas a quantidade de dados retornados pode ser pesada para trabalhar e entender.
select starttime as 'Start Time',
SUM(eventcount) as 'Event Count (Sum)'
from events
where eventcount <> NULL
GROUP BY starttime
order by starttime
LAST 60 minutes
A quantidade de dados retornados pode resultar em um gráfico confuso que não fornece muita informação. Os horários de início do evento podem não ocorrer em intervalos regulares, o que pode criar diferenças no conjunto de dados.
Figura 1. Excesso de resultados de dados em resultados confusos
Gráfico barulhento com grandes volumes de dados

Criando intervalos em uma consulta de série temporal

A primeira etapa é decidir o tipo de intervalo a ser usado para sua análise de dados. Deseja consultar dados de um intervalo limitado, como a cada segundo? Ou em intervalos maiores, como a cada minuto ou a cada hora? Esta decisão é importante porque os pontos de dados devem ser agrupados em intervalos para que uma métrica seja calculada.

Usando a consulta original, é possível agrupar os dados usando uma das técnicas a seguir:
  • Usando a cláusula GROUP BY para criar um intervalo: GROUP BY starttime/60000. Como starttime é exibido em milissegundos, se você dividir por 60.000 (60 segundos x 1000 milissegundos), você criará grupos ou intervalos de 60 segundos (1 minuto).
  • Mudando a cláusula ORDER BY para usar o sTime agregado.
A consulta muda para o código a seguir:
select starttime as 'sTime',
SUM(eventcount) as 'Event Count (Sum)'
from events
where eventcount > 0
GROUP BY starttime/60000
order by "sTime"
LAST 60 minutes
Agora, os dados são mais consumíveis visualmente e asseguram que um ponto de dados ocorra a cada minuto. Agora que os intervalos estão definidos corretamente, é possível usar algumas estratégias para formatar os dados em um formato de série temporal mais fácil.
Figura 2 Resultados de dados mais consumíveis com intervalos definidos corretamente
Os dados são consumíveis mas precisam de refinamento

Girando linhas em colunas para criar uma série

Um método para criação de um gráfico de séries temporais envolve pivotar as linhas de dados em colunas que representam diretamente uma série em Pulso. Por exemplo, se seu caso de uso é para contar eventos para um dispositivo específico para cada intervalo de 1 minuto, será necessário criar um agregado condicional separado para cada série que você deseja plotar no gráfico.
SUM(IF LOGSOURCETYPENAME(devicetype) = 'System Notification' THEN 1.0 ELSE 0.0) 
as system_notification
SUM(IF LOGSOURCETYPENAME(devicetype) = 'SIM Audit' THEN 1.0 ELSE 0.0) as sim_audit
A consulta completa é semelhante ao exemplo a seguir:
SELECT starttime/(1000*60) as 'minute',
(minute * (1000*60)) as 'stime',
SUM(IF LOGSOURCETYPENAME(devicetype) = 'System Notification' THEN 1.0 ELSE 0.0) 
as system_notification,
SUM(IF LOGSOURCETYPENAME(devicetype) = 'SIM Audit' THEN 1.0 ELSE 0.0) as sim_audit
FROM events
WHERE devicetype <> NULL
GROUP BY minute
ORDER BY stime asc
LAST 10 minutes
A consulta obtém os dados de linha para os dispositivos System Notification e SIM Audit e os gira em colunas separadas que correspondem a uma série no gráfico:
Figura 3. Resultados retornados para colunas separadas
Resultados para linhas de dados de pivotar em colunas
A imagem a seguir mostra a configuração de visualização e a exibição do gráfico para girar as linhas.
Figura 4. Configurando a visualização e a exibição do gráfico
Configurando linhas de dados em colunas

Embora esse método seja bastante eficiente para transformar dados relacionais em dados de séries temporais, você deve saber de antemão quais dados está procurando.

Criando uma série temporal dinâmica

E se você não sabe de antemão quais dispositivos está procurando ou se você deseja criar um gráfico dos cinco principais dispositivos mais ativos na última hora? É possível criar uma série temporal dinâmica no QRadar Pulse V2.1.4. Em vez de girar linhas de dados em colunas, a segunda estratégia usa uma cláusula GROUP BY secundária (chamada "dispositivo" nos exemplos) para criar uma série temporal dinâmica.
SELECT starttime/(1000*60) as 'minute', 
MIN(starttime) as 'stime', 
eventcount as 'eventCount', devicetype as 'deviceType',
LOGSOURCETYPENAME(devicetype) as 'device', 
count(*) as 'total'
FROM events
WHERE deviceType IN (
    SELECT deviceType FROM (
        SELECT devicetype as 'deviceType', 
        count(*) as 'total'
        FROM events
        GROUP BY deviceType
        ORDER BY total DESC
        LIMIT 8
        LAST {Time_Span}
    )
) and devicetype not in (18,105,147,368)
GROUP BY minute, device
ORDER BY minute asc
LAST {Time_Span}
Os resultados retornados para a consulta são semelhantes à imagem a seguir:
Figura 5. Resultados retornados para o dispositivo
Resultados de dados para séries temporais dinâmicas

A diferença a partir do método anterior é que os dados não são girados nas colunas e contêm repetições na coluna de tempo que são causadas pela cláusula GROUP BY secundária. Usando a opção de série temporal dinâmica, o QRadar Pulse divide os dados em um formato de série temporal adequado. Selecione a coluna que contém o time (stime para o eixo X), a coluna que contém o data (total para o eixo Y) e a coluna que contém a cláusula GROUP BY (para extrair a série diferente por device).

Figura 6. Dividindo os dados por dispositivo
Dividindo os dados por dispositivo em séries temporais dinâmicas

Embora o gráfico pareça o mesmo que aquele que foi criado pelo método anterior, a consulta AQL subjacente é muito mais dinâmica. Se as origens de log mudarem ao longo do tempo, o gráfico será atualizado automaticamente porque os valores não são mais codificados permanentemente na consulta.

No entanto, é preciso estar ciente de alguns alertas. Como as linhas de dados não giram em colunas, o tamanho dos dados é muito maior e aumenta proporcionalmente com o número de dispositivos. O QRadar Pulse processa os dados, portanto, o tamanho dos dados pode afetar negativamente a responsividade geral do navegador. Para evitar a degradação de desempenho, o QRadar Pulse renderiza as primeiras 20 séries de dados que ele detecta e ignora as séries subsequentes Limite o tamanho dos dados usando a cláusula WHERE para LIMIT e ORDER seus conjuntos de dados para uso em uma série temporal dinâmica. Por exemplo, se o caso de uso é "contar os três principais dispositivos mais ativos nos últimos 10 minutos, excluindo 'Métricas de Funcionamento'", crie a consulta a seguir:
SELECT starttime/(1000*60) as 'minute', (minute * (1000*60)) as 'stime', LOGSOURCETYPENAME(devicetype) as 'device', count(*) as 'total'
FROM events
WHERE device IN (
    SELECT deviceList FROM (
        SELECT LOGSOURCETYPENAME(devicetype) as deviceList, count(*) as topDevices
        FROM events
        WHERE deviceList <> 'Health Metrics'
        GROUP BY deviceList
        ORDER BY topDevices DESC
        LIMIT 3
        LAST 10 minutes
    )
)
GROUP BY minute, device
ORDER BY stime asc
LAST 10 minutes
A consulta é mais eficiente e assegura que as três séries renderizadas correspondam aos três principais dispositivos ativos no período de tempo selecionado.