Exporter les logs des conteneurs Cyberwatch vers un serveur syslog

Cette page indique la configuration à appliquer pour exporter les logs des services Cyberwatch vers un serveur syslog.

Dans un premier temps, installer et configurer un serveur syslog-ng (ou syslog ou rsyslog) :

  1. Installer syslog-ng :

    • Pour les distributions basées sur Debian :

       sudo apt install syslog-ng
      
    • Pour les distributions basées sur Red Hat :

       yum install syslog-ng
      
  2. Éditer le fichier /etc/syslog-ng/syslog-ng.conf :

@version:3.38
@include "scl.conf"

options {flush_lines (0); keep_hostname (yes);};

source s_network {
    tcp( ip(0.0.0.0) port(514) );
};

destination d_remote {
    file("/var/log/remote/cyberwatch/${PROGRAM}.log" owner(root) group(root) perm(0644) dir_perm(0755) create_dirs(yes));
};

log {
    source(s_network);
    destination(d_remote);
};

Cette configuration minimale autorise des connexions syslog TCP depuis n’importe quelle interface sur le port 514.

À la réception des logs, syslog génère automatiquement des fichiers dans le répertoire /var/log/remote/cyberwatch/${PROGRAM}.log, organisant ainsi les logs reçus par programme. Ici, la variable ${PROGRAM} permet de générer un fichier distinct pour chaque conteneur, facilitant ainsi l’organisation et l’analyse des logs.

La documentation de syslog détaille de nombreuses possibilités de configuration, notamment la mise en place de TCP+TLS ou la restriction des connexions à une seule IP. Vous y trouverez également d’autres options avancées pour affiner votre configuration selon vos besoins.

Le serveur syslog-ng configuré, relancer le service :

sudo systemctl restart syslog-ng

Ensuite, une fois le service relancé, sur l’instance Cyberwatch créer le fichier /etc/cyberwatch/configs-enabled/99-custom-log.yml :

x-logging: &logging
  logging:
    driver: "syslog"
    options:
      syslog-address: "tcp://10.3.0.10:514"
      tag: "{{.Name}}"

services:
  nginx:
    <<: *logging
  web:
    <<: *logging
  sidekiq:
    <<: *logging
  sidekiq_node:
    <<: *logging
  sidekiq_master:
    <<: *logging
  redis:
    <<: *logging
  kibana:
    <<: *logging
  web-scanner:
    <<: *logging
  db:
    <<: *logging
  elasticsearch:
    <<: *logging
  cache:
    <<: *logging

Dans l’option syslog-address se trouve le protocole, l’adresse IP ainsi que le port pour se connecter vers le serveur syslog configuré à l’étape précédente.

La variable tag servira à nommer le fichier créé sur le serveur syslog. Ici, on utilise la variable {{.Name}} afin d’attribuer le nom du conteneur.

Une fois cela fait, redémarrer Cyberwatch afin d’appliquer les changements :

sudo cyberwatch restart

Retour en haut