Gestion des logs avec syslog sur Tina Linux

Introduction au mécanisme syslog

Le système syslog constitue une architecture standardisée pour la centralisation et la gestion des journaux d'événements, particulièrement cruciale pour les processus d'arrière-plan (daemons). Contrairement aux applications interactives, les daemons ne disposent pas de terminal de contrôle pour diriger leurs flux de sortie (stdin/stderr). Syslog résout cette problématique en offrant un point d'entrée unique pour la collecte des messages.

Le démon syslog

Au cœur du système, le démon syslog agit comme un concentrateur. Il initialise généralement un socket de domaine Unix (SOCK_DGRAM) lié au chemin /dev/log. Dans les configurations réseau, il peut également écouter sur le port UDP 514. Sa fonction principale est de lire les données transitant par ces sockets pour les rediriger vers des destinations finales comme des fichiers, la console série ou des serveurs distants.

Utilisation des fonctions API

Pour qu'une application puisse transmettre des informations au démon, elle utilise l'interface de programmation standard définie dans <syslog.h>. Voici un exemple d'implémentation typique :

#include <syslog.h>

void enregistrer_evenement() {
    // Initialisation optionnelle
    openlog("MonApp-Service", LOG_PID | LOG_CONS, LOG_DAEMON);

    // Envoi d'un message avec un niveau de priorité spécifique
    syslog(LOG_ERR, "Échec de l'initialisation du module : %m");

    // Fermeture de la connexion
    closelog();
}

Lors du premier appel à syslog(), si openlog() n'a pas été invoqué manuellement, le système établit une connexion implicite. Le paramètre ident (souvent le nom du programme) est préfixé à chaque ligne de log.

Niveaux de priorité (Levels)

L'imporatnce des messages est classée selon une échelle décroissante :

Niveau Valeur Description
LOG_EMERG 0 Système instable ou inutilisable
LOG_ALERT 1 Action corrective immédiate requise
LOG_CRIT 2 Erreurs critiques (matériel)
LOG_ERR 3 Conditions d'erreur standards
LOG_WARNING 4 Avertissements
LOG_NOTICE 5 Événements normaux mais significatifs
LOG_INFO 6 Informations générales
LOG_DEBUG 7 Messages de débogage

Rotation des fichiers de logs

L'accumulation constante de journaux peut saturer l'espace de stockage. Le processus de rotation (rotation) limite la taille des fichiers en archivant les anciennes données. Typiquement, un fichier messages est renommé en messages.0, puis messages.1, avant d'être supprimé après un certain cycle, permettant ainsi de maintenir une empreinte disque constante.

Outils disponibles sous Tina Linux

Utilisation de ubox (logd et logread)

Dans l'écosystème OpenWrt/Tina, ubox fournit une implémentation légère composée de deux éléments :

  • logd : Gère un tampon circulaire (ring buffer) en mémoire vive. La taille se configure via log_buffer_size dans /etc/config/system.
  • logread : Extrait les données du tampon. Il peut exporter les logs vers un fichier permanent ou un serveur distant.
# Exemple de lecture continue des logs
logread -f

# Exportation vers un fichier avec limite de taille
logread -f -F /mnt/ext_drive/system.log -S 512

Busybox syslogd et klogd

Busybox propose une suite d'outils très répandue sur les systèmes embarqués. syslogd traite les logs utilisateurs tandis que klogd récupère les messages du noyau (via printk) pour les injecter dans le flux syslog.

Le fichier de configuration /etc/syslog.conf permet de filtrer les sorties :

# Envoyer les erreurs et les messages critiques vers un fichier spécifique
*.err;auth.priv /var/log/secure.log

# Rediriger tout vers la console de secours
*.* /dev/console

Note : Dans les versions récentes de Busybox, les options -C (tampon mémoire) et -f (fichier de config) peuvent être mutuellement exclusives selon la compilation.

Syslog-ng : La solution avancée

Pour des besoins complexes, syslog-ng offre une flexibilité supérieure via un système de sources, filtres et destinations.

# Extrait de /etc/syslog-ng.conf
source s_local {
    internal();
    unix-dgram("/dev/log");
    file("/proc/kmsg" program_override("kernel"));
};

destination d_file {
    file("/var/log/messages" template("${ISODATE} ${PRIORITY} ${MESSAGE}\n"));
};

log {
    source(s_local);
    destination(d_file);
};

Gestion externe avec logrotate

logrotate est un utilitaire indépendant qui automatise la compression et la purge des logs. Il n'est pas un démon et doit être déclenché par une tâche cron.

# Configuration exemple pour /etc/logrotate.d/syslog
/var/log/messages {
    size 1M
    rotate 4
    compress
    copytruncate
    missingok
}

L'option copytruncate est vitale pour les systèmes où le démon de log ne ferme pas spontanément le descripteur de fichier, évitant ainsi de perdre des données après le renommage du fichier original.

Considérations techniques sur les Sockets Unix

La communication syslog reposant sur des sockets de domaine Unix (AF_LOCAL), elle est intrinsèquement fiable. Cependant, si le démon de log est saturé ou bloqué, les applications appelantes peuvent subir des ralentissements si les tampons d'écriture sont pleins. Il est recommandé de ne pas utiliser syslog de manière excessive dans les boucles critiques de haute performance.

Configuration dans l'environnement Tina

Activation via Menuconfig

Pour inclure ces outils dans votre image Tina Linux, naviguez dans l'interface de configuration :

# Pour ubox/logd
Base system ---> <*> logd
Base system ---> <*> ubox

# Pour Busybox
Base system ---> busybox ---> System Logging Utilities --->
    [*] syslogd
    [*] klogd
    [*] logread

# Pour syslog-ng
Administration ---> <*> syslog-ng

Démarrage personnalisé

Si vous utilisez Busybox sans script d'initialisation standard, vous pouvez ajouter ces lignes dans votre script de démarrage (ex: rc.local) :

# Initialisation du démon de logs avec rotation intégrée (5 fichiers de 2Mo)
syslogd -s 2048 -b 5 -O /data/log/messages &
# Lancement du collecteur de logs noyau
klogd &

Étiquettes: TinaLinux syslog busybox syslog-ng logrotate

Publié le 27 juillet à 05h24