Affinements de requêtes transactionnelles

Affinez les requêtes AQL transactionnelles à l'aide de l'expression EXPLICIT avec les expressions BEGIN et END. Utilisez également les expressions TIMEOUT et TIMEWINDOW pour spécifier des intervalles de temps.

Utilisez l'expression EXPLICIT avec les expressions BEGIN et END pour appliquer un filtrage plus précis à vos requêtes transactionnelles.

Par exemple, vous pouvez utiliser l'expression BEGIN avec l'expression EXPLICIT END pour capturer plusieurs tentatives de connexion infructueuses (BEGIN), suivies d'une connexion réussie (EXPLICIT END).

Utilisez les expressions TIMEOUT et TIMEWINDOW pour appliquer des filtres de temps aux sessions dans vos requêtes transactionnelles.

Expressions

Utilisez les expressions décrites dans la section suivante pour affiner votre requête AQL transactionnelle :

Tableau 1. Expressions de requête transactionnelle AQL
Expressions de requête Descriptif
BEGIN Une session est démarrée lorsque vous obtenez un événement où l'expression BEGIN est satisfaite ou que l'événement précédent met fin à la session.
EXPLICIT BEGIN Lance une nouvelle session uniquement si l'expression EXPLICIT BEGIN est vraie.
FIN Une session est arrêtée lorsque vous obtenez un événement où l'expression END est vraie ou que l'événement suivant démarre une nouvelle session.
EXPLICIT END Ferme la session en cours uniquement si l'expression EXPLICIT END est vraie.
TIMEOUT Ferme la session lorsque la période TIMEOUT spécifiée s'écoule à partir du moment où l'événement précédent s'est produit au moment où l'événement en cours s'est produit.
TIMEWINDOW Effectue le suivi de la session.

Ferme la session lorsque la période TIMEWINDOW spécifiée s'écoule à partir du moment où le premier événement s'est produit au moment où l'événement en cours s'est produit.

Syntaxe
SESSION BY 
<TimeExpression> <ExpressionList> 
[EXPLICIT] BEGIN <booleanExpression>  
[EXPLICIT] END <booleanExpression> 
TIMEOUT <IntegerLiteral millieseconds> 
TIMEWINDOW <IntegerLiteral SECONDS|MINUTES|HOURS|DAYS>

Les exemples suivants illustrent les exemples de résultats que vous obtenez en utilisant différentes combinaisons des expressions de requête disponibles:

Expressions BEGIN et END

Une expression BEGIN démarre une session lorsqu'un événement correspond à l'expression BEGIN ou que l'événement précédent termine la session.

Une expression END termine une session lorsque l'expression END est vraie pour un événement ou que l'événement suivant démarre une nouvelle session.

En utilisant l'expression EXPLICIT avec les expressions BEGIN et END, vous appliquez un filtre plus précis qui affine l'ensemble de résultats.

Voir les exemples de requêtes et de résultats suivants.

L'exemple de requête suivant utilise les expressions BEGIN et END.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR1 
where username = 'user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
END category=16003 
start '2016-12-10 16:00' stop '2016-12-10 23:30'
La catégorie d'événement 16001 indique un événement de connexion ou de déconnexion de l'utilisateur sur la console, et la catégorie d'événement 16003 indique qu'un utilisateur a lancé un processus, comme le démarrage d'une sauvegarde ou la génération d'un rapport.

Le tableau suivant présente les résultats de la requête utilisant BEGIN et END.

Tableau 2. Résultats de la requête BEGIN et END
sessionID start_Time nom d'utilisateur IP de la source catégorie
1 2016-12-10 16:00:06 user_x 10.2.2.10 16001
1 2016-12-10 16:00:06 user_x 10.2.2.10 16003
2 2016-12-10 16:00:06 user_x 10.2.2.10 16003
3 2016-12-10 16:00:10 user_x 10.2.2.10 16001
3 2016-12-10 16:00:10 user_x 10.2.2.10 16003
4 2016-12-10 16:00:11 user_x 10.2.2.10 16003
3 2016-12-10 16:00:11 user_x 10.2.2.10 16001
3 2016-12-10 16:00:11 user_x 10.2.2.10 16003
Remarque: Sessionid 2 se compose d'un seul événement qui le ferme (catégorie 16003). Une session ayant un événement est une exception et peut se produire.

Expressions EXPLICIT BEGIN et END

Les événements sont ignorés lorsqu'une session n'est pas démarrée et qu'un événement n'est pas un événement EXPLICIT BEGIN.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR2 
where username='user_x' 
SESSION BY starttime username, sourceip 
EXPLICIT BEGIN category=16001 
END category=16003 start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Le tableau suivant présente les résultats de la requête qui utilise EXPLICIT BEGIN et END.

Tableau 3. Résultats de la requête EXPLICIT BEGIN et END
sessionID start_Time nom d'utilisateur IP de la source catégorie
1 2016-12-10 16:00:06 user_x 10.2.2.10 16001
1 2016-12-10 16:00:06 user_x 10.2.2.10 16003
2 2016-12-10 16:00:07 user_x 10.2.2.10 16001
2 2016-12-10 16:00:07 user_x 10.2.2.10 16003
3 2016-12-10 16:00:11 user_x 10.2.2.10 16001
3 2016-12-10 16:00:11 user_x 10.2.2.10 16003
3 2016-12-10 16:00:11 user_x 10.2.2.10 16003
4 2016-12-10 16:00:14 user_x 10.2.2.10 16001
5 2016-12-10 16:00:15 user_x 10.2.2.10 16001
5 2016-12-10 16:00:15 user_x 10.2.2.10 16003

Seuls les événements répondant à l'expression EXPLICIT BEGIN sont renvoyés.

Sessionid 2 et Sessionid 4 dans EXPLICIT BEGIN et END ne répondent pas à l'expression EXPLICIT BEGIN.

BEGIN et EXPLICIT END

Fermez la session en cours uniquement si l'expression EXPLICIT END est vraie. Il n'y a plus de contrôle des événements BEGIN dans la session lorsque l'expression EXPLICIT END est vraie.

Plusieurs événements BEGIN dans une même session peuvent être associés à une expression EXPLICIT END. Par exemple, vous pouvez utiliser l'expression EXPLICIT END pour compter plusieurs tentatives de connexion ayant échoué, suivies d'une connexion réussie au cours d'un intervalle de temps spécifique (délai d'attente de session).

L'exemple de requête suivant utilise les expressions BEGIN et EXPLICIT END.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR3 
where username = 'user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
EXPLICIT END category=16003 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Le tableau suivant présente les résultats de la requête utilisant les expressions BEGIN et EXPLICIT END.

Tableau 4. Résultats de la requête BEGIN et EXPLICIT END
sessionID start_Time nom d'utilisateur IP de la source catégorie
1 2016-12-10 16:00:06 user_x 10.2.2.10 16001
1 2016-12-10 16:00:06 user_x 10.2.2.10 16003
2 2016-12-10 16:00:07 user_x 10.2.2.10 16003
2 2016-12-10 16:00:10 user_x 10.2.2.10 16001
2 2016-12-10 16:00:10 user_x 10.2.2.10 16003
3 2016-12-10 16:00:11 user_x 10.2.2.10 16001
3 2016-12-10 16:00:11 user_x 10.2.2.10 16003
4 2016-12-10 16:00:12 user_x 10.2.2.10 16003
4 2016-12-10 16:00:12 user_x 10.2.2.10 16001
4 2016-12-10 16:00:12 user_x 10.2.2.10 16003
5 2016-12-10 16:00:13 user_x 10.2.2.10 16001
4 2016-12-10 16:00:11 user_x 10.2.2.10 16003

EXPLICIT BEGIN et EXPLICIT END

Les événements sont ignorés lorsqu'une session n'est pas démarrée et qu'un événement n'est pas un événement EXPLICIT BEGIN.

Fermez la session en cours uniquement si l'expression EXPLICIT END est vraie. Il n'y a plus de contrôle des événements BEGIN dans la session lorsque l'expression EXPLICIT END est vraie.

L'exemple de requête suivant utilise les expressions EXPLICIT BEGIN et EXPLICIT END.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss') 
start_time, username, sourceip, 
category from events into TR4 
where username = 'user_x' 
SESSION BY starttime username, sourceip 
EXPLICIT BEGIN category=16001 
EXPLICIT END category=16003 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Le tableau suivant présente les résultats de la requête qui utilise les expressions EXPLICIT BEGIN et EXPLICIT END.

Tableau 5. Résultats de la requête EXPLICIT BEGIN et EXPLICIT END
sessionID start_Time nom d'utilisateur IP de la source catégorie
1 2016-12-10 16:00:06 user_x 10.2.2.10 16001
1 2016-12-10 16:00:06 user_x 10.2.2.10 16003
2 2016-12-10 16:00:10 user_x 10.2.2.10 16001
2 2016-12-10 16:00:10 user_x 10.2.2.10 16003
3 2016-12-10 16:00:11 user_x 10.2.2.10 16001
3 2016-12-10 16:00:12 user_x 10.2.2.10 16001
3 2016-12-10 16:00:12 user_x 10.2.2.10 16003
4 2016-12-10 16:00:13 user_x 10.2.2.10 16001
4 2016-12-10 16:00:14 user_x 10.2.2.10 16001
4 2016-12-10 16:00:14 user_x 10.2.2.10 16003
5 2016-12-10 16:00:15 user_x 10.2.2.10 16001
5 2016-12-10 16:00:15 user_x 10.2.2.10 16003

TIMEOUT

Ferme la session lorsque la période TIMEOUT spécifiée s'écoule à partir du moment où l'événement précédent s'est produit au moment où l'événement en cours s'est produit. L'événement en cours fait partie d'une nouvelle session. La valeur TIMEOUT est spécifiée en millisecondes.

L'exemple de requête suivant utilise l'expression TIMEOUT.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss.SSS') 
start_time, username, sourceip, 
category from events into TR5 
where username='user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
EXPLICIT END category=16003 
TIMEOUT 3600 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Le tableau suivant présente les résultats de la requête qui utilise l'expression TIMEOUT.

Tableau 6. Résultats de la requête TIMEOUT
sessionID start_Time nom d'utilisateur IP de la source catégorie
1 2016-12-10 16:00:06.716 user_x 10.2.2.10 16003
2 2016-12-10 16:00:10.328 user_x 10.2.2.10 16001

Sessionid 1 est arrêté et sessionid 2 est démarré, car le TIMEOUT de 3600 est dépassé.

TIMEWINDOW

Effectue le suivi de la session. Ferme la session lorsque la période TIMEWINDOW spécifiée s'écoule à partir du moment où le premier événement s'est produit au moment où l'événement en cours s'est produit. L'événement en cours fait partie d'une nouvelle session. La valeur TIMEWINDOW peut être spécifiée en secondes, minutes, heures ou jours.

L'exemple de requête suivant utilise l'expression TIMEWINDOW.

Select sessionId, 
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss.SSS') 
start_time, username, sourceip, 
category from events into TR6 
where username='user_x' 
SESSION BY starttime username, sourceip 
BEGIN category=16001 
EXPLICIT END category=16003 
TIMEWINDOW 3000 
start '2016-12-10 16:00' 
stop '2016-12-10 23:30'

Le tableau suivant présente les résultats de la requête qui utilise l'expression TIMEWINDOW.

Tableau 7. Résultats de la requête TIMEWINDOW
sessionID start_Time nom d'utilisateur IP de la source catégorie
1 2016-12-10 16:00:06.415 user_x 10.2.2.10 16001
1 2016-12-10 16:00:06.433 user_x 10.2.2.10 16003
2 2016-12-10 16:00:06.716 user_x 10.2.2.10 16003
3 2016-12-10 16:00:10.328 user_x 10.2.2.10 16001
3 2016-12-10 16:00:06.328 user_x 10.2.2.10 16003

Sessionid1 se trouve dans l'expression TIMEWINDOW, mais sessionid 2 est arrêté car le TIMEWINDOW de 3600 est dépassé.