miroir de
https://github.com/PAPAMICA/Wiki-Tech.io.git
synchronisé 2024-11-14 13:30:31 +01:00
173 lignes
9,7 Kio
HTML
173 lignes
9,7 Kio
HTML
<!--
|
|
title: Loki
|
|
description:
|
|
published: true
|
|
date: 2021-04-30T18:10:44.584Z
|
|
tags:
|
|
editor: ckeditor
|
|
dateCreated: 2021-04-30T14:10:48.775Z
|
|
-->
|
|
|
|
<figure class="image image_resized" style="width:33.37%;"><img src="https://grafana.com/docs/loki/latest/logo_and_name.png" alt="Loki Documentation | Grafana Labs"></figure>
|
|
<h1>Présentation</h1>
|
|
<p>Non, nous n'allons pas parler d'un personnage de l'univers Marvel ici mais d'un outil très pratique pour les admin sys !</p>
|
|
<p><a href="https://grafana.com/oss/loki/">Loki</a> est un agrégateur de logs créé et maintenu par l'équipe derrière <a href="https://grafana.com/grafana/">Grafana</a>. C'est une alternative plus simple à la <a href="https://www.elastic.co/fr/what-is/elk-stack">stack ELK</a> pour la centralisation et la gestion des logs.</p>
|
|
<h1>Fonctionnement</h1>
|
|
<p>Loki se compose de trois composants <strong>Promtail</strong>, <strong>Loki</strong> et <strong>Grafana</strong> que nous verrons brièvement avant de procéder au déploiement.</p>
|
|
<h2>Promtail</h2>
|
|
<p>Promtail est un agent qui expédie le contenu des journaux locaux vers une instance Loki privée ou Grafana Cloud. Il est généralement déployé sur chaque machine sur laquelle des applications doivent être surveillées.</p>
|
|
<p>Il agit principalement:</p>
|
|
<ul>
|
|
<li>Découvre des cibles</li>
|
|
<li>Attache des étiquettes aux flux de journaux</li>
|
|
<li>Les pousse vers l'instance Loki.</li>
|
|
</ul>
|
|
<p>Actuellement, Promtail peut suivre les journaux de deux sources: les fichiers journaux locaux et le journal systemd (sur les machines AMD64 uniquement). <a href="https://grafana.com/docs/loki/latest/clients/promtail/">source</a></p>
|
|
<h2>Loki</h2>
|
|
<p>Tel que cité par les créateurs de Loki, Loki est un système d'agrégation de journaux scalable horizontalement, hautement disponible et inspiré de Prometheus. Loki utilise le même mécanisme de découverte de service que celui de Prometheus et ajoute des étiquettes au flux de journal au lieu de l'indexation. Pour cette raison, les journaux reçus de Promtail se composent du même ensemble d'étiquettes que celui des métriques d'application. Ainsi, il offre non seulement une meilleure commutation de contexte entre les journaux et les métriques, mais évite également la journalisation complète des index.</p>
|
|
<h2>Grafana</h2>
|
|
<p>Grafana est une plate-forme open-source spécialisé dans l'analyse et la surveillance. Il fonctionne spécifiquement sur des données chronologiques provenant de sources telles que Prometheus et Loki. De plus, il vous permet d'interroger, de visualiser, d'alerter sur les métriques quel que soit son emplacement stocké. Il aide à créer, explorer et partager des tableaux de bord et encourage la culture axée sur les données.</p>
|
|
<h1>Installation</h1>
|
|
<p>Evidemment, si vous ne l'aviez pas encore deviné, nous allons déployer Loki dans un conteneur Docker avec Docker-Compose !</p>
|
|
<p>Voici le docker-compose.yml en question : </p>
|
|
<pre><code class="language-diff">version: "2"
|
|
|
|
networks:
|
|
proxy:
|
|
external:
|
|
name: proxy
|
|
|
|
services:
|
|
loki:
|
|
image: grafana/loki:1.5.0
|
|
container_name: loki
|
|
restart: always
|
|
ports:
|
|
- "3100:3100"
|
|
command: -config.file=/etc/loki/local-config.yaml
|
|
networks:
|
|
- proxy
|
|
|
|
promtail:
|
|
image: grafana/promtail:1.5.0
|
|
container_name: $loki-promtail
|
|
restart: always
|
|
volumes:
|
|
- /var/log:/var/log
|
|
command: -config.file=/etc/promtail/docker-config.yaml
|
|
networks:
|
|
- proxy</code></pre>
|
|
<p>Loki et son compagnon Promtail sont maintenant en fonctionnement ! <br>Le lien pour envoyer vos logs est le suivant : <strong>http://server:3100/loki/api/v1/push</strong></p>
|
|
<h1>Envoyer les logs</h1>
|
|
<h2>Depuis Docker</h2>
|
|
<p>Il est très simple d'envoyer les logs Docker directement à Loki : un plugin est disponible pour cela.</p>
|
|
<h3>Installer le plugin</h3>
|
|
<pre><code class="language-plaintext">docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions</code></pre>
|
|
<p>Pour vérifier l'installation du plugin, vous pouvez utiliser la commande <code>docker plugin ls</code> :</p>
|
|
<pre><code class="language-plaintext">docker plugin ls
|
|
ID NAME DESCRIPTION ENABLED
|
|
ac720b8fcfdb loki Loki Logging Driver true</code></pre>
|
|
<h3>Mettre à jour le plugin</h3>
|
|
<pre><code class="language-plaintext">docker plugin disable loki --force
|
|
docker plugin upgrade loki grafana/loki-docker-driver:latest --grant-all-permissions
|
|
docker plugin enable loki
|
|
systemctl restart docker</code></pre>
|
|
<h3>Configurer le plugin</h3>
|
|
<p>Plusieurs options existent : </p>
|
|
<ol>
|
|
<li>A chaque lancement de container avec <code>docker run</code> :</li>
|
|
</ol>
|
|
<pre><code class="language-plaintext">docker run --log-driver=loki \
|
|
--log-opt loki-url="<URL_LOKI>" \
|
|
--log-opt loki-retries=5 \
|
|
--log-opt loki-batch-size=400 \
|
|
grafana/grafana</code></pre>
|
|
<p> 2. En ajoutant dans vos docker-compose :</p>
|
|
<pre><code class="language-plaintext"> logging:
|
|
driver: loki
|
|
options:
|
|
loki-url: "<URL_LOKI>"
|
|
loki-external-labels: service={{.Name}}</code></pre>
|
|
<p> 3. En configurant le driver comme driver par défaut dans Docker :</p>
|
|
<p>Pour cela vous devez changer le fichier <code>daemon.json</code> de Docker (dans <code>/etc/docker</code> sur Linux) en ajoutant ceci : </p>
|
|
<pre><code class="language-plaintext">{
|
|
"debug" : true,
|
|
"log-driver": "loki",
|
|
"log-opts": {
|
|
"loki-url": "<URL_LOKI>",
|
|
"loki-batch-size": "400"
|
|
}
|
|
}</code></pre>
|
|
<p>Après avoir configurer édité le fichier daemon.json, veuillez relancer le service docker avec :</p>
|
|
<pre><code class="language-plaintext">sudo systemctl restart docker </code></pre>
|
|
<p>Et voilà, tous les <strong>prochains</strong> container créés enverrons leurs logs à Loki !</p>
|
|
<p> </p>
|
|
<h2>Depuis Debian</h2>
|
|
<p>Depuis Debian ou tout autres distributions Linux c'est un peu plus compliqué : il faut installer et configurer l'agent Promtail pour l'envoi des logs.</p>
|
|
<p> 1. Téléchargez le binaire de Promtail depuis le <a href="https://github.com/grafana/loki/releases/">Github</a> :</p>
|
|
<pre><code class="language-plaintext">curl -s https://api.github.com/repos/grafana/loki/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep promtail-linux-amd64.zip | wget -i -</code></pre>
|
|
<p> Une fois le téléchargement terminé, dézippez le dans <code>/usr/local/bin</code> :</p>
|
|
<pre><code class="language-plaintext">unzip promtail-linux-amd64.zip
|
|
sudo mv promtail-linux-amd64 /usr/local/bin/promtail</code></pre>
|
|
<p> 2. Créez un fichier de configuration YAML pour Promtail dans le dossier <code>/usr/local/bin</code> :</p>
|
|
<pre><code class="language-plaintext">sudo nano /etc/promtail-local-config.yaml</code></pre>
|
|
<p> 3. Ajoutez le contenu suivant au fichier :</p>
|
|
<pre><code class="language-plaintext">server:
|
|
http_listen_port: 9080
|
|
grpc_listen_port: 0
|
|
|
|
positions:
|
|
filename: /data/loki/positions.yaml
|
|
|
|
clients:
|
|
- url: <URL_LOKI>
|
|
|
|
scrape_configs:
|
|
- job_name: system
|
|
static_configs:
|
|
- targets:
|
|
- localhost
|
|
labels:
|
|
job: varlogs
|
|
__path__: /var/log/*log</code></pre>
|
|
<p> 4. Créez le service pour Promtail :</p>
|
|
<pre><code class="language-plaintext">sudo tee /etc/systemd/system/promtail.service<<EOF
|
|
[Unit]
|
|
Description=Promtail service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=root
|
|
ExecStart=/usr/local/bin/promtail -config.file /etc/promtail-local-config.yaml
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF</code></pre>
|
|
<p> 5. Lancez le service Promtail :</p>
|
|
<pre><code class="language-plaintext">sudo systemctl daemon-reload
|
|
sudo systemctl start promtail.service</code></pre>
|
|
<p>Vous pouvez vérifier le statut du service avec <code>systemctl status promtail.service</code>. L'agent Promtail est maintenant installé et configuré pour envoyer vos logs systemd vers Loki.</p>
|
|
<h1>Grafana</h1>
|
|
<h2>Configuration de Loki</h2>
|
|
<p> </p>
|
|
<p>Pour voir les logs et leurs statistiques, il faut connecter Loki dans Grafana. </p>
|
|
<p>Dans Grafana, ajouter la source de donnée Loki :</p>
|
|
<figure class="image image_resized" style="width:72.81%;"><img src="/image_2021-04-30_185059.png"></figure>
|
|
<figure class="image image_resized" style="width:54.97%;"><img src="/loki2.png"></figure>
|
|
<p>Et configurer la source de donnée de cette façon :</p>
|
|
<p>Dans URL, mettez l'URL de votre Loki <code>http://serveur:3000</code> ou <code>nom-du-container:3000</code> si vous utilisez Loki sous docker sur le même réseau que Grafana.</p>
|
|
<figure class="image image_resized" style="width:52.88%;"><img src="/loki3.png"></figure>
|
|
<p>Vos logs sont maintenant accessible dans Grafana. Allons voir comment les consulter !</p>
|
|
<h2>Explorer les logs</h2>
|
|
<p>Vous pouvez consulter vos logs brut directement depuis l'onglet Explorer de Grafana :</p>
|
|
<figure class="image image_resized" style="width:79.96%;"><img src="/image_2021-04-30_193550.png"></figure>
|
|
<p>A vous de jouer avec les requêtes pour remonter les logs que vous souhaitez.</p>
|
|
<h2>En cadeau, des jolies tableaux</h2>
|
|
<p>Vu que je suis particulièrement gentil, je vous partage mes deux petits bébés : mes dashboards Grafana pour mes logs.</p>
|
|
<h3>La vue serveurs :</h3>
|
|
<figure class="image image_resized" style="width:96.15%;"><img src="/image_2021-04-30_195917.png"></figure>
|
|
<p>Dashboard disponible ici : <a href="https://github.com/PAPAMICA/Templates/blob/master/Grafana/Loki-Logs-Serveurs.json">Github</a></p>
|
|
<h3>La vue services :</h3>
|
|
<figure class="image image_resized" style="width:96.57%;"><img src="/image_2021-04-30_194541.png"></figure>
|
|
<p>Dashboard disponible ici : <a href="https://github.com/PAPAMICA/Templates/blob/master/Grafana/Loki-Logs-Services.json">Github</a></p>
|