Configuration de Loki

DockerBeginner
Pratiquer maintenant

Introduction

Bienvenue dans ce laboratoire pratique sur la configuration de Loki. Loki est un système d'agrégation de logs horizontalement scalable, hautement disponible et multi-tenant, inspiré par Prometheus. Il est conçu pour être très rentable et facile à opérer.

Dans ce laboratoire, nous nous concentrerons sur le flux de travail de base complet pour la collecte et la visualisation des logs. Nous utiliserons trois composants clés :

  • Loki : Le serveur principal responsable du stockage et du traitement des logs.
  • Promtail : Un agent qui découvre les fichiers journaux locaux et les envoie à une instance Loki.
  • Grafana : Une plateforme de visualisation où nous nous connecterons à Loki pour explorer et interroger nos logs.

L'environnement de ce laboratoire a déjà démarré les conteneurs Loki et Grafana pour vous. Votre tâche consiste à configurer et exécuter Promtail pour envoyer les logs système à Loki, puis à les visualiser dans Grafana.

Tirer l'Image Docker Promtail pour la Collecte de Logs

Dans cette étape, vous allez télécharger l'image Docker officielle pour Promtail. Promtail est l'agent responsable de la découverte des fichiers journaux et de l'envoi de leur contenu à Loki. Nous l'exécuterons en tant que conteneur Docker pour maintenir notre configuration propre et isolée.

Exécutez la commande suivante dans votre terminal pour télécharger l'image Promtail depuis Docker Hub.

docker pull grafana/promtail

Vous verrez une sortie indiquant la progression du téléchargement pour chaque couche de l'image. Une fois terminé, l'image sera disponible sur votre machine locale.

Using default tag: latest
latest: Pulling from grafana/promtail
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/promtail
docker.io/grafana/promtail

Maintenant que nous avons l'image, nous pouvons passer à la création d'un fichier de configuration pour celle-ci à l'étape suivante.

Créer promtail.yml pour Récupérer les Logs Système

Dans cette étape, vous allez créer un fichier de configuration pour Promtail. Ce fichier YAML indique à Promtail où se situe le serveur Loki et quels fichiers journaux il doit surveiller. Tout votre travail doit être effectué dans le répertoire ~/project.

Tout d'abord, créez un nouveau fichier nommé promtail.yml en utilisant l'éditeur nano.

nano promtail.yml

Maintenant, copiez et collez la configuration suivante dans l'éditeur nano.

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: varlogs
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log

Décortiquons cette configuration :

  • server : Configure le propre serveur web de Promtail, qui n'est pas utilisé dans ce laboratoire.
  • positions : Spécifie un fichier où Promtail enregistre la dernière position de lecture dans chaque fichier journal, afin de ne pas renvoyer d'anciens logs lors d'un redémarrage.
  • clients : Définit l'adresse de l'instance Loki. Nous utilisons http://loki:3100 car Promtail et Loki s'exécuteront sur le même réseau Docker, et loki est le nom du conteneur.
  • scrape_configs : C'est la section principale. Nous définissons un job nommé varlogs qui scrape (récupère) tous les fichiers se terminant par .log dans le répertoire /var/log/.

Après avoir collé le contenu, enregistrez le fichier et quittez nano en appuyant sur Ctrl+X, puis Y, et enfin Enter.

Exécuter le Conteneur Promtail Pointant vers Loki

Dans cette étape, vous allez démarrer le conteneur Promtail en utilisant le fichier de configuration que vous venez de créer. La commande montera à la fois votre fichier de configuration et le répertoire des logs de l'hôte dans le conteneur.

Exécutez la commande docker run suivante pour démarrer Promtail :

docker run -d --name promtail --network monitoring-net -v $(pwd)/promtail.yml:/etc/promtail/config.yml -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml

Voici une explication des options de la commande :

  • -d : Exécute le conteneur en mode détaché (en arrière-plan).
  • --name promtail : Attribue un nom au conteneur pour une référence facile.
  • --network monitoring-net : Connecte le conteneur au même réseau que Loki et Grafana.
  • -v $(pwd)/promtail.yml:/etc/promtail/config.yml : Monte votre promtail.yml local dans le conteneur à l'emplacement attendu.
  • -v /var/log:/var/log : Monte le répertoire /var/log de l'hôte dans le conteneur afin que Promtail puisse lire les fichiers journaux.
  • -config.file=/etc/promtail/config.yml : Indique au processus Promtail à l'intérieur du conteneur quel fichier de configuration utiliser.

Après avoir exécuté la commande, Docker affichera l'identifiant unique du nouveau conteneur. Vous pouvez vérifier que le conteneur est en cours d'exécution avec la commande docker ps.

docker ps

Vous devriez voir promtail, loki et grafana dans la liste des conteneurs en cours d'exécution.

CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            grafana/promtail        "/usr/bin/promtail -c…"   A few seconds ago   Up a few seconds   0.0.0.0:9080->9080/tcp                      promtail
...            grafana/grafana         "/run.sh"                About a minute ago  Up About a minute  0.0.0.0:8080->3000/tcp                      grafana
...            grafana/loki            "/usr/bin/loki -conf…"   About a minute ago  Up About a minute  0.0.0.0:3100->3100/tcp, 9095/tcp            loki

Ajouter Loki comme Source de Données dans Grafana

Dans cette étape, vous allez configurer Grafana pour utiliser Loki comme source de données. Cela vous permettra d'interroger et de visualiser les logs que Promtail envoie à Loki.

Veuillez suivre attentivement ces instructions :

  1. En raison des paramètres de proxy inverse de la VM LabEx, passez à l'interface de bureau (Desktop Interface), cliquez sur le navigateur Firefox dans le coin supérieur gauche, et entrez http://localhost:8080 dans la barre d'adresse. Vous devriez voir la page de connexion de Grafana.

  2. Connectez-vous à Grafana. Utilisez le nom d'utilisateur admin et le mot de passe admin. Il pourrait vous être demandé de changer le mot de passe ; vous pouvez ignorer cette étape pour le laboratoire.

  3. Dans le menu de gauche, cliquez sur l'icône Connections (qui ressemble à une prise ou un connecteur).

  4. Sur la page Connections, cliquez sur Data sources (Sources de données).

  5. Sur la page Data sources, cliquez sur le bouton Add new data source (Ajouter une nouvelle source de données).

  6. Dans la liste des types de sources de données disponibles, sélectionnez Loki.

  7. Dans la boîte de recherche, tapez Loki et cliquez sur l'option de source de données Loki qui apparaît.

  8. Vous serez redirigé vers la page de configuration de la source de données Loki. Dans le champ URL sous la section HTTP, entrez l'adresse suivante :

    http://loki:3100

    Nous utilisons loki comme nom d'hôte car les conteneurs Grafana et Loki sont sur le même réseau Docker (monitoring-net), et Docker assure la résolution DNS entre les conteneurs sur le même réseau.

  9. Faites défiler vers le bas et cliquez sur le bouton Save & test (Enregistrer et tester).

Add Loki as Data Source in Grafana

Si tout est configuré correctement, vous verrez une bannière verte avec le message "Data source is working" (La source de données fonctionne). Vous avez maintenant connecté avec succès Grafana à votre instance Loki.

Interroger les Journaux de Base dans la Vue Explore de Grafana

Dans cette dernière étape, vous utiliserez la vue "Explore" de Grafana pour exécuter une requête simple et visualiser les logs que Promtail expédie depuis votre environnement.

  1. Dans l'interface utilisateur de Grafana, naviguez vers la barre latérale gauche et cliquez sur l'icône de boussole (Explore).

  2. En haut à gauche de la page Explore, vous verrez un menu déroulant pour sélectionner la source de données. Si elle n'est pas déjà sélectionnée, choisissez Loki.

  3. Vous verrez un champ de saisie "Log browser" (Navigateur de logs). C'est ici que vous écrivez vos requêtes LogQL.

  4. Cliquez sur le bouton "Code" pour passer à l'éditeur de code.

  5. Entrez la requête suivante dans le champ de saisie :

    {job="varlogs"}

    Cette requête LogQL sélectionne tous les flux de logs qui possèdent le label job avec la valeur varlogs. Nous avons défini ce label dans notre fichier promtail.yml.

  6. Appuyez sur Shift+Enter ou cliquez sur le bouton bleu Run query (Exécuter la requête) sur le côté droit de l'écran.

Query Basic Logs in Grafana Explore View

Après avoir exécuté la requête, vous devriez voir des lignes de logs apparaître dans le panneau principal sous l'éditeur de requête. Vous verrez les logs provenant de divers fichiers dans /var/log. Cela confirme que Promtail collecte les logs avec succès et les envoie à Loki, et que Grafana est capable de les interroger.

Résumé

Félicitations ! Vous avez configuré avec succès un pipeline de journalisation (logging pipeline) de base utilisant Loki, Promtail et Grafana.

Dans ce laboratoire, vous avez appris à :

  • Tirer (Pull) et exécuter des conteneurs Docker pour des outils de traitement de logs comme Promtail.
  • Créer un fichier de configuration Promtail pour spécifier un serveur Loki et définir des tâches de collecte de logs (log scraping jobs).
  • Utiliser le réseau Docker pour connecter les services (Promtail, Loki et Grafana).
  • Ajouter Loki comme source de données dans l'interface utilisateur de Grafana.
  • Exécuter une requête LogQL de base dans la vue Explore de Grafana pour trouver et inspecter vos logs.

Cette configuration constitue la base d'un système d'agrégation de logs puissant, évolutif et rentable. À partir de là, vous pourriez explorer des requêtes LogQL plus avancées, l'analyse des logs (log parsing) et la configuration d'alertes dans Grafana basées sur le contenu des logs.