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_sizedans/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 &