Graphiques de série temporelle dans QRadar Pulse

A première vue, la création d'un graphique de série temporelle à partir de données relationnelles dans QRadar® Pulse peut s'avérer difficile. La quantité de données renvoyées par une requête AQL peut être trop lourde, mais avec quelques connaissances et une planification bien organisée, vous parviendrez à produire des graphiques de série temporelle pertinents.

Remarque: Après avoir lu les graphiques de série temporelle, créez un graphique de séries temporelles dynamiques en suivant la procédure dans Suivi des cinq périphériques les plus actifs au cours des dix dernières minutes. Dans QRadar Pulse V2.1.4 ou ultérieure, le graphique de série temporelle comporte une option de série dynamique qui est utile lorsque vous ne savez pas quels périphériques vous souhaitez suivre ou que vous avez des difficultés à faire fonctionner les graphiques de série temporelle correctement. Cette fonction détecte automatiquement les séries et les affiche sous forme de lignes distinctes sur le graphique de série temporelle.
Le tri d'une métrique par starttime ne génère pas de série temporelle comme la requête AQL suivante, mais il est possible de réduire la quantité de données renvoyées afin de les utiliser et de les comprendre de manière plus aisée.
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
La quantité de données renvoyées peut générer un graphique dense qui ne fournit pas beaucoup d'informations. Les événements sont susceptibles de ne pas commencer à intervalles réguliers, ce qui peut créer des écarts dans les jeux de données.
Figure 1 : Résultats trop denses générés par un trop grand nombre de données
Graphique dense avec de grands volumes de données

Création d'intervalles dans une requête de série temporelle

La première étape consiste à décider du type d'intervalle à employer pour l'analyse de données. Voulez-vous examiner les données à une fréquence élevée, comme toutes les secondes ? Ou à une fréquence moindre, comme toutes les minutes ou toutes les heures ? Cette décision est essentielle car les points de données doivent être regroupés en intervalles pour permettre le calcul d'une métrique.

L'utilisation de la requête d'origine vous permet de regrouper les données à l'aide de l'une des techniques suivantes :
  • En utilisant la clause GROUP BY pour créer un intervalle : GROUP BY starttime/60000. Puisque starttime est affiché en millisecondes, si vous divisez par 60 000 (60 secondes x 1000 millisecondes), vous créez des groupes ou des intervalles de 60 secondes (1 minute).
  • En modifiant la clause ORDER BY de sorte qu'elle utilise l'agrégat sTime.
La requête est alors modifiée selon le code suivant :
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
Il est désormais plus facile d'utiliser les données visuellement et vous obtenez un point de données toutes les minutes. Maintenant que les intervalles sont correctement définis, vous pouvez utiliser quelques stratégies pour mettre en forme les données selon un format de série temporelle plus convivial.
Figure 2. Résultats de données plus conviviaux avec des intervalles correctement définis
Les données sont consommables mais doivent être affinées

Rotation des lignes en colonnes pour la création d'une série

Une méthode de création d'un graphique de séries temporelles implique de pivoter les lignes de données dans des colonnes qui représentent directement une série dans Légumineuses. Par exemple, si votre cas d'utilisation consiste à compter les événements d'un périphérique spécifique à des intervalles d'une minute, vous devez créer un agrégat conditionnel distinct pour chaque série que vous souhaitez tracer sur le graphique.
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
La requête entière est similaire à l'exemple suivant :
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
La requête prend les données de ligne pour les périphériques System Notification et SIM Audit et les fait pivoter en colonnes distinctes qui correspondent à une série sur le graphique:
Figure 3. Résultats renvoyés pour des colonnes distinctes
Résultats des lignes de données pivotantes dans les colonnes
L'image suivante représente la configuration de la vue et l'affichage du graphique pour la rotation des lignes.
Figure 4. Configuration de la vue et de l'affichage des lignes
Configuration de lignes de données en colonnes

Si cette méthode s'avère très efficace pour la transformation des données relationnelles en données de séries temporelles, vous devez également savoir à l'avance quelles données vous recherchez.

Création d'une série temporelle dynamique

Que faire si vous ne savez pas à l'avance quels périphériques examiner ou si vous souhaitez établir un graphique des cinq périphériques les plus actifs durant l'heure précédente ? Vous pouvez créer une série temporelle dynamique dans QRadar Pulse V2.1.4. Plutôt que de faire picoter les lignes de données en colonnes, la seconde stratégie utilise une clause GROUP BY secondaire (nommée "device" dans les exemples) pour créer une série temporelle dynamique.
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}
Les résultats renvoyés par la requête sont similaires à l'image suivante :
Figure 5. Résultats renvoyés pour le périphérique
Résultats des données pour les séries temporelles dynamiques

A la différence de la méthode précédente, les données ne font pas l'objet d'une rotation en colonnes et contiennent des répétitions créées par la clause GROUP BY secondaire. En utilisant l'option de série temporelle dynamique, QRadar Pulse divise les données dans un format de série temporelle approprié. Sélectionnez la colonne qui contient time (stime pour l'axe des X), la colonne qui contient data (total pour l'axe des Y) et la colonne qui contient la clause GROUP BY (pour extraire les différentes séries par device).

Figure 6. Fractionnement des données par périphérique
Fractionnement des données par périphérique dans une série temporelle dynamique

Même si le graphique ressemble à celui qui a été créé par la méthode précédente, la requête AQL sous-jacente est bien plus dynamique. Si les sources de journal changent au fil du temps, le graphique se met automatiquement à jour car les valeurs ne sont plus codées en dur dans la requête.

Gardez cependant à l'esprit les mises en garde suivantes. Puisque les lignes de données ne font pas l'objet d'une rotation en colonnes, la taille des données est bien plus importante et croît proportionnellement par rapport nombre de périphériques. QRadar Pulse traite les données, de sorte que la taille des données peut avoir un impact négatif sur la réactivité globale du navigateur. Pour éviter une dégradation des performances, QRadar Pulse affiche les 20 premières séries de données qu'il détecte et ignore les séries suivantes. Limitez la taille des données à l'aide de la clause WHERE pour limiter (LIMIT) et ordonner (ORDER) vos jeux de données afin de les utiliser dans une série temporelle dynamique. Par exemple, si le cas d'utilisation consiste à compter les trois périphériques les plus actifs sur les 10 minutes précédentes en excluant les métriques de santé (Health Metrics), créez la requête suivante :
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
La requête est plus efficace et garantit que la série rendue correspond aux trois périphériques les plus actifs de la période sélectionnée.