Centralisation des logs de votre cluster kubernetes k3s avec loki/grafana

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

architecture de loki

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 helm sans le tiller :

helm repo add loki https://grafana.github.io/loki/charts
help repo update
helm fetch --untar loki/loki-stack
cd loki-stack
cp values.yaml my-values.yaml
mkdir manifests
loki:
  enabled: true

promtail:
  enabled: true

fluent-bit:
  enabled: false

grafana:
  enabled: false
  sidecar:
    datasources:
      enabled: true
  image:
    tag: 6.4.1

prometheus:
  enabled: false

Quelle belle surprise de voir que toute la stack peut être déployé en une seule fois: loki, promtail, fluent-bit, grafana et prometheus.

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 containers 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.

helm template  -f my-values.yaml --output-dir ./manifests --namespace default --name loki .
kubectl apply --recursive -f ./manifests

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

architecture de loki

architecture de loki

Dans URL mettre : http://loki.default.svc.cluster.local:3100 et cliquer sur Save an test

architecture de loki

Utilisation de loki

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

architecture de loki

Il faut ensuite choisir dans log labels un des labels de vos déploiements : dans mon cas je vais prendre container-name : blog

Et hop toutes les logs sont là !!!

architecture de loki

Suivre les logs en direct

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

architecture de loki

Utilisation des filtres

En cliquant sur les filtres vous pouvez déja n’afficher que les erreurs.

architecture de loki

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

= 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 !


Alimenter un blog comme celui-ci est aussi passionnant que chronophage. En passant votre prochaine commande (n'importe quel autre article) au travers des liens produits ci-contre, je touche une petite commission sans que cela ne vous coûte plus cher. Cela ne me permet pas de gagner ma vie, mais de couvrir les frais inhérents au fonctionnement du site. Merci donc à vous!

comments powered by Disqus