Découvrons les principes fondamentaux de Grafana Loki, un système d’agrégation de logs multi-tenant.

Dans un environnement de production, les temps d’arrêt sont inacceptables. Ils peuvent entraîner une perte massive de revenus et de réputation. Mais si vous disposez d’un système de journalisation et de surveillance approprié, vous saurez comment déboguer de tels scénarios, qui conduisent à des temps d’arrêt.

Cela permet de réduire les coûts et d’identifier les problèmes qui pourraient survenir à l’avenir.

De nos jours, les organisations de toutes tailles utilisent les principes et les outils DevOps. Les conteneurs et Kubernetes sont les plus populaires. Et la surveillance d’un tel système se fait très efficacement avec Prometheus. Mais là où Prometheus est à la traîne, c’est au niveau de la journalisation. Il ne fournit pas de système de journalisation centralisé, et c’est là que Loki entre en scène.

Qu’est-ce que Grafana Loki ?

GrafanaLoki est un système d’agrégation de logs multi-tenant lancé par Grafana en 2018 et publié sous la licence Apache 2.0. Ce système a été développé en s’inspirant de Prometheus. Il est principalement utilisé avec des fournisseurs de cloud et avec des outils comme Prometheus et Grafana.

Loki est similaire à la pile ELK/EFK, mais il est plus facile à mettre en place et à exploiter avec de meilleures fonctionnalités. Loki n’indexe pas le contenu du journal, mais plutôt les horodatages et un ensemble d’étiquettes pour un flux de journaux. Il réduit la taille de l’index, ce qui simplifie les opérations et réduit les coûts.

Avantages de Loki

Vous trouverez ci-dessous les avantages de l’utilisation de Loki dans votre pile de données :

  • En indexant uniquement les métadonnées, Loki est très rentable. L’exécution d’index pour le traitement en texte intégral nécessite des instances de RAM plus importantes qui sont très coûteuses. Le stockage des journaux sur des objets stockés comme S3 est également très économique.
  • Il prend en charge le multi-tenant en utilisant le tenantID, de sorte que les locataires ont leurs données stockées séparément.
  • Vous pouvez exécuter Loki localement pour des opérations à petite échelle ou le faire évoluer horizontalement pour des opérations à grande échelle.
  • Il utilise le style dynamique pour assurer la cohérence du quorum pour les opérations de lecture et d’écriture.
  • Il est configuré par défaut pour avoir 3 répliques de journaux afin de répondre au risque de crash de processus et de sorties abruptes où les journaux sont perdus. Oui, cela entraînerait des dépenses supplémentaires, mais pas trop élevées, l’intégrité des données étant plus importante.
  • Facile à connecter avec des outils populaires comme Kubernetes, Prometheus, et la visualisation dans Grafana.

Architecture de Loki

loki architecture - geekflare

L’architecture de Loki est composée de trois éléments – Promtail, Loki et Grafana.

Promtail est un agent qui doit être installé sur chaque nœud exécutant vos applications ou services. La principale responsabilité de Promtail est de découvrir la cible, d’attacher les étiquettes aux flux de logs provenant des pods et de pousser ces logs vers les instances Loki. L’agent Promtail extrait les journaux du système de fichiers local et les envoie au serveur central de Loki. Après cela, vous pouvez interroger vos journaux à l’aide de Grafana.

Cas d’utilisation de Loki

Vous trouverez ci-dessous les cas d’utilisation les plus courants d’un système de journalisation tel que Loki.

  • Intelligence économique : Il s’agit d’un cas d’utilisation toujours d’actualité, la création d’un aperçu exploitable à partir des données de journalisation peut toujours être très utile. Loki peut vous aider à comprendre les données de log et vous rendre capable de créer de nouvelles stratégies pour la croissance de votre entreprise. Par exemple, les données de log d’une organisation peuvent vous aider à connaître les taux de conversion d’un canal publicitaire.
  • Surveillance : Prometheus est très utilisé dans l’industrie pour la surveillance. Mais vous pouvez identifier beaucoup de choses en surveillant vos journaux avec des outils comme Loki. Il peut vous aider à surveiller les taux d’erreur sur votre site web en parcourant les journaux et en envoyant des alertes dès que le seuil est franchi.
  • Débogage et dépannage : Loki peut aider l’équipe DevOps à obtenir des réponses rapides telles que le moment où l’application s’est arrêtée, la raison de son arrêt, son dernier état avant l’arrêt, etc.
  • Cybersécurité: Au cours des dernières années, les cyber-attaques sur les portails de commerce électronique ont augmenté de façon exponentielle. Avec l’aide de Loki, vous pouvez vérifier les journaux afin d’identifier toute menace, tout problème ou toute activité malveillante survenant dans le système de votre organisation. Si le piratage a réussi, Loki peut toujours être utile à l’équipe d’experts pour comprendre en détail ce qui s’est passé dans le système. Il les aidera à remonter jusqu’aux pirates.
  • Conformité : Pour se conformer aux réglementations sectorielles, les organisations doivent conserver leurs journaux d’audit pendant une période pouvant aller jusqu’à 7 ans. Les autorités locales peuvent auditer les journaux à tout moment. Loki peut stocker vos journaux d’audit en toute sécurité.

Installation de Loki et Promtail

Découvrons rapidement comment installer et visualiser les logs sur Grafana. Dans cette démonstration, j’utiliserai la configuration générique qui récupérera les logs depuis /var/log/*log

Allez sur la page des versions de Loki, faites défiler vers le bas jusqu’à Assets, ici vous trouverez plusieurs paquets Loki et Promtail. Téléchargez le paquet Loki correspondant au système que vous utilisez. Ne téléchargez pas les paquets Loki cli ou canary. Je télécharge loki-linux-amd64.zip et promtail-linux-amd64.zip pour mon système Ubuntu.

Une fois le téléchargement terminé, extrayez les fichiers de Loki et Promtail, et placez-les dans un seul répertoire.

geekflare@geekflare:~$ mkdir loki
geekflare@geekflare:~$ mv loki-linux-amd64 promtail-linux-amd64 loki
geekflare@geekflare:~$ cd loki/
geekflare@geekflare:~/loki$ ls
loki-linux-amd64 promtail-linux-amd64

Maintenant, téléchargez le fichier de configuration générique de Loki et Promtail.

geekflare@geekflare:~/loki$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
--2021-04-30 12:00:51-- https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
Résolution de raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...
Connexion à raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connecté.
Requête HTTP envoyée, en attente de réponse... 200 OK
Longueur : 1832 (1.8K) [text/plain]
Sauvegarde dans : 'loki-local-config.yaml'

loki-local-config.yaml 100%[===============================================================================================>] 1.79K --.-KB/s en 0s

2021-04-30 12:00:51 (16.6 MB/s) - 'loki-local-config.yaml' sauvegardé [1832/1832]
geekflare@geekflare:~/loki$ wget https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
--2021-04-30 12:05:07-- https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
Résolution de github.com (github.com)... 13.234.210.38
Connexion à github.com (github.com)|13.234.210.38|:443... connecté.
Requête HTTP envoyée, réponse attendue... 200 OK
Longueur : non spécifiée [text/html]
Sauvegarde dans : 'promtail-local-config.yaml'

promtail-local-config.yaml [ <=> ] 109.16K --.-KB/s en 0.002s  

2021-04-30 12:05:08 (66.8 MB/s) - 'promtail-local-config.yaml' sauvegardé [111779]
geekflare@geekflare:~/loki$ ls
loki-linux-amd64 loki-local-config.yaml promtail-linux-amd64 promtail-local-config.yaml

Pour démarrer Loki, exécutez la commande ci-dessous avec le fichier de configuration de Loki. Cela démarrera Loki et affichera les journaux de Loki dans le terminal.

geekflare@geekflare:~/loki$ ./loki-linux-amd64 -config.file=loki-local-config.yaml
level=info ts=2021-04-30T16:08:37.990311491Z caller=main.go:130 msg="Starting Loki" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:08:37.990856871Z caller=server.go:229 http=[: :]:3100 grpc=[: :]:9096 msg="server listening on addresses"
level=info ts=2021-04-30T16:08:37.991613443Z caller=shipper_index_client.go:100 msg="starting boltdb shipper in 0 mode"
level=info ts=2021-04-30T16:08:37.992568288Z caller=mapper.go:38 msg="cleaning up mapped rules directory" path=/tmp/loki/rules-temp
level=error ts=2021-04-30T16:08:37.992623632Z caller=mapper.go:42 msg="unable to read rules directory" path=/tmp/loki/rules-temp err="open /tmp/loki/rules-temp : no such file or directory"
level=info ts=2021-04-30T16:08:37.993520927Z caller=table_manager.go:171 msg="uploading tables"
level=info ts=2021-04-30T16:08:37.993941099Z caller=module_service.go:59 msg=initialisation du module=store
level=info ts=2021-04-30T16:08:37.994011839Z caller=module_service.go:59 msg=initialisation du module=memberlist-kv
level=info ts=2021-04-30T16:08:37.99412775Z caller=module_service.go:59 msg=initialisation du module=server
level=info ts=2021-04-30T16:08:37.994379648Z caller=module_service.go:59 msg=initialisation module=ingester
level=info ts=2021-04-30T16:08:37.994415984Z caller=ingester.go:241 msg="recovering from checkpoint" (récupération du point de contrôle)

Pour démarrer Promtail, exécutez la commande ci-dessous avec le fichier de configuration de Promtail. Promtail est nécessaire pour récupérer les logs dans Loki.

geekflare@geekflare:~/loki$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
level=info ts=2021-04-30T16:35:52.775998059Z caller=server.go:229 http=[: :]:9080 grpc=[: :]:42557 msg="server listening on addresses"
level=info ts=2021-04-30T16:35:52.776283661Z caller=main.go:112 msg="Starting Promtail" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:35:57.776226323Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}"
ts=2021-04-30T16:35:57.776902427Z caller=log.go:124 level=info msg="Recherche /var/log/fontconfig.log - &{Offset:11055 Whence:0}"
level=info ts=2021-04-30T16:35:57.776983546Z caller=tailer.go:125 component=tailer msg="tail routine : started" path=/var/log/auth.log
level=info ts=2021-04-30T16:35:57.777009023Z caller=tailer.go:125 component=tailer msg="tail routine : started" path=/var/log/fontconfig.log
ts=2021-04-30T16:35:57.777094698Z caller=log.go:124 level=info msg="Recherche /var/log/lastlog - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.777712594Z caller=log.go:124 level=info msg="Recherche /var/log/apport.log - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.778200383Z caller=log.go:124 level=info msg="Recherche /var/log/alternatives.log - &{Offset:456 Whence:0}"
ts=2021-04-30T16:35:57.780467419Z caller=log.go:124 level=info msg="Recherche /var/log/syslog - &{Offset:56911 Whence:0}"
level=info ts=2021-04-30T16:35:57.780646032Z caller=tailer.go:125 component=tailer msg="tail routine : started" path=/var/log/kern.log
level=info ts=2021-04-30T16:35:57.781289004Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}"
level=info ts=2021-04-30T16:35:57.787770104Z caller=tailer.go:125 component=tailer msg="tail routine : started" path=/var/log/grafana/grafana.log
ts=2021-04-30T16:35:57.782276009Z caller=log.go:124 level=info msg="Recherche /var/log/grafana/grafana.log - &{Offset:0 Whence:0}"

Visualiser le journal à l’aide de Loki et de Grafana

Grafana fournit un support intégré pour Loki. Loki est déjà présent dans les sources de données de Grafana.

Étape 1 : Allez dans les Configurations de Grafana et cliquez sur “Data Sources”.

grafana

Étape 2 : Dans Data Sources, vous pouvez rechercher la source par nom ou par type.

configuration

Étape 3 : Recherchez le nom Loki. Vous pouvez voir que cette source de données est déjà présente dans Grafana. Cliquez sur Select.

add loki

Étape 4 : Entrez le nom que vous voulez donner à la source de données et mettez http://localhost:3100 (changez ceci en IP de serveur si Loki fonctionne sur un serveur différent de Grafana) dans l’URL parce que nous avons démarré Loki sur le port 3100.

loki data source

Cliquez sur le bouton Test and Save (tester et enregistrer) en bas. Si vous avez correctement configuré Loki, vous obtiendrez le message ci-dessous dans une boîte verte.

save and test

Étape 5 : Cliquez sur l’onglet Explore sur le côté gauche. Sélectionnez Loki dans la liste déroulante de sélection de la source de données. Maintenant, j’aimerais visualiser l’activité des journaux Grafana. Pour ce faire, vous devez ajouter la requête <em>{filename="/var/log/grafana/grafana.log"}</em> dans le Log Browser. Les barres vertes ci-dessous sont des entrées d’événements dans le fichier journal.

grafana log

Vous pouvez sélectionner l’intervalle de temps pour lequel vous souhaitez que la visualisation apparaisse sur le tableau de bord, et vous pouvez également définir l’intervalle de rafraîchissement de la requête, après lequel la requête sera exécutée à nouveau. Pour voir plus de détails sur les journaux, faites défiler vers le bas et cliquez sur l’une des entrées du journal, vous obtiendrez toutes sortes d’informations relatives au journal.

detail log

C’est magnifique, n’est-ce pas ?

Voilà, c’était tout pour commencer. Je vous conseille vivement de regarder la vidéo du webinaire ci-dessous qui explique l’observabilité avec Loki.

Conclusion

Un système distribué est composé de nombreuses applications ou microservices, chacun ayant des tonnes de logs. Vous auriez besoin d’un moyen rentable de collecter les logs, de les stocker et de les utiliser. Loki est une solution parfaite pour de tels cas. En fait, vous pouvez réduire d’environ 75 % vos coûts de journalisation et de surveillance en intégrant Loki dans votre environnement de production.

Loki est également disponible via Grafana Cloud, il serait bon de l’essayer si vous ne voulez pas passer par le processus d’installation.

Ensuite, découvrez Grafana Tempo.