Optimisation d’une base de données : Requêtes

Document created by RSA Information Design and Development on Apr 19, 2018
Version 1Show Document
  • View in full screen mode
 

Cette rubrique couvre la syntaxe de requête de la base de données. Il existe trois principaux mécanismes pour effectuer des requêtes dans la base de données : les appels de query , values et msearch dans le dossier /sdk pour chaque service Core.

L’appel de query renvoie des éléments méta depuis la base de métadonnées, éventuellement à l'aide de l'index pour une récupération rapide.

L’appel de values renvoie des groupes de métavaleurs uniques triés selon certains critères. Il est optimisé pour renvoyer un sous-ensemble des valeurs uniques triées selon une fonction d'agrégat, comme un nombre.

L’appel de msearch effectue la recherche sur le texte saisi et renvoie les sessions qui correspondent aux termes recherchés. Il peut rechercher dans les index, les méta, les paquets bruts ou les logs bruts.

query Syntaxe

Le message de query possède la syntaxe suivante :

 query-params = size-param, space, query-param, {space, start-meta-param}, {space, end-meta-param}; size-param = "size=", ? integer between 0 and 1,677,721 ? ; query-param = "query=", query-string ; start-meta-param = "id1=", metaid ; end-meta-param = "id2=", metaid ; metaid = ? any meta ID from the meta database ? ; 

Les paramètres id1 , id2 et size forment un mécanisme de pagination pour renvoyer un grand nombre de résultats à partir de la base de données. Leur utilisation est principalement utile pour les développeurs, qui écrivent des applications directement par rapport à la base de données NetWitness Core. Généralement, les résultats sont renvoyés dans l'ordre des données les plus anciennes aux plus récentes (les ID de métadonnées supérieurs sont toujours plus récents). Pour pouvoir renvoyer des résultats des plus récents aux plus anciens, inversez les ID de sorte que id1 soit supérieur à id2 . Les performances en sont légèrement pénalisées, car la clause where doit être entièrement évaluée avant que le traitement en ordre inversé puisse commencer.

Lorsque la taille est ignorée ou définie sur zéro, le système renvoie tous les résultats sans pagination. Dans l'interface RESTful, cela cause le renvoi de la réponse complète avec un codage par fragments. Le protocole natif renvoie les résultats sur plusieurs messages.

Le paramètre query est une chaîne de commande de paramètres query possédant sa propre syntaxe spécifique NetWitness :

 query-string = select-clause {, where-clause} {, group-by-clause {, order-by-clause } } ; select-clause = "select ", ( "*" | meta-or-aggregate {, meta-or-aggregate} ) ; where-clause = " where ", { where-criteria } ; meta-or-aggregate = meta | aggregate_func, "(", meta-key, ")" ; aggregate_func = "sum" | "count" | "min" | "max" | "avg" | "distinct" | "first" | "last" | "len" | "countdistinct" ; group-by-clause = " group by ", meta-key-list meta-key-list = meta-key {, meta-key-list} order-by-clause = " order by ", order-by-column order-by-column = meta-or-aggregate { "asc" | "desc" } {, order-by-column} 

La clause select vous permet de spécifier * pour renvoyer toutes les métadonnées de toutes les sessions correspondant à la clause where, ou un ensemble de noms de champ de métadonnées et de fonctions agrégées pour sélectionner un sous-ensemble de métadonnées avec chaque session.

La clause select peut contenir des noms de clé méta renommées. Les champs qui figurent dans l’ensemble de résultats comme résultat d’une clé renommée dans la clause select sont renvoyés avec le nom de clé méta correspondant au nom utilisé dans la clause select . Par exemple, si la clé port_src est utilisée pour renommer tcp.srcport , une requête contenant select port_src retourne seulement les champs port_src , même si les métadonnées sous-jacentes avaient le type tcp.srcport .

Les fonctions d'agrégat exercent l'effet suivant sur l'ensemble de résultats de la requête.

                                             
Fonction Résultat
sum Somme de toutes les valeurs de métadonnées ; ne fonctionne qu'avec les nombres
count Nombre total de champs de métadonnées qui auraient été renvoyés
min Valeur minimale affichée
max Valeur maximale affichée
avg Valeur moyenne pour le nombre
distinct Renvoie la liste de toutes les valeurs uniques affichées
countdistinct Renvoie le nombre de valeurs uniques affichées. countdistinct est équivalent au nombre de métadonnées qui auraient été renvoyées par la fonction distinct.
first Renvoie la première valeur affichée
last Renvoie la dernière valeur affichée
len Convertit toutes les valeurs de champ en longueur UInt32 plutôt que de retourner la valeur réelle. Cette longueur est le nombre d'octets permettant de stocker la valeur réelle, non la longueur de la structure stockée dans la métabase de données. Par exemple, le mot « NetWitness » renvoie une longueur de 10. Tous les champs IPv4, comme ip.src , renvoient 4 octets.

where Clauses

La clause where est une spécification de filtre qui vous permet de sélectionner des sessions dans la collection en utilisant l'index.

Syntaxe :

 where-criteria = criteria-or-group, { space, logical-op, space, criteria-or-group } ; criteria-or-group = criteria | group ; criteria = meta-key, ( unary-op | binary-op meta-value-ranges ) ; group = ["~"], "(" where-clause ")" ; logical-op = "&&" | "||" ; unary-op = "exists" | "!exists" ; binary-op = "=" | "!=" | "<" | ">" | ">=" | "<=" | "begins" | "contains" | "ends" | "regex" ; meta-value-ranges = meta-value-range, { ",", meta-value-range } ; meta-value-range = (meta-value | "l" ), [ "-", ( meta-value | "u" ) ] ; meta-value = number | quoted-value | ip-address | mac-address | relative-time ; quoted-value = ( '"' text '"' ) | ( '"' date-time '"' ) ; relative-time = "rtp(" , time-boundary , "," , positive-integer , time-unit, ")" ; time-boundary = "earliest" | "latest" ; positive-integer = ? any non-negative integral number ? time-unit = "s" | "m" | "h" ; 

Lorsque vous spécifiez des critères de règle, la partie meta-value de la clause doit correspondre au type de métadonnées spécifié par meta-key . Par exemple, si la clé est ip.src , la meta-value doit être une adresse IPv4.

Les requêtes utilisant un nom meta-key correspondront à des éléments méta correspondant aux noms meta-key ainsi qu’aux noms de n’importe quel « changement de nom » spécifié pour la clé. Reportez-vous à la section « Changement de nom de clé » dans la rubrique Personnalisation d’index pour plus d’informations sur la modification du nom des clés.

Opérateurs de requête

Le tableau suivant décrit la fonction de chaque opérateur.

                                                         
Opérateur Fonction
= Associez les sessions contenant exactement la valeur de métadonnées. Si la gamme de valeurs est spécifiée, toutes les valeurs sont considérées comme une correspondance.
!= Associe toutes les sessions qui ne correspondraient pas à la clause same comme si elles étaient écrites avec l'opérateur = .
< Pour les valeurs numériques, associe les sessions contenant des métadonnées dont la valeur numérique est inférieure au côté droit. Si le côté droit contient une gamme, sa première valeur est prise en compte. Si plusieurs gammes sont spécifiées, le comportement n'est pas défini. Pour les métadonnées texte, une comparaison lexicographique est effectuée.
<= Même comportement que < , mais les sessions contenant une méta exactement égale à la valeur sont également considérées comme des correspondances.
> Semblable à l'opérateur < , mais associe les sessions dans lesquelles la valeur numérique est supérieure au côté droit. Si le côté droit est une gamme, la dernière valeur de la gamme est prise en compte pour la comparaison.
>= Même comportement que > , mais les sessions contenant une méta exactement égale à la valeur sont également considérées comme des correspondances.
begins Associe des sessions qui contiennent une valeur de métadonnées texte qui commence par les mêmes caractères que le côté droit.
ends Associe des sessions qui contiennent une valeur de métadonnées texte qui se termine par les mêmes caractères que le côté droit.
contains Associe des sessions qui contiennent une valeur de métadonnées texte contenant la sous-chaîne indiquée sur le côté droit.
regex Associe des sessions qui contiennent une valeur de métadonnées texte correspondant au regex donné sur le côté droit. L'analyse syntaxique de regex est gérée par boost::regex.
exists Associe des sessions qui contiennent toutes les valeurs de métadonnées avec la clé méta donnée.
!exists Associe des sessions qui ne contiennent pas toutes les valeurs de métadonnées avec la clé méta donnée.
length Associe des sessions qui contiennent des valeurs de métadonnées texte d'une certaine longueur. L'expression sur le côté droit doit être un nombre non négatif.

Valeurs de texte

Le système attend des valeurs de texte entre guillemets. Sauf si elle peut être analysée en tant que durée (voir ci-dessous), une valeur entre guillemets est interprétée comme du texte.

Adresses IP

Les adresses IP peuvent être exprimées à l'aide de représentations de texte standard pour les adresses IPv4 et IPv6. De plus, la requête peut utiliser la notation CIDR pour exprimer une plage d'adresses. Si la notation CIDR est utilisée, elle est développée à la plage de valeur équivalente.

Adresses MAC

Une adresse MAC peut être spécifiée grâce à la notation d'adresse MAC standard : aa:bb:cc:dd:ee:ff

Expressions de date et d'heure

Dans NetWitness Suite, les dates sont représentées à l'aide de l'heure Epoch Unix, qui est le nombre de secondes depuis le 1er jan. 1970 UTC. Dans les requêtes, vous pouvez exprimer l'heure sous forme de ce nombre en secondes, ou vous pouvez utiliser la représentation de chaîne. La représentation de chaîne de la date et de l'heure est "YYYY-mmm-DD HH:MM:SS" . Une abréviation à trois lettres représente le mois. Vous pouvez également exprimer le mois sous forme de nombre à deux chiffres, de 01 à 12.

Les valeurs d’heure doivent être entre guillemets.

Toutes les heures spécifiées dans les requêtes doivent être en UTC.

Points de temps relatif

Les points de temps relatifs permettent à une clause where de référencer une valeur avec un décalage fixe, par rapport aux premières ou dernières métadonnées vues dans la collection.

Une expression de point de temps relatif a la syntaxe rtp(boundary, duration) .

La limite est earliest ou latest .

La durée est une expression d’heures, minutes ou secondes. Par exemple, 24h , 60m ou 60s .

Les points de temps relatif peuvent être utilisés uniquement dans les opérations de SDK qui comportent une collection qui fournit les limites pour les premières et dernières métadonnées de temps.

Les points de temps relatif fonctionnent uniquement sur les types de métadonnées indexées. Les types de métadonnées indexées par défaut sont time et event.time .

Exemples :

 Last 90m of collection time: time = rtp(latest, 90m) - u First 2 days of event time: event.time = l - rtp(earliest, 48h) 

Valeurs de gamme spéciales

Les gammes sont généralement exprimées avec la syntaxe * smallest * - * largest *, mais vous pouvez utiliser certaines valeurs spéciales d'espace réservé dans les expressions de gamme. Vous pouvez utiliser la lettre l pour représenter la limite inférieure de toutes les valeurs de métadonnées en tant que début de la gamme, et la lettre u pour représenter la limite supérieure. Les limites sont déterminées par l'observation de la métavaleur inférieure ou supérieure dans l'index, parmi toutes les métavaleurs qui ont déjà été saisies dans l'index.

Si vous utilisez la balise l ou u , elle ne doit pas être entre guillemets.

Par exemple, l'expression time = "2014-may-20 11:57:00" - u correspondrait à toutes les heures à partir de 2014-may-20 11:57:00 jusqu'à l'heure la plus récente trouvée dans la collection.

Notez qu'il est facile de confondre une expression de gamme avec une chaîne de texte. Vérifiez que toutes les valeurs de texte qui contiennent - sont entre guillemets et que les tirets dans des expressions de gamme ne sont pas entre guillemets.

Clause group by (à partir de 10.5)

L'API de requête peut générer des groupes agrégés à partir des résultats d'un appel de requête. Ceci s'effectue à l'aide d'une clause group by sur la requête. Lorsque group by est spécifié, l'ensemble de résultats pour la requête est sous-divisé en groupes. Chaque groupe de résultats est identifié de façon unique par les valeurs de métadonnées indiquées dans la clause group by.

Prenez par exemple la requête select count(ip.dst) . Cette requête renvoie le nombre de toutes les métadonnées ip.dst dans la base de données. Cependant, si vous ajoutez une clause group by , comme suit : select count(ip.dst) group by ip.src , la requête retourne le nombre de métadonnées ip.dst trouvées pour chaque ip.src unique.

À partir de NetWitness Suite version 10.5, vous pouvez utiliser jusqu'à 6 champs de métadonnées dans une clause group by .

La clause group by partage certaines des fonctionnalités de l'appel de values , mais offre des groupes beaucoup plus avancés, allongeant ainsi la durée des requêtes. La production des résultats d'une requête groupée implique la lecture de la métadonnée à partir de la base de métadonnées pour toutes les sessions qui correspondent à la clause where , tandis qu'un appel de valeurs peut produire ses agrégats en lisant uniquement l'index.

Le contenu de chaque groupe renvoyé par la requête est défini par la clause select . La clause select peut contenir l'une des fonctions agrégées ou des champs de métadonnées sélectionnés. Si plusieurs agrégats sont sélectionnés, le résultat de la fonction agrégée est défini pour chaque groupe. Si des champs non agrégés sont sélectionnés, les champs de métadonnées sont renvoyés par lots pour chaque groupe.

L'ensemble de résultats d'une requête group by est codé avec les règles suivantes :

  1. Tous les éléments méta associés à un groupe sont fournis avec le même numéro de groupe.
  2. Les premiers éléments méta renvoyés au groupe identifient la clé de groupe. Par exemple, si la clause group by spécifie group by ip.src , le premier élément méta de chaque groupe sera un ip.src .
  3. Les éléments méta normaux et non agrégés sont renvoyés après la group key , mais ils auront toujours tous le même numéro de groupe que les métadonnées clés de groupe.
  4. Les champs de métadonnées de résultat agrégé pour chaque groupe sont renvoyés ensuite.
  5. Tous les champs dans un groupe sont renvoyés ensemble. Différents résultats de groupe seront entrelacés.

S'il manque l'un des éléments méta group by dans l'une des sessions associées par la clause where , ce champ de métadonnées est traité comme NULL pour ce groupe. Lorsque les résultats de ce groupe sont renvoyés, les parties à valeur NULL de la clé de groupe seront omises des résultats du groupe, car la base de données ne possède pas de concept NULL.

La sémantique d'une requête group by diffère d'une base de données de type SQL par rapport aux champs de métadonnées renvoyés. Les bases de données SQL nécessitent que vous sélectionniez de façon explicite les colonnes group by dans la clause select si vous souhaitez qu'elles soient renvoyées dans l'ensemble de résultats. La base de données NetWitness Core renvoie toujours de façon implicite les colonnes de groupe en premier.

Une requête avec une clause group by est conforme au paramètre size d'ensemble de résultats, s'il est fourni. Cependant, en raison de la nature du regroupement, l'appelant doit faire des efforts supplémentaires pour mettre en page et reformer les groupes si un ensemble de résultats à taille fixe est requis. C'est pour cette raison que vous ne devez pas spécifier une taille de résultat explicite lorsque vous faites un appel de group by . Si vous ne spécifiez pas de taille explicite, l'ensemble des résultats sera livré sous forme de résultats partiels.

Le tableau suivant décrit les paramètres de configuration de conformité de base de données qui limiteront l'E/S ou l'impact sur la mémoire d'un groupe par requête.

             
Paramètre Fonction
/sdk/config/max.query.groups Il s'agit de la limite du nombre de groupes pouvant être conservés en mémoire pour calculer des agrégats. Ce paramètre vous permet de limiter l'utilisation de la mémoire globale de la requête.
/sdk/config/max.where.clause.sessions Il s'agit de la limite du nombre de sessions de la clause where pouvant être traitées dans une requête. Ce paramètre vous permet de définir une limite du nombre de sessions devant être lues à partir des métabases de données et des bases de données de session pour résoudre une requête.

Clause order by (à partir de 10.5)

Une clause order by peut être ajoutée à une requête qui contient une clause group by . La clause order by entraîne le renvoi de l'ensemble des résultats groupés dans l'ordre trié.

Une clause order by se compose d'un ensemble d'éléments à trier, dans l'ordre croissant ou décroissant. Le tri peut être effectué sur tout champ de données qui sera renvoyé dans un ensemble de résultats. Ceci inclut la métadonnée spécifiée par la clause select , les résultats de la fonction aggregate spécifiés par la clause select , ou les champs de métadonnées group by .

La clause order by peut faire le tri sur de nombreuses colonnes. Il n'existe pas de limite au nombre de colonnes order by autorisées dans la requête, mais il existe une limite pratique car chacune des colonnes order by peut se rapporter à un élément renvoyé par la clause select ou la clause group by . Le tri de colonne multiple est imposé de façon lexicographique, ce qui signifie que si deux groupes possèdent des valeurs égales pour la première colonne, ils sont ensuite triés selon la deuxième colonne. S'ils sont égaux dans la deuxième colonne, ils sont triés selon la troisième colonne, et ainsi de suite pour le nombre de colonnes order by fournies.

La base de données NetWitness Core est unique car les groupes de résultats renvoyés par une requête peuvent chacun avoir plusieurs valeurs pour une sélection. Par exemple, il est possible de sélectionner tous les éléments méta qui correspondent à un type de métadonnée et de les organiser en groupes, et il est possible d'utiliser la fonction distinct() pour renvoyer des groupes de métavaleurs distinctes. Si une clause order by fait référence à l'un des champs du groupe possédant plusieurs valeurs, l'ordre de tri est appliqué comme suit :

  1. Dans chaque groupe, les champs possédant plusieurs valeurs de correspondance sont organisés selon la clause de classement
  2. Tous les groupes sont triés par la comparaison de la première occurrence du champ ordonné trouvé dans chaque groupe

La clause order by n'est disponible que dans les requêtes qui possèdent une clause group by , car les groupes sont obligatoires pour organiser les champs de métadonnées en enregistrements distincts. Si vous souhaitez trier une requête arbitraire comme si aucun groupement n'était appliqué, utilisez le group by sessionid . Ceci permet de s'assurer que les résultats sont renvoyés en groupes de sessions ou événements distincts.

Les clauses group by sont naturellement renvoyées dans un ordre de clé de groupe croissant, mais une clause order by peut être utilisée pour renvoyer des groupes dans un ordre différent.

Si une colonne order by ne spécifie pas asc ni desc , l'ordre par défaut est croissant.

Exemples :

 select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) desc select countdistinct(ip.dst),sum(size) GROUP BY ip.src ORDER BY sum(size) desc, countdistinct(ip.dst) select sum(size) GROUP BY ip.src, ip.dst ORDER BY ip.dst desc select user.dst,time GROUP BY sessionid ORDER BY user.dst select * GROUP BY sessionid ORDER BY time 

Appel de values

L'index fournit une fonction de bas niveau values pour accéder aux valeurs de métadonnées uniques qui ont été stockées dans l'index. Cette fonction permet aux développeurs d'effectuer des opérations plus avancées sur des groupes de valeurs de métadonnées uniques.

Syntaxe du paramètre d’appel values  :

 values-params = field-name-param, space, where-param, space, size-param, {space, flags-param} {space, start-meta-param}, {space, end-meta-param}, {space, threshold-param}, {space, aggregate-func-param}, {space, aggregate-field-param}, {space, min-param}, {space, max-param} ; field-name-param = "fieldName=", meta-key ; where-param = "where=", where-clause ; size-param = "size=", ? integer between 1 and 1,677,721 ? ; start-meta-param = ? same as query message ? end-meta-param = ? same as query message ? flags-param = "flags=", {values-flag, {"," values-flag} } ; values-flag = "sessions" | "size" | "packets" | "sort-total" | "sort-value" | "order-ascending" | "order-descending" ; threshold-flag = "threshold=", ? non-negative integer ? ; aggregate-func-param = "aggregateFunction=", { aggregate-func-flag } ; aggregate-func-flag = "count" | "sum" ; aggregate-field-param = "aggregateFieldName=", meta-key ; min-param = "min=", meta-value ; max-param = "max=", meta-value ; 

L'appel de values fournit la fonction de renvoi d'un ensemble de valeurs de métadonnées uniques pour une clé méta donnée. Pour chaque valeur unique, l'appel de values peut fournir un nombre total agrégé. La fonction utilisée pour générer le total est contrôlée par le paramètre des balises.

Paramètres

Le tableau suivant décrit la fonction de chaque paramètre.

                                         
Paramètre Fonction
fieldName Il s'agit du nom de clé méta pour lequel vous récupérez des valeurs uniques. Par exemple, si fieldName est ip.src , cette fonction renvoie les valeurs IP source uniques dans la collection. Si le fieldName fait référence à une clé de références de changement de nom, le résultat est défini en tant que l’ensemble de valeurs de champ pour le nom de clé méta donnée ainsi que toutes méta clés des références à.
where Il s'agit d'une clause where qui filtre l'ensemble de sessions pour lesquelles les valeurs uniques sont renvoyées. Par exemple, si le fieldName est ip.src et la clause where est ip.src = 192.168.0.0/16 , uniquement dans la plage de valeurs 192.168.0.0 à 192.168.255.255 sont renvoyés. Pour plus d'informations sur la syntaxe de la clause where , voir Clauses Where .
size Taille de l'ensemble de valeurs uniques à renvoyer. Cette fonction est optimisée pour renvoyer un petit sous-ensemble de valeurs uniques possibles dans la base de données.
id1 , id2 Ces paramètres facultatifs limitent le périmètre de la recherche de valeurs uniques à une région spécifique de la base de métadonnées et de l'index. La définition des paramètres id1 et id2 sur une gamme limitée de la base de données méta est très importante pour exécuter des recherches sur de grandes collections.
flags Les balises contrôlent la façon dont les valeurs sont triées et additionnées. Les balises sont décrites dans la section Balises de valeurs suivante.
threshold La définition du paramètre threshold permet à l'appel de values d'ignorer la collection du total associé à chaque valeur une fois le seuil atteint. En fournissant un seuil, l'appelant peut réduire la quantité d'éléments d'index et de méta qui doivent être récupérés à partir de la base de données. Si le paramètre threshold est omis ou défini sur 0, cette optimisation n'est pas utilisée.
aggregateFunction Paramètre facultatif utilisé pour modifier le comportement par défaut des sessions de comptage, des paquets ou de la taille pour le comptage ou la somme du champ numérique défini par aggregateFieldName . Les deux paramètres doivent être spécifiés lorsque l'un des deux est défini. Passez sum ou count pour spécifier le comportement à suivre.
aggregateFieldName Le champ de métadonnées sur lequel exécuter le aggregateFunction . Les paramètres aggregateFunction et aggregateFieldName doivent être spécifiés lorsque la balise aggregate est définie. Un appel de values utilisant l'une des fonctions d'agrégat peut être beaucoup plus lent qu'un appel de values collectant des totaux de sessions, paquets ou taille. En effet, chaque session qui correspond à la clause where doit être récupérée à partir de la base de métadonnées. En raison de cette recherche, une grande partie de la requête est liée à l'E/S sur les volumes de la métabase de données. Le temps nécessaire à l'exécution d'un appel de values d'agrégat est linéairement proportionnel au nombre de sessions correspondant à la clause where .
min , max Valeurs minimale et maximale qui doivent être renvoyées à partir de l'appel. Ces paramètres permettent d'effectuer une itération (ou une mise en page) sur un nombre de valeurs extrêmement important, généralement plusieurs valeurs qui pourraient être renvoyées à partir d'un appel unique. Principalement utilisé en association avec les balises sort-value,sort-ascending de sorte que la valeur supérieure renvoyée serait utilisée dans un appel suivant en tant que valeur de paramètre min . Les valeurs sont exclusives. Si min="rsa" était spécifié et rsa était une valeur valide, rsa ne serait pas renvoyé, mais la prochaine valeur supérieure serait renvoyée.

Balises values

Le paramètre flags contrôle le fonctionnement de l'appel de valeurs. Il existe trois groupes de balises qui correspondent aux différents modes de fonctionnement, tel que l'indique le tableau ci-dessous.

                 
Balise Description
sessions , size , packets L'appel de values vous permet de spécifier l'une de ces balises pour déterminer la façon dont le total de chaque valeur est calculé. Si la balise est sessions , l'appel de values renvoie un nombre de sessions qui contiennent chaque valeur. Si la balise est size , l'appel de values établit le total de la taille de toutes les sessions qui contiennent chaque valeur unique, et établit un rapport de la taille totale de chaque valeur unique. Si la balise est packets , l'appel de valeur établit le total du nombre de paquets dans toutes les sessions qui contiennent chaque valeur unique, et établit un rapport de ce total pour chaque valeur unique.
sort-total , sort-value Les balises contrôlent la façon dont les résultats sont triés. Si la balise est sort-total , l'ensemble de résultats est trié dans l'ordre des totaux collectés. Si la balise est sort-value , les résultats sont renvoyés dans l'ordre de tri des valeurs.
order-ascending , order-descending Ces balises contrôlent l'ordre de tri de l'ensemble de résultats. Par exemple, en cas de tri par le total dans l'ordre décroissant, les valeurs possédant le total supérieur sont renvoyées en premier.

Exemple d’appel de values

L’appel de values est largement utilisé par la vue Navigation dans NetWitness Suite. La vue par défaut génère des appels ressemblant à celui-ci :

 /sdk/values id1=198564099173 id2=1542925695937 size=20 flags=sessions,sort-total,order-descending threshold=100000 fieldName=ip.src where="time=\"2014-May-20 13:12:00\"-\"2014-May-21 13:11:59\"" 

Dans cet exemple, la vue Navigation requiert des valeurs uniques pour ip.src . Elle requiert des valeurs uniques d' ip.src pour la période donnée. Elle demande le nombre de sessions qui correspondent à chaque ip.src . Les résultats sont les 20 valeurs ip.src supérieures lorsqu'elles sont triées par le nombre total de sessions dans l'ordre décroissant. De plus, la vue Navigation possède une gamme d'ID de métadonnées afin de fournir un conseil d'optimisation au moteur de requête.

Appel de msearch

L'index propose une fonction msearch de faible niveau afin de réaliser des recherches de texte par rapport à tous les types de méta. Ce type de recherche ne requiert pas que les utilisateurs définissent leurs requêtes en termes de types de données connus. En revanche, il recherche toutes les parties de la base de données à la recherche de résultats. msearch est utilisé par la recherche de texte de la vue Événements. Consultez la section « Résultats du filtrage et de la recherche dans la vue Événements » dans le Guide Investigation et Malware Analysis pour plus d'informations sur les formulaires et exemples de recherche acceptés.

Paramètres msearch  :

 msearch-params = search-param, {space, where-param}, {space, limit-param}, {space, flags-param}; search-param = "search=", ? free-form search string ? ;where-param = "where=", ? optional where clause ? ; limit-param = "limit=", ? optional session scan limit ? ;flags = "flags=", {msearch-flag, {"," msearch-flag} }; msearch-flag = "sp" | "sm" | "si" | "ci" | "regex" ; 

L'algorithme msearch fonctionne de la manière suivante :

  1. Un ensemble de sessions est identifié à partir de l'index en trouvant les croisements entre trois ensembles :
    • (Ensemble 1) Toutes les sessions de la base de données
    • (Ensemble 2) Sessions correspondant au paramètre de la clause where
    • (Ensemble 3) Sessions ayant indexé des valeurs qui correspondent au paramètre de la chaîne de recherche, si la balise si est spécifiée.
  2. Si la recherche indique le paramètre sm , tous les éléments méta de l'ensemble de sessions identifiées à l'étape 1 sont lus et analysés pour voir s’ils correspondent au paramètre de la chaîne de recherche. Les éléments méta sont lus à partir du service le plus proche du point où la recherche a été exécutée. Par exemple, si la recherche est réalisée sur un broker, les éléments méta peuvent être lus à partir du Concentrator le plus proche du broker, mais si la recherche est réalisée sur un Archiver, les éléments méta seront lus à partir de l'Archiver lui-même.
  3. Si la recherche spécifie le paramètre sp  , toutes les données brutes des paquets ou entrées de log provenant de l'ensemble de sessions identifié à l'étape 1 est lu et analysé pour vérifier s'il correspond au paramètre de la chaîne de recherche. Les paquets sont lus à partir du service le plus près du point où la recherche a été exécutée. Par exemple, si la recherche est réalisée sur un Concentrator, les données de paquets sont lues à partir du Decoder, mais si la recherche est réalisée sur un Archiver, les données de paquets sont lues à partir de l'Archiver lui-même.
  4. Les correspondances des étapes 2 et 3 sont renvoyées au fur et à mesure qu'elles sont trouvées, jusqu'à ce que le paramètre limit soit atteint. La limite spécifie le nombre maximum de sessions pour lesquelles les données de méta et de paquets sont analysées. Si aucune limite n'est spécifiée, l'intégralité de l'ensemble de sessions de l'étape 1 est analysée.

Balises msearch

                         
Balise Description
sp Analyse les données brutes des paquets
sm Analyse toutes les données méta
si Effectue des recherches d'index pour tous les paramètres de recherche avant d'analyser les méta
ci Effectue une recherche non sensible à la casse. Les résultats de la recherche conservent la casse.
regex Traite le paramètre de recherche en tant qu'expression régulière. Une seule expression régulière peut être spécifiée, mais l'expression régulière peut être arbitrairement complexe.

Mode de recherche d’index msearch

L'utilisation du mode de recherche d'index, spécifié grâce à la balise si , permet de renvoyer des résultats bien plus rapidement que les autres modes. La principale limite de ce mode est qu'il ne renvoie que des correspondances sur les termes du texte qui correspondent aux valeurs des méta dont la valeur est indexée.

  • Le paramètre si doit être combiné à la balise sm . Le paramètre si implique que la recherche ne peut correspondre qu'à des méta indexées.
  • Le paramètre si peut être utilisé avec des recherches regex, même si seules des valeurs de texte indexé sont renvoyées. Les adresses IP et les chiffres ne peuvent pas correspondre au regex.

Conseils msearch

  • Utilisez toujours une clause where pour spécifier la période pour la recherche.
  • Pour rechercher des plages d'adresses IP, spécifiez-les dans la clause where .
  • Utilisez le paramètre limit lorsque vous n'utilisez pas le mode de recherche d'index. Si ce n'est pas le cas, la quantité de données lues par les bases de données de méta et de paquets sera extrêmement vaste.

Procédures stockées

Les appels de query et de values fournissent plus de fonctionnalités de recherche à un niveau faible. Pour les exemples d'utilisation plus avancés, il existe des procédures stockées côté serveur.

Utilisation des guillemets dans la syntaxe de requête

L'analyseur de requête ne tient pas compte du fait que des guillemets simples ou doubles soient employés dans une instruction de requête. Une valeur à guillemets simples ou doubles est traitée en tant que métadonnée de texte.

L'analyseur de requête tente de comprendre ce que vous placez dans l'instruction. Il n'est pas très strict sur les éléments acceptés.

Par exemple :

reference.id=4752

Cette clause identifie les sessions qui possèdent une métavaleur reference.id qui a une valeur numeric de 4752.

reference.id='4752' ou reference.id="4752"

Cette clause identifie les sessions qui possèdent une métavaleur reference.id qui a une valeur numeric de 4752 .

Cependant, le moteur de requête compare implicitement les nombres et les chaînes qui ressemblent à des numéros comme étant égaux, lorsque les valeurs sont identiques sémantiquement. Il fonctionne donc avec les deux syntaxes.

Pour obtenir les meilleures performances, cependant, il est toujours conseillé de construire les requêtes de sorte que la syntaxe de requête corresponde aux types de données générés par l'analyseur.

Par exemple, si l'analyse crée reference.id en tant que type de données numérique (tel que uint32 ou uint64 ), utilisez la syntaxe numérique.

Si l'analyseur crée reference.id en tant que type de données de texte, utilisez la syntaxe de chaîne.

Previous Topic:RollOver
You are here
Table of Contents > Requêtes

Attachments

    Outcomes