Outils pour utilisateurs

Outils du site


sysadmin:linux:logs:visualisation_des_logs_loki_grafana

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
sysadmin:linux:logs:visualisation_des_logs_loki_grafana [2021/08/14 12:14] yoannsysadmin:linux:logs:visualisation_des_logs_loki_grafana [2021/10/25 14:30] (Version actuelle) yoann
Ligne 1: Ligne 1:
 {{tag>sysadmin log loki grafana todo}} {{tag>sysadmin log loki grafana todo}}
  
-====== Visualiser les logs syslog avec Loki et Grafana ======+====== Visualiser les logs sous Grafana grâce à Loki ======
  
 +Plus simple et moins consommateur de ressource que la pile ELK
  
 +Apporte une visibilité des logs directement sous Grafana et permet ainsi d'obtenir un outil complet de gestion d'incidents: A partir du déclenchement d'alerte, l'opérateur peut consulter les métriques des services, accéder aux logs, visualiser les transactions (voir tracing avec Jaeger) et ainsi identifier rapidement l'origine des défaillances. 
 +
 +===== Architecture générale =====
 +
 +  * **Promtail** est un agent (ou client) qui s’exécute localement. Il est chargé de scruter les fichiers de logs et de les intégrer dans Loki en mode push.
 +  * **Loki** est la base de donnée: Il stocke les logs.
 +  * **Grafana** se connecte à Loki et propose une visualisation des logs.
 +
 +===== Installation de Loki =====
 +
 +==== Test de l'image ====
 +
 +L'image docker est disponible sur le Hub à l'URL https://hub.docker.com/r/grafana/loki
 +Télécharger l' image docker:
 +
 +<code bash>
 +docker image pull grafana/loki:2.3.0
 +</code>
 +
 +Création d'un conteneur de test
 +
 +<code bash>
 +docker run -d --name=loki-test -p 127.0.0.1:3100:3100 grafana/loki:2.3.0
 +</code>
 +
 +Vérifier le bon fonctionnement de l'instance via les logs et via les points d'entrée exposés:
 +  * GET /ready
 +  * GET /metrics
 +  * GET /config
 +  * GET /loki/api/v1/status/buildinfo
 +
 +
 +<code bash>
 +docker container logs loki-test --follow
 +</code>
 +
 +<code bash>
 +$ mkdir -p loki/conf
 +$ wget https://raw.githubusercontent.com/grafana/loki/v2.3.0/cmd/loki/loki-local-config.yaml -O loki/conf/loki-config.yaml
 +</code>
 +
 +Création d'un réseau dédié pour Loki, seule l'application Grafana sera connectée à Loki par l'intermédiaire de ce réseau.
 +<code bash>
 +$ docker network create loki-net
 +</code>
 +
 +Le docker-compose
 +
 +<file YAML>
 +version: "3.3"
 +
 +networks:
 +  loki-net:
 +    external: true
 +
 +  loki:
 +    image: grafana/loki:2.3.0
 +    restart: unless-stopped
 +    ports:
 +      - "127.0.0.1:3100:3100/tcp"
 +    command: -config.file=/mnt/loki-config.yaml
 +    networks:
 +      loki-net:
 +    volumes:
 +      - $PWD/loki/conf/loki-config.yaml:/mnt/loki-config.yaml:ro
 +    labels:
 +      - "traefik.enable=true"
 +      - "traefik.docker.network=traefik-net"
 +      - "traefik.http.routers.loki_http.entryPoints=HTTP"
 +      - "traefik.http.routers.loki_http.rule=Host(`loki.phobos-net.fr`)"
 +      - "traefik.http.routers.loki_http.middlewares=auth"
 +      - "traefik.http.services.loki.loadbalancer.server.port=3100"
 +</file>
 +
 +Vérifier le fonctionnement de l'instance:
 +<code bash>
 +http://loki.phobos-net.fr/ready
 +
 +# afficher la configuration
 +http://loki.phobos-net.fr/config
 +
 +# afficher les labels disponibles
 +http://loki.phobos-net.fr/loki/api/v1/labels
 +
 +# pour afficher les valeurs associées au label __name__
 +http://loki.phobos-net.fr/loki/api/v1/label/__name__/values
 +</code>
 +
 +Envoyer manuellement une ligne de log via cURL:
 +<code bash>
 +docker pull curlimages/curl:latest
 +
 +# timetamp en nanosecondes utilisé par la requête
 +TSNS=$(date +%s)000000000
 +
 +docker container run --rm --interactive --name curl_push --network loki-net curlimages/curl:latest  curl -v -H "Content-Type: application/json" -XPOST -s "http://loki:3100/loki/api/v1/push" --data-raw   '{"streams": [{ "stream": { "job": "dockerlogs", "container_name": "curl_push" }, "values": [ [ "'$TSNS'", "Hello Loki again" ] ] }]}'
 +</code>
 +
 +===== Driver docker =====
 +
 +Le pilote Loki pour Docker disponible sous la forme d'un plugin Docker permet à Loki de lire et d'intégrer directement les logs générés par les conteneurs Docker. Le plugin peut être configuré utiliser une instance privée de Loki ou les services cloud. Si l'on souhaite superviser les conteneurs uniquement, on peut se limiter à l'installation du plugin et ne pas utiliser Promtail.
 +
 +==== Installer le pilote ====
 +
 +Pour installer le driver Loki pour Docker:
 +<code bash>
 +$ docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
 +</code>
 +
 +  * La documentation officielle du pilote Loki pour Docker est disponible à l'URL https://grafana.com/docs/loki/latest/clients/docker-driver/
 +  * Les détails concernant la configuration sont disponibles à l'URL https://grafana.com/docs/loki/latest/clients/docker-driver/configuration/
 +
 +Ici on fait le choix d'utiliser une configuration qui définie explicitement sur le conteneur le mode de journalisation utilisée:
 +
 +<file YAML>
 +
 +</file>
 +
 +
 +==== Configurer le pilote de journalisation ====
 +
 +Le daemon Docker a un pilote de journalisation (logging driver) par défaut. Il est utilisé par tous les conteneurs sauf s'ils le redéfinissent explicitement. Pour configurer la journalisation vers Loki deux possibilités:
 +  * On peut redéfinir le pilote de journalisation du conteneur. Cela permet de sélectionner les conteneurs qui envoient les logs vers Loki.  
 +  * On peut reconfigurer globalement le daemon Docker pour que le pilote de journalisation par défaut soit Loki. Dans ce cas tout conteneur ne redéfinissant pas explicitement sont pilote de journalisation transmettra les logs à Loki.
 +
 +
 +
 +<code bash>
 +docker container run --detach --name test_loki \
 +  --network loki-net \
 +  --log-driver loki --log-opt loki-url="http://loki:3100/loki/api/v1/push" \
 +  --log-opt loki-batch-size=1 \
 +  --log-opt loki-external-labels="job=dockerlogs,environment=prod" \
 +  busybox:latest echo "Hello Loki from lokitest container"
 +</code>
 +
 +===== Activer le tracing via Jaeger =====
 +
 +Syntaxe avec Helm:
 +
 +<code bash>
 +helm upgrade --install loki loki/loki --set "loki.tracing.jaegerAgentHost=YOUR_JAEGER_AGENT_HOST"
 +</code>
  
 ===== Références ===== ===== Références =====
  
 +  * https://grafana.com/docs/loki/latest/installation/docker/
 +  * https://grafana.com/docs/loki/latest/clients/docker-driver/
   * https://mightywomble.medium.com/using-grafana-to-visualise-syslog-files-with-loki-9a8869081fb5   * https://mightywomble.medium.com/using-grafana-to-visualise-syslog-files-with-loki-9a8869081fb5
   * https://grafana.com/grafana/dashboards/12433   * https://grafana.com/grafana/dashboards/12433
 +  * https://blog.ruanbekker.com/blog/2020/08/13/getting-started-on-logging-with-loki-using-docker/
 +  * https://grafana.com/docs/loki/latest/getting-started/troubleshooting/#enable-tracing-for-loki
sysadmin/linux/logs/visualisation_des_logs_loki_grafana.1628943250.txt.gz · Dernière modification : 2021/08/14 12:14 de yoann