La sélection des enregistrements dans une base Loki se fait via le LogQL qui peut être considéré comme une forme de “grep” étendu s'appliquant aussi sur les labels.
Une requête élémentaire se compose de 2 parties: le sélecteur (ou log stream selector) et l'expression de filtrage ( ou filter expression). Si les filtres sont optionnels, la requête LogQL doit obligatoirement contenir un sélecteur.
Le sélecteur détermine quels flux de journalisation doivent être considérés par la requête. Le sélecteur se compose d'une ou plusieurs paires clé-valeur, chaque clé est un label associé au log par le client lors de l'injection dans la base loki.
{job="netfilter"}
{host="localhost", job="netfilter"}
Il existe plusieurs opérateurs de correspondance (label matchin operator) entre le label et la valeur:
= | Doit correspondre exactement |
---|---|
!= | Doit être différent |
=~ | Doit correspondre à l'expression rationnelle |
!~ | Ne doit pas correspondre à l'expression rationnelle |
Ce sont les même règles syntaxiques que l'on retrouve avec PromQL pour la sélection de labels de Prometheus.
Les enregistrements sortant du sélecteur peuvent ensuite être filtrés par une expression. L'expression peut se composer d'éléments de texte constants ou d'expressions rationnelles (regex).
# Retourne les enregistrements contenant le mot BLOCK {job="netfilter"} |= "BLOCK" # Retourne les enregistrements contenant la chaine "DPT=443" # et ne contenant pas la chaîne "DST=192.168.101.7" {job="netfilter"} |= "DPT=443" !="DST=192.168.101.7"
Ci dessous les opérateurs de filtrage disponibles:
|= | L'enregistrement doit contenir la chaîne. |
---|---|
!= | L'enregistrement ne doit pas contenir la chaîne. |
|~ | L'enregistrement doit correspondre à la regex. |
!~ | L'enregistrement ne doit pas correspondre à la regex. |