{{tag>sysadmin monitoring loki grafana log todo}}
====== Loki et LogQL ======
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 =====
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.
===== Expression de filtrage =====
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. |
Les opérateurs **%%|~%%** et **%%!~%%** utilisent la [[https://github.com/google/re2/wiki/Syntax| syntaxe Go RE2]].
===== Références =====
* https://megamorf.gitlab.io/cheat-sheets/loki/