Dans Grafana, on va dans la boussole, “Explore”, puis tout en haut on sélectionne la datasource “Loki”. On peut sélectionner les labels qui nous intéressent (exemple : container=blog
, pour voir les logs du conteneur blog
).
Voici un lien pour voir les logs du blog de Picasoft sur la dernière heure.
Grafana/Loki permet de faire des requêtes bien plus complexes, en faisant de l’agrégation, un peu comme des opérateurs SQL (style max()
). Docs officielles
{container="mattermost-app"} |= `error`
{container="traefik", host="pica02"} | json status="OriginStatus", dockerService="ServiceName" | status = `401` | dockerService = `mattermost-app@docker`
LogCLI est un petit utilitaire fourni par l’équipe de développement de Loki afin d’interagir avec une infrastructure de logs sous Loki. Il permet d’exécuter des requêtes LogQL et automatise le processus de récupération (gestion de la récupération de l’ensemble des pages sur un intervalle de temps, parallélisation du téléchargement, filtre, …).
export LOKI_ADDR=https://loki.picasoft.net export LOKI_USERNAME=<identifiants dans le pass> export LOKI_PASSWORD=<identifiants dans le pass>
On peut tester la connexion avec :
logcli labels job
Lors de la construction des requêtes LogQL, on utilise des labels afin de filtrer les logs disponibles.
On peut voir les labels présents avec :
logcli labels
On peut voir l’ensemble des valeurs disponibles pour un label donné avec :
logcli labels <label>
Avec traefik par exemple :
logcli query --limit 0 --from 2023-11-04T00:00:00Z --to 2023-11-05T00:00:00Z '{container='traefik'}'
On peut spécialiser la requête pour télécharger les logs d’une machine spécifiquement :
logcli query --limit 0 --from 2023-11-04T00:00:00Z --to 2023-11-05T00:00:00Z '{container="traefik",host="media"}'
On peut demander de télécharger les lignes seules raw
ou dans un format json jsonl
avec le flag -o <raw|jsonl>
, au lieu du format par défaut.
On peut gérer les options de parallélisation avec les flags --parallel-duration=<duration>
et --parallel-max-workers=n
pour gérer respectivement la taille des intervalles demandés et le nombre de worker téléchargeant les différents intervalles. Par exemple --parallel-duration=1h --parallel-max-workers=4
.
On peut paramétrer la gestion des erreurs lors du téléchargement avec les flags --retries=n
(nombre d’essais en cas d’erreur avant d’échouer) --min-backoff=s
(nombre minimum de secondes à attendre avant de ressayer en cas d’erreur) et --max-backoff=s
(nombre maximum de secondes à attendre avant de ressayer en cas d’erreur). En cas d’erreur l’outil va attendre un nombre aléatoire de secondes et ressayer le téléchargement, exemple --retries 10 --min-backoff=25 --max-backoff=180
.
Au lieu de télécharger les logs sur un intervalle donné, on peut les visionner en direct avec :
logcli query --follow '{unit="ssh.service"}'