Syntaxe de recherche de logs

Aperçu

Une requête de filtre est composée de termes et d’opérateurs.

Il existe deux types de termes :

  • Un terme unique est un seul mot tel que test ou hello.

  • Une séquence est un groupe de mots entourés de guillemets, tels que "hello dolly".

Pour combiner plusieurs termes dans une requête complexe, vous pouvez utiliser l’un des opérateurs booléens suivants (sensibles à la casse) :

OpérateurDescriptionExemple
ANDIntersection : les deux termes sont dans les événements sélectionnés (si rien n’est ajouté, AND est pris par défaut)authentication AND failure
ORUnion : soit le terme est contenu dans les événements sélectionnésauthentication OR password
-Exclusion : le terme suivant n’est PAS dans l’événement (s’applique à chaque recherche de texte brut individuelle)authentication AND -password
La fonctionnalité de recherche en texte intégral est uniquement disponible dans la gestion des journaux et fonctionne dans les requêtes de moniteur, de tableau de bord et de carnet. La syntaxe de recherche en texte intégral ne peut pas être utilisée pour définir des filtres d'index, des filtres d'archive, des filtres de pipeline de journaux, des filtres de réhydratation, ou dans Live Tail.

Utilisez la syntaxe *:search_term pour effectuer une recherche en texte intégral sur tous les attributs de journaux, y compris le message du journal.

Exemple de terme unique

Syntaxe de rechercheType de rechercheDescription
*:helloTexte intégralRecherche tous les attributs de journal pour la chaîne exacte hello.
helloTexte libreRecherche uniquement les message, @title, @error.message et @error.stack attributs pour la chaîne exacte hello.

Exemple de terme de recherche avec un caractère générique

Syntaxe de rechercheType de rechercheDescription
*:helloTexte intégralRecherche dans tous les attributs de journal pour la chaîne exacte hello.
*:hello*Texte intégralRecherche dans tous les attributs de journal pour les chaînes commençant par hello. Par exemple, hello_world.

Exemple de plusieurs termes avec correspondance exacte

Syntaxe de rechercheType de rechercheDescription
*:"hello world"Texte intégralRecherche dans tous les attributs de journal pour la chaîne exacte hello world.
hello worldTexte libreRecherche uniquement dans le message du journal pour hello et world mots. Par exemple hello beautiful world.

Échapper les caractères spéciaux et les espaces

Les caractères suivants sont considérés comme spéciaux et nécessitent d’être échappés avec le caractère \ : = - ! && || > >= < <= ( ) { } [ ] " * ? : \ #, et les espaces.

  • / n’est pas considéré comme un caractère spécial et n’a pas besoin d’être échappé.
  • @ ne peut pas être utilisé dans les requêtes de recherche dans Logs Explorer car il est réservé pour Recherche d’attributs.

Vous ne pouvez pas rechercher des caractères spéciaux dans un message de journal. Vous pouvez rechercher des caractères spéciaux lorsqu’ils se trouvent à l’intérieur d’un attribut.

Pour rechercher des caractères spéciaux, extrayez-les dans un attribut à l’aide du parser Grok, puis effectuez une recherche sur les logs contenant cet attribut.

Pour rechercher sur un attribut spécifique, ajoutez @ pour spécifier que vous recherchez sur un attribut.

Par exemple, si le nom de votre attribut est url et que vous souhaitez filtrer sur la valeur url www.datadoghq.com, entrez :

@url:www.datadoghq.com

Attributs réservés

Attributs réservés tels que host, source, status, service, trace_id, et message ne nécessitent pas le préfixe @. Vous pouvez rechercher ces attributs directement :

service:web-app
status:error
host:i-1234567890abcdef0

Notes :

  1. Il n’est pas nécessaire de définir une facette pour rechercher des attributs et des balises.

  2. Les recherches d’attributs sont sensibles à la casse. Utilisez la recherche en texte intégral pour obtenir des résultats insensibles à la casse. Une autre option est d’utiliser le lowercase filtre avec votre analyseur Grok lors de l’analyse pour obtenir des résultats insensibles à la casse pendant la recherche.

  3. Rechercher une valeur d’attribut contenant des caractères spéciaux nécessite d’échapper ou d’utiliser des guillemets doubles.

    • Par exemple, pour un attribut my_attribute avec la valeur hello:world, recherchez en utilisant : @my_attribute:hello\:world ou @my_attribute:"hello:world".
    • Pour correspondre à un seul caractère spécial ou à un espace, utilisez le ? caractère générique. Par exemple, pour un attribut my_attribute avec la valeur hello world, recherchez en utilisant : @my_attribute:hello?world.

Exemples :

Requête de rechercheDescription
@http.url_details.path:"/api/v1/test"Recherche tous les journaux correspondant à /api/v1/test dans l’attribut http.url_details.path.
@http.url:/api\-v1/*Recherche tous les journaux contenant une valeur dans l’attribut http.url qui commence par /api-v1/
@http.status_code:[200 TO 299] @http.url_details.path:/api\-v1/*Recherche tous les journaux contenant une valeur http.status_code entre 200 et 299, et contenant une valeur dans l’attribut http.url_details.path qui commence par /api-v1/
-@http.status_code:*Recherche tous les journaux ne contenant pas l’attribut http.status_code

Recherche en utilisant la notation CIDR

Le routage inter-domaines sans classe (CIDR) est une notation qui permet aux utilisateurs de définir succinctement une plage d’adresses IP (également appelées blocs CIDR). Le CIDR est le plus souvent utilisé pour définir un réseau (tel qu’un VPC) ou un sous-réseau (tel qu’un sous-réseau public/privé au sein d’un VPC).

Les utilisateurs peuvent utiliser la fonction CIDR() pour interroger des attributs dans les journaux en utilisant la notation CIDR. La fonction CIDR() doit être passée dans un attribut de journal en tant que paramètre à filtrer, suivie d’un ou plusieurs blocs CIDR.

Exemples

  • CIDR(@network.client.ip,13.0.0.0/8) correspondent et filtrent les journaux qui ont des adresses IP dans le champ network.client.ip qui appartiennent au bloc CIDR 13.0.0.0/8.
  • CIDR(@network.ip.list,13.0.0.0/8, 15.0.0.0/8) correspondent et filtrent les journaux qui ont n’importe quelle adresse IP dans un attribut de tableau network.ip.list qui appartiennent aux blocs CIDR 13.0.0.0/8 ou 15.0.0.0/8.
  • source:pan.firewall evt.name:reject CIDR(@network.client.ip, 13.0.0.0/8) correspondrait et filtrerait les événements de rejet du pare-feu Palo Alto qui proviennent du sous-réseau 13.0.0.0/8.
  • source:vpc NOT(CIDR(@network.client.ip, 13.0.0.0/8)) CIDR(@network.destination.ip, 15.0.0.0/8) affichera tous les journaux VPC qui ne proviennent pas du sous-réseau 13.0.0.0/8 mais qui sont désignés pour le sous-réseau de destination 15.0.0.0/8, car vous souhaitez analyser le trafic réseau dans vos environnements entre les sous-réseaux.

La fonction CIDR() prend en charge à la fois les notations CIDR IPv4 et IPv6 et fonctionne dans Log Explorer, Live Tail, les widgets de journaux des tableaux de bord, les moniteurs de journaux et les configurations de journaux.

Caractères génériques

Vous pouvez utiliser des caractères génériques avec la recherche en texte libre. Cependant, cette recherche ne porte que sur les termes dans le message du journal, le texte dans la colonne content dans Log Explorer. Voir Recherche en texte intégral si vous souhaitez rechercher une valeur dans un attribut de journal.

Caractère générique à plusieurs caractères

Pour effectuer une recherche avec un caractère générique à plusieurs caractères dans le message du journal (la colonne content dans Log Explorer), utilisez le symbole * comme suit:

  • service:web* correspond à chaque message du journal qui a un service commençant par web.
  • web* correspond à tous les messages du journal commençant par web.
  • *web correspond à tous les messages du journal qui se terminent par web.

Remarque : Les caractères génériques ne fonctionnent comme tels qu’en dehors des guillemets doubles. Par exemple, "*test*" correspond à un message du journal qui a la chaîne *test* dans son message. *test* correspond à un message du journal qui a la chaîne test n’importe où dans son message.

Les recherches avec des caractères génériques fonctionnent au sein des balises et des attributs (facettés ou non) avec cette syntaxe. Cette requête renvoie tous les services qui se terminent par la chaîne mongo :

service:*mongo

Les recherches par caractères génériques peuvent également être utilisées pour rechercher dans le texte brut du journal qui ne fait pas partie d’un attribut de journal. Par exemple, cette requête renvoie tous les journaux dont le contenu (message) contient la chaîne NETWORK :

*NETWORK*

Cependant, ce terme de recherche ne renvoie pas les journaux qui contiennent la chaîne NETWORK si elle se trouve dans un attribut de journal et ne fait pas partie du message du journal.

Recherche par caractères génériques

Lors de la recherche d’une valeur d’attribut ou de balise contenant des caractères spéciaux ou nécessitant des échappements ou des guillemets doubles, utilisez le caractère générique ? pour faire correspondre un seul caractère spécial ou un espace. Par exemple, pour rechercher un attribut my_attribute avec la valeur hello world : @my_attribute:hello?world.

Valeurs numériques

Pour rechercher un attribut numérique, ajoutez-le d’abord en tant que facette 2. Vous pouvez ensuite utiliser des opérateurs numériques (<,>, <= ou >=) pour effectuer une recherche sur des facettes numériques. Par exemple, récupérez tous les journaux ayant un temps de réponse supérieur à 100 ms avec :

@http.response_time:>100

Vous pouvez rechercher un attribut numérique dans une plage spécifique. Par exemple, récupérez toutes vos erreurs 4xx avec :

@http.status_code:[400 TO 499]

Balises

Vos journaux héritent des balises des hôtes et des intégrations qui les génèrent. Elles peuvent également être utilisées dans la recherche et comme facettes :

  • test recherche la chaîne “test”.
  • env:(prod OR test) correspond à tous les journaux avec la balise env:prod ou la balise env:test
  • (env:prod AND -version:beta) correspond à tous les journaux qui contiennent la balise env:prod et qui ne contiennent pas la balise version:beta

Si vos balises ne respectent pas les meilleures pratiques en matière de balises et n’utilisent pas la syntaxe key:value, utilisez cette requête de recherche :

  • tags:<MY_TAG>

Tableaux

Dans l’exemple suivant, cliquer sur la valeur Peter dans la facette renvoie tous les journaux qui contiennent un attribut users.names, dont la valeur est soit Peter soit un tableau contenant Peter :

Tableau et Facettes

Remarque : La recherche peut également être utilisée sur des attributs de tableau non facettés en utilisant une syntaxe équivalente.

Dans l’exemple suivant, les journaux CloudWatch pour Windows contiennent un tableau d’objets JSON sous @Event.EventData.Data. Vous ne pouvez pas créer de facette sur un tableau d’objets JSON, mais vous pouvez rechercher en utilisant la syntaxe suivante.

  • @Event.EventData.Data.Name:ObjectServer correspond à tous les journaux avec la clé Name et la valeur ObjectServer.
Requête sans facette sur un tableau d'objets JSON

Pour rechercher un champ imbriqué dans un attribut de tableau, utilisez le préfixe @ avec le chemin complet de l’attribut. L’Explorateur de journaux correspond à tout élément dans le tableau :

  • @network.ip.attributes.ip:2a02\:1810* correspond à tous les journaux où au moins un élément dans le tableau network.ip.attributes a un champ ip commençant par 2a02:1810.

Pour correspondre aux journaux où un tableau contient plusieurs valeurs spécifiques, listez les valeurs entre parenthèses :

  • @user_perms:(4 6) correspond à tous les journaux où le tableau user_perms contient à la fois 4 et 6.

Pour correspondre aux journaux où un tableau contient n’importe quelle valeur dans une plage, utilisez une requête de plage :

  • @user_perms:[2 TO 6] correspond à tous les journaux où le tableau user_perms contient au moins une valeur entre 2 et 6.

Champs calculés

Les champs calculés fonctionnent comme des attributs de journal et peuvent être utilisés pour la recherche, l’agrégation, la visualisation et la définition d’autres champs calculés. Utilisez le préfixe # pour référencer les noms de champs calculés.

Un champ calculé nommé request_duration, utilisé pour filtrer les résultats dans l'Explorateur de journaux

Recherches enregistrées

Les vues enregistrées contiennent votre requête de recherche, les colonnes, l’horizon temporel et la facette.

Lectures complémentaires