, , , , ,

Docker: Aucune journalisation produite par le driver loki

Les services docker-compose sont paramétrés pour communiquer avec le service loki mais aucun log n'est intégré dans la base Loki, elle reste vide.

Visionner les journaux système à la recherche des traces produites par le daemon docker et loki:

sudo journalctl -u docker.service | grep loki

Ci-dessous un extrait retourné:

août 23 08:54:48 phobos dockerd[2378]: time="2021-08-23T08:54:48Z" level=info msg="level=error ts=2021-08-23T08:54:48.248210233Z caller=client.go:355 container_id=5815df036ed5d2a480b3058587a7643757da8c32bc043844f6ec5db621236517 component=client host=loki:3100 msg=\"final error sending batch\" status=-1 error=\"Post \\\"http://loki:3100/loki/api/v1/push\\\": dial tcp: lookup loki on 91.224.149.254:53: no such host\"" plugin=d8c20ad5025304cb7b7b1768e1439d004a9ce704159b4acba37ec4636192572c

Le message indique une erreur de communication avec l’hôte de destination. Il faut noter que ce n'est pas directement le service qui communique avec Loki mais le daemon Docker. Pour que la communication puisse se faire on modifie la configuration du service docker-compose loki afin qu'il écoute sur la boucle locale uniquement ainsi seules les applications locales y auront accès

version: "3.3"

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
    ...

Relancer le service docker-compose loki et vérifier que le mapping du port est correct:

docker-compose ps
         Name                        Command                  State                Ports          
--------------------------------------------------------------------------------------------------
monitoring_cadvisor_1     /usr/bin/cadvisor -logtostderr   Up (healthy)   8080/tcp                
monitoring_grafana_1      /run.sh                          Up             3000/tcp                
monitoring_loki_1         /usr/bin/loki -config.file ...   Up             127.0.0.1:3100->3100/tcp

Modifier le fichier /etc/hosts du serveur exécutant le daemon Docker

127.0.0.1 localhost loki.local loki

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet

Enfin pour chaque service souhaitant transmettre les logs vers loki, spécifier le driver loki:

version: "3.3"
...

  dokuwiki:
    image: bitnami/dokuwiki:latest
    depends_on:
      - traefik
    restart: unless-stopped
    logging:
      driver: loki
      options:
        loki-url: "http://loki.local:3100/loki/api/v1/push"
        loki-batch-size: "10"
        loki-retries: "5"
    ...

Références