Salut, Khabrovites! En prévision du début d'un nouvel ensemble pour le cours DevOps Practices and Tools, nous avons préparé pour vous une traduction de matériel intéressant.
Cet article est une brÚve introduction à Loki. Le projet Loki est soutenu par Grafana et vise à collecter de maniÚre centralisée les journaux (à partir de serveurs ou de conteneurs).La principale source d'inspiration pour Loki était Prometheus avec l'idée d'appliquer ses approches de gestion des journaux:- utilisation d'étiquettes (étiquettes) pour le stockage des données
- faible consommation de ressources
Nous reviendrons sur les principes de Prométhée et donnerons quelques exemples de son utilisation dans le cadre de Kubernetes.Quelques mots sur Prométhée
Pour bien comprendre comment fonctionne Loki, il est important de prendre du recul et de rappeler un peu Prometheus.L'une des caractéristiques distinctives de Prometheus est l'extraction des métriques des points de collecte (via les exportateurs) et leur stockage dans TSDB (Time Series Data Base, base de données des séries chronologiques) avec l'ajout de métadonnées sous forme d'étiquettes.Pourquoi est-ce nécessaire
RĂ©cemment, Prometheus est devenu la norme de facto dans le monde des conteneurs et de Kubernetes: son installation est trĂšs simple et le cluster Kubernetes a initialement un point de terminaison pour Prometheus. Prometheus peut Ă©galement rĂ©cupĂ©rer des mĂ©triques Ă partir d'applications dĂ©ployĂ©es dans un conteneur, tout en conservant certaines balises. Par consĂ©quent, la surveillance des applications est trĂšs facile Ă mettre en Ćuvre.Malheureusement, il n'y a toujours pas de solution clĂ© en main pour la gestion des journaux, et vous devez trouver une solution pour vous-mĂȘme:- service cloud gĂ©rĂ© pour centraliser les journaux (AWS, Azure ou Google)
- surveillance en tant que service de surveillance de service (par exemple, Datadog)
- créer votre propre service de collecte de journaux.
Pour la troisiĂšme option, j'utilisais traditionnellement Elasticsearch, malgrĂ© le fait que je n'Ă©tais pas toujours satisfait de cela (en particulier sa gravitĂ© et la complexitĂ© des paramĂštres).Loki a Ă©tĂ© conçu pour simplifier la mise en Ćuvre conformĂ©ment aux principes suivants:- ĂȘtre facile Ă dĂ©marrer
- consommer peu de ressources
- travailler indépendamment sans aucun entretien particulier
- complĂ©ter Prometheus pour aider Ă enquĂȘter sur les bugs
Cependant, cette simplicitĂ© est obtenue grĂące Ă certains compromis. L'un d'eux n'est pas d'indexer le contenu. Par consĂ©quent, la recherche de texte n'est pas trĂšs efficace ou riche et ne permet pas de statistiques sur le contenu du texte. Mais puisque Loki veut ĂȘtre l'Ă©quivalent de grep et complĂ©ter le PromĂ©thĂ©e, ce n'est pas un dĂ©faut.EnquĂȘte d'incident
Pour mieux comprendre pourquoi Loki n'a pas besoin d'indexation, revenons Ă la mĂ©thode d'enquĂȘte d'incident utilisĂ©e par les dĂ©veloppeurs Loki:
1 alerte â 2 tableau de bord â 3 requĂȘte ad hoc â 4 agrĂ©gation de journaux â 5 suivi distribuĂ© â 6 correctif!
(1 avertissement â 2 tableaux de bord â 3 requĂȘtes ad hoc â 4 agrĂ©gation de journaux â 5 suivi distribuĂ© â 6 correction!)L'idĂ©e est que nous recevions une alerte (Slack Notification, SMS, etc.) et aprĂšs cela:- Grafana
- (, Prometheus)
- (, Elasticsearch)
- , (Jaeger, Zipkin .)
- , , .
Ici, dans le cas de la pile Grafana + Prometheus + Elasticsearch + Zipkin, vous devrez utiliser quatre outils différents. Pour réduire le temps, ce serait bien de pouvoir effectuer toutes ces étapes avec un seul outil: Grafana. Il est à noter que cette approche de la recherche est implémentée dans Grafana depuis la version 6. Ainsi, il devient possible d'accéder aux données Prometheus directement depuis Grafana.
Ăcran Explorateur divisĂ© entre Prometheus et LokiSur cet Ă©cran, vous pouvez afficher les journaux Loki liĂ©s aux mĂ©triques Prometheus en utilisant le concept d'Ă©cran partagĂ©. Ă partir de la version 6.5, Grafana vous permet de traiter l'identifiant de trace dans les entrĂ©es du journal Loki pour suivre les liens vers vos outils de suivi distribuĂ©s prĂ©fĂ©rĂ©s (Jaeger).Test local de Loki
La façon la plus simple de tester Loki localement consiste à utiliser Docker-compose. Le fichier docker-compose se trouve dans le référentiel Loki. Vous pouvez obtenir le référentiel à l'aide de la commande suivante git
:$ git clone https:
Ensuite, vous devez aller dans le répertoire de production:$ cd production
AprĂšs cela, vous pouvez obtenir la derniĂšre version des images Docker:$ docker-compose pull
Enfin, la pile Loki est lancée avec la commande suivante:$ docker-compose up
Architecture de Loki
Voici un petit diagramme avec l'architecture Loki:
Principes de l'architecture Loki Leclient Web lance des applications sur le serveur, Promtail collecte les journaux et les envoie à Loki, le client Web envoie également des métadonnées à Loki. Loki agrÚge tout et le transfÚre à Grafana.Loki est opérationnel. Pour afficher les composants disponibles, exécutez la commande suivante:$ docker ps
Dans le cas d'un Docker fraßchement installé, la commande doit renvoyer le résultat suivant:IMAGE PORTS NAMES
grafana/promtail: production_promtail_1
grafana/grafana: m 0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late 80/tcp,0.0.0.0:3100... production_loki_1
Nous voyons les composants suivants:- Promtail: agent de centralisation des journaux
- Grafana: un célÚbre outil de tableau de bord
- Loki: un démon de centralisation des données
Dans le cadre d'une infrastructure classique (basĂ©e par exemple sur des machines virtuelles), un agent Promtail doit ĂȘtre dĂ©ployĂ© sur chaque machine. Grafana et Loki peuvent ĂȘtre installĂ©s sur la mĂȘme machine.DĂ©ploiement de Kubernetes
L'installation des composants Loki sur Kubernetes se fera comme suit:- daemonSet pour déployer l'agent Promtail sur chaque machine d'un cluster de serveurs
- Déploiement Loki
- et enfin, le déploiement de Grafana.
Heureusement, Loki est disponible sous forme de package Helm, ce qui facilite son déploiement.Installation via Helm
Helm doit dĂ©jĂ ĂȘtre installĂ©. Il peut ĂȘtre tĂ©lĂ©chargĂ© Ă partir du rĂ©fĂ©rentiel GitHub du projet. Il est installĂ© en dĂ©compressant l'archive qui correspond Ă votre architecture et en ajoutant Helm $PATH
.Remarque: Helm version 3.0.0 a été récemment publiée. Comme il y avait beaucoup de changements, il est conseillé au lecteur d'attendre un peu avant de l'utiliser en premier .
Ajout d'une source pour Helm
La premiÚre étape consiste à ajouter le référentiel «loki» avec la commande suivante:$ helm add loki https:
AprÚs cela, vous pouvez rechercher des packages nommés «loki»:$ helm search loki
Résultat:loki/loki 0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2 v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail 0.13.1 v0.4.0 Responsible for gathering logs and...
Ces packages ont les fonctionnalités suivantes:- Le package loki / loki ne correspond qu'au serveur Loki
- Le package loki / fluent-bit vous permet de déployer DaemonSet à l'aide de fluent-bin pour collecter les journaux au lieu de Promtail
- le package loki / promtail contient les fichiers journaux d'un agent de collecte
- Le package loki / loki-stack vous permet de déployer immédiatement Loki avec Promtail.
Installation de Loki
Pour déployer Loki sur Kubernetes, exécutez la commande suivante dans l'espace de noms «monitoring»:$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Pour enregistrer sur le disque, ajoutez l'option --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack \
--namespace monitoring \
--set loki.persistence.enabled=true
Remarque: si vous souhaitez dĂ©ployer Grafana en mĂȘme temps, ajoutez le paramĂštre--set grafana.enabled = true
Lorsque vous exécutez cette commande, vous devez obtenir la sortie suivante:LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
âŠ
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http:
En regardant l'état des foyers dans l'espace de noms «monitoring», nous verrons que tout est étendu:$ kubectl -n monitoring get pods -l release=loki
Résultat:NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 147m
loki-promtail-9zjvc 1/1 Running 0 3h25m
loki-promtail-f6brf 1/1 Running 0 11h
loki-promtail-hdcj7 1/1 Running 0 3h23m
loki-promtail-jbqhc 1/1 Running 0 11h
loki-promtail-mj642 1/1 Running 0 62m
loki-promtail-nm64g 1/1 Running 0 24m
Tous les pods fonctionnent. Il est maintenant temps de faire quelques tests!Connectez-vous Ă Grafana
Pour vous connecter Ă Grafana sous Kubernetes, vous devez ouvrir un tunnel vers le bas. Voici la commande pour ouvrir le port 3000 pour le foyer Grafana:$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Un autre point important est la nécessité de récupérer le mot de passe administrateur Grafana. Le mot de passe est gardé secret loki-grafana
dans un champ .data.admin-user
au format base64.Pour le restaurer, vous devez exécuter la commande suivante:$ kubectl -n monitoring get secret loki-grafana \
--template '{{index .data "admin-password" | base64decode}}'; echo
Utilisez ce mot de passe avec le compte administrateur par défaut (admin).Définition d'une source de données Loki dans Grafana
Tout d'abord, assurez-vous que la source de données Loki (Configuration / Datasource) est créée.Voici un exemple:
Exemple de configuration d'une source de données pour LokiEn cliquant sur «Test», vous pouvez vérifier la connexion avec Loki.Faire des demandes à Loki
Allez maintenant Ă la section «Explore» de Grafana. Lors de la rĂ©ception de journaux de conteneurs, Loki ajoute des mĂ©tadonnĂ©es de Kubernetes. Ainsi, il devient possible d'afficher les journaux d'un conteneur spĂ©cifique.: Par exemple, la promtail de requĂȘte suivante doit ĂȘtre utilisĂ©e pour sĂ©lectionner les journaux de conteneur {container_name = "promtail"}
.Assurez-vous également de sélectionner votre source de données Loki ici.Cette demande renverra l'activité des conteneurs comme suit:
Le résultat de la demande à GrafanaAjout au tableau de bord
Ă partir de Grafana 6.4, vous pouvez mettre des informations sur les journaux directement sur le tableau de bord. AprĂšs cela, l'utilisateur pourra basculer rapidement entre le nombre de requĂȘtes sur son site et les traces de l'application.Voici un exemple de tableau de bord qui implĂ©mente cette interaction: Un
exemple de tableau de bord avec les métriques Prometheus et les journaux LokiFuture loki
J'ai commencĂ© Ă utiliser Loki en mai / juin avec la version 0.1. Aujourd'hui, la version 1 est dĂ©jĂ sortie, et mĂȘme 1.1 et 1.2.Certes, la version 0.1 n'Ă©tait pas assez stable. Mais 0,3 montre dĂ©jĂ de rĂ©els signes de maturitĂ©, et les prochaines versions (0,4, puis 1,0) ne font que renforcer cette impression.AprĂšs 1.0.0, personne ne peut avoir aucune excuse pour ne pas utiliser ce merveilleux outil.De nouvelles amĂ©liorations ne devraient pas concerner Loki, mais plutĂŽt son intĂ©gration avec l'excellent Grafana. En fait, Grafana 6.4 a dĂ©jĂ une bonne intĂ©gration avec les tableaux de bord.Grafana 6.5, qui a Ă©tĂ© publiĂ© rĂ©cemment, amĂ©liore encore cette intĂ©gration en reconnaissant automatiquement le contenu des journaux au format JSON.La vidĂ©o suivante montre un petit exemple de ce mĂ©canisme:
Utilisation des chaßnes Loki affichées dans GrafanaIl devient possible d'utiliser l'un des champs JSON, par exemple, pour:- liens d'outils externes
- filtrage du contenu du journal
Par exemple, vous pouvez cliquer sur traceId pour accĂ©der Ă Zipkin ou Jaeger.Traditionnellement, nous attendons vos commentaires et nous vous invitons Ă un webinaire ouvert , oĂč nous parlerons de l'Ă©volution de l'industrie DevOps en 2019 et discuterons des pistes de dĂ©veloppement possibles pour 2020.