Premiers pas avec Grafana Loki

Publié: 2021-05-01

Apprenons les principes fondamentaux de Grafana Loki, un système d'agrégation de journaux multi-locataires.

Dans un environnement de production, les temps d'arrêt sont inacceptables. Cela peut entraîner une perte massive de revenus et de réputation pour l'entreprise. Mais si vous disposez d'un système de journalisation et de surveillance approprié, vous saurez comment déboguer de tels scénarios, qui entraînent 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, toutes les tailles d'organisations utilisent les principes et outils DevOps. Les conteneurs et Kubernetes sont les plus populaires. Et le suivi d'un tel système se fait très efficacement avec Prometheus. Mais là où Prometheus est à la traîne, c'est la partie journalisation. Il ne fournit pas de système de journalisation centralisé, et c'est là que Loki entre en jeu.

Qu'est-ce que Grafana Loki ?

Grafana Loki est un système d'agrégation de journaux multi-locataire 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 les fournisseurs de cloud et avec des outils comme Prometheus et Grafana.

Loki est similaire à la pile ELK/EFK, mais il est plus facile à configurer et à utiliser avec de meilleures fonctionnalités. Loki n'indexe pas le contenu du journal, mais indexe plutôt les horodatages et un ensemble d'étiquettes pour un flux de journal. Cela rend l'indice plus petit, ce qui simplifie les opérations et réduit éventuellement le coût.

Avantages de Loki

Vous trouverez ci-dessous les avantages d'utiliser Loki dans votre pile :

  • En indexant uniquement les métadonnées, Loki est très rentable. L'exécution d'index pour le traitement de texte intégral nécessite des instances de RAM plus importantes qui sont très coûteuses. Le stockage des journaux sur un magasin d'objets comme S3 le rend également très moins cher.
  • Il prend en charge la multi-location en utilisant 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 mettre à l'échelle horizontalement pour des opérations à grande échelle.
  • Il utilise le style dynamo 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 pour faire face au risque de plantages de processus et de sorties brutales où les journaux se perdent. Oui, cela entraînerait des dépenses supplémentaires, mais pas si élevées, l'intégrité des données est plus critique.
  • Facile à brancher avec des outils populaires tels que Kubernetes, Prometheus et la visualisation dans Grafana.

Loki Architecture

architecture loki - geekflare

L'architecture Loki a trois composants - 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 lo provenant des pods et de transmettre ces journaux aux instances Loki. L'agent promtail suit les journaux du système de fichiers local et envoie les journaux 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 courants pour l'utilisation d'un système de journalisation comme Loki.

  • Business Intelligence : il s'agit d'un cas d'utilisation permanent, créer des informations exploitables à partir des données de journal peut toujours être très utile. Loki peut vous aider à comprendre les données des journaux et vous rendre capable de créer de nouvelles stratégies pour la croissance de votre entreprise. Par exemple, grâce aux données de journal d'une organisation, il peut vous aider à connaître les taux de conversion d'un canal publicitaire.
  • Surveillance : Prometheus est beaucoup 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 une fois le seuil franchi.
  • Débogage et dépannage : Loki peut aider l'équipe DevOps avec des réponses rapides telles que le moment où l'application a planté, la raison de son plantage, son dernier statut avant le plantage, etc.
  • Cybersécurité : Au cours des dernières années, les cyberattaques sur les portails de commerce électronique ont augmenté de façon exponentielle. Avec l'aide de Loki, vous pouvez vérifier les journaux pour identifier toute menace, problème ou activité malveillante se produisant dans le système de votre organisation. Si le piratage réussissait, Loki pourrait toujours être utile à l'équipe médico-légale pour comprendre en détail ce qui s'était passé dans le système. Cela les aidera à retrouver les pirates.
  • Conformité : pour se conformer aux réglementations de l'industrie, les organisations doivent conserver leurs journaux d'audit jusqu'à 7 ans. Les autorités locales peuvent auditer les journaux à tout moment. Loki peut stocker vos journaux d'audit en toute sécurité.

Installer 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 va gratter les logs de /var/log/*log

Accédez à la page des versions Loki, faites défiler jusqu'à Assets, vous trouverez ici plusieurs packages Loki et Promtail. Téléchargez le package Loki en fonction du système que vous utilisez. Ne téléchargez pas les packages cli ou canary Loki. 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.

 [email protected]:~$ mkdir loki [email protected]:~$ mv loki-linux-amd64 promtail-linux-amd64 loki [email protected]:~$ cd loki/ [email protected]:~/loki$ ls loki-linux-amd64 promtail-linux-amd64

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

 [email protected]:~/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 Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1832 (1.8K) [text/plain] Saving to: 'loki-local-config.yaml' loki-local-config.yaml 100%[===============================================================================================>] 1.79K --.-KB/s in 0s 2021-04-30 12:00:51 (16.6 MB/s) - 'loki-local-config.yaml' saved [1832/1832]
 [email protected]:~/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 Resolving github.com (github.com)... 13.234.210.38 Connecting to github.com (github.com)|13.234.210.38|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'promtail-local-config.yaml' promtail-local-config.yaml [ <=> ] 109.16K --.-KB/s in 0.002s 2021-04-30 12:05:08 (66.8 MB/s) - 'promtail-local-config.yaml' saved [111779]
 [email protected]:~/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 Loki. Cela démarrera Loki et affichera les journaux Loki dans le terminal.

 [email protected]:~/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=initialising module=store level=info ts=2021-04-30T16:08:37.994011839Z caller=module_service.go:59 msg=initialising module=memberlist-kv level=info ts=2021-04-30T16:08:37.99412775Z caller=module_service.go:59 msg=initialising module=server level=info ts=2021-04-30T16:08:37.994379648Z caller=module_service.go:59 msg=initialising module=ingester level=info ts=2021-04-30T16:08:37.994415984Z caller=ingester.go:241 msg="recovering from checkpoint"

Pour démarrer Promtail, exécutez la commande ci-dessous avec le fichier de configuration Promtail. Promtail est requis pour obtenir les journaux dans Loki.

 [email protected]:~/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="Seeked /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="Seeked /var/log/lastlog - &{Offset:0 Whence:0}" ts=2021-04-30T16:35:57.777712594Z caller=log.go:124 level=info msg="Seeked /var/log/apport.log - &{Offset:0 Whence:0}" ts=2021-04-30T16:35:57.778200383Z caller=log.go:124 level=info msg="Seeked /var/log/alternatives.log - &{Offset:456 Whence:0}" ts=2021-04-30T16:35:57.780467419Z caller=log.go:124 level=info msg="Seeked /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="Seeked /var/log/grafana/grafana.log - &{Offset:0 Whence:0}"

Visualiser le journal en utilisant Loki et 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 Configurations Grafana et cliquez sur « Sources de données ».

grafana

Étape 2 : Dans Sources de données, vous pouvez rechercher la source par nom ou par type.

configuration

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

ajouter loki

Étape 4: Entrez le nom que vous souhaitez donner à la source de données et mettez http://localhost:3100 (changez-le en IP du serveur si Loki s'exécute sur un serveur différent de Grafana) dans l'URL car nous avons démarré Loki sur le port 3100.

source de données loki

Cliquez sur le bouton Tester et enregistrer en bas. Si vous avez correctement configuré Loki, vous obtiendrez le message ci-dessous affiché dans une boîte verte.

enregistrer et tester

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

journal de grafana

Vous pouvez sélectionner la plage de temps pour laquelle vous souhaitez que la visualisation s'affiche sur le tableau de bord, et vous pouvez également définir l'intervalle d'actualisation de la requête, après quoi la requête sera à nouveau exécutée. 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, cela donnera toutes sortes d'informations liées au journal.

journal détaillé

C'est beau, n'est-ce pas ?

Donc, il s'agissait de commencer. Je vous conseillerais fortement de consulter davantage la vidéo du webinaire ci-dessous expliquant l'observabilité avec Loki.

Conclusion

Un système distribué est composé de nombreuses applications ou microservices, chacun ayant des tonnes de journaux. Vous auriez besoin d'un moyen rentable de collecter les journaux, de les stocker, puis de les utiliser. Loki est une solution parfaite pour de tels cas. En effet, 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 suivre le processus d'installation.

Ensuite, apprenez à connaître Grafana Tempo.