Aller au contenu principal

Centralisation des logs kubernetes avec Loki

· 3 minutes de lecture
Stéphane ROBERT
Consultant DevOps

Après avoir parlé de stern qui permettait de centraliser les logs dans la console, je suis parti en recherche d’un outil permettant de centraliser ses logs dans une interface WEB. On connaît tous ELK, mais je suis à la recherche de quelques choses de plus léger et de moins gourmand en ressources. Et je suis tombé sur loki, un outil développé par Grafana Labs.

Découverte de la stack loki

On retrouve :

  • promtail : l’agent de collecte des logs qui les envoie ensuite sur l’instance loki
  • loki : le serveur de logs et de processing

Quand on regarde le fichier de conf de Promtail on remarque tout de suite que cela ressemble énormément à celui de Prometheus. En effet, on retrouve la notion de jobs de scraping.

Installation de Loki et Promtail sur notre cluster kubernetes k3s

Comme pour Grafana et Prometheus je vais utiliser les charts Helm officiels. Je vais l'installer dans le namespace de prometheus.

helm repo add grafana https://grafana.github.io/helm-charts
help repo update

Déploiement de Loki

helm upgrade --install loki grafana/loki-distributed

Déploiement de Promtail

En regardant le fichier de conf de promtail on voit tout de suite que tout est présent pour remonter les logs de tous les conteneurs de la stack. Il va chercher les logs des pods sur le node dans le répertoire /var/log/pods/. Pas besoin d’y toucher. On peut donc déployer directement sans toucher le template puisque par défaut juste loki et promtail seront déployés. Par contre, nous allons modifier l'adresse du serveur loki. Pour cela on récupère le fichier de valeurs

helm show values grafana/promtail >>promtail-values.yml
vi promtail-values.yml

Remplacer dans ma section config la valeur lokiAddress: http://loki-gateway/loki/api/v1/push par lokiAddress: http://loki.prometheus/loki/api/v1/push. loki.prometheus correspond au nom du service loki suivi du namespace dans lequel il est installé.

Sauvegardez et installer la release :

helm upgrade --install promtail grafana/promtail --set "loki.serviceName=loki" -f promtail-values.yml

Installation du datasource loki

Maintenant allez dans Grafana et ajouter le datasource loki

Dans Grafana allez dans configuration / datasources et ajouter en un nouveau de type loki

Dans URL mettre : http://loki.prometheus:3100 et cliquer sur [Save and Test]

Utilisation de loki

Il faut se rendre dans le menu explorer et choisir comme source loki :

Il y a un assistant pour saisir les labels. Cliquer sur logs browser et sélectionner ce qui vous intéresse.

Suivre les logs en direct

Dans la zone de refresh vous pouvez choisir live. Et vous voyez donc en direct les logs :)

Utilisation des filtres

En cliquant sur les filtres, vous pouvez déjà n’afficher que les erreurs.

Dans la zone filtre il est possible d’utiliser les opérateurs suivants :

= egal.
!= non egal.
=~ match sur le regex.
!~ ne match pas sur le regex.

Exemple :

{name=~"mysql.+"}
{name!~"mysql.+"}

On peut également entrer une expression de recherche avec les opérateurs suivants :

|= ligne contient string.
!= ligne ne contient pas string.
|~ ligne matche sur l’expression régulière.
!~ ligne ne matche pas sur l’expression régulière.

Exemple (comme dans la copie d’écran ci-dessus) :

{container_name="blog"} != "kube-probe"

Avec tout cela on peut rapidement retrouver les erreurs !