# Syslog

Syslog est un protocole définissant un service de journaux d'événements d'un système informatique. C'est aussi le nom du format qui permet ces échanges.

## Historique

Syslog a été développé dans les années 1980 par Eric Allman dans le cadre du projet Sendmail, et n'était initialement prévu que pour Sendmail. Il s'est avéré si utile que d'autres applications ont commencé à l'utiliser. Syslog est depuis devenu la solution de journalisation standard sur les systèmes Unix et Linux, il y a également une variété d'implémentations syslog sur d'autres systèmes d'exploitation (Windows notamment) et est généralement trouvé dans les périphériques réseau tels que les commutateurs ou routeurs.

## Le protocole Syslog
### Présentation générale

En tant que protocole, Syslog se compose d'une partie cliente et d'une partie serveur. La partie cliente émet les informations sur le réseau, à destination du port TCP 6514 ou éventuellement UDP 514 était utilisé; seul le port UDP était présent dans la RFC 3164 aussi il reste souvent utilisé. Les serveurs collectent l'information et se chargent de créer les journaux. Un serveur syslog peut également se comporter comme un relai et retransmettre à nouveau l'information reçue du client, on le qualifie de serveur proxy.
L'intérêt du protocole Syslog est donc de centraliser les journaux d'événements, permettant de repérer plus rapidement et efficacement les défaillances d'équipements présents sur un réseau.
Il existe aussi un logiciel appelé Syslog, qui est responsable de la prise en charge des fichiers de journalisation du système. Ceci inclut aussi le démon klogd, responsable des messages émis par le noyau Linux.

### Positionnement système

Le protocole syslog utilise un socket afin de transmettre ses messages. Suivant les systèmes, celui-ci est différent:
| Plate-forme | Méthode |
| Linux | Un SOCK_STREAM unix nommé /dev/log; certaines distributions utilisent SOCK_DGRAM |
| BSD | Un SOCK_DGRAM unix appelé /var/run/log. |
| Solaris (2.5 et inférieurs) | Un flux SVR4 appelé /dev/log. |
| Solaris (2.6 et supérieurs) | En plus du flux habituel, une porte multithreaded appelée /etc/.syslog_door est utilisée. |
| HP-UX 11 et supérieur | HP-UX utilise le Tube Unix nommé /dev/log de taille 2048 bytes |
| AIX 5.2 and 5.3 | Un SOCK_STREAM ou un SOCK_DGRAM unix appelé /dev/log. |
Une problématique nait de ce choix architectural, l'utilisation d'un point d'entrée unique crée des saturations système qui ont incité nombre de logiciels à utiliser leur propre système d'enregistrement.

## Le format Syslog

Un journal au format syslog comporte dans l'ordre les informations suivantes : la date à laquelle a été émis le log, le nom de l'équipement ayant généré le log (hostname), une information sur le processus qui a déclenché cette émission, le niveau de priorité du log, un identifiant du processus ayant généré le log et enfin un corps de message.
Certaines de ces informations sont optionnelles.
exemple :
Sep 14 14:09:09 machine_de_test dhcp service[warning] 110 corps du message
Le format de ces messages n'a été que formalisé que tard et ce format n'est qu'indicatif suivant la RFC 3164 initiale, tandis que la RFC 3195 suivante propose un formatage plus strict. Ce n'est que par la RFC 5424 qu'un format standard suivant une définition ABNF est normalisé. Il en résulte des problématique sur l’interprétation des données par les serveurs réceptionnant ces messages.

### Niveau de priorité

La priorité du message permet de déterminer la catégorie et la gravité du journal, elle est entre chevrons dans le journal syslog : priorité = (catégorie × 8) + gravité.
Cette indication est particulièrement importante car elle normalise de fait la représentation de la catégorie et de la gravité d'un log, ce qui rend par exemple possible l'interopérabilité entre équipements de collecte de journaux et équipements de génération d'alertes.

#### Catégories

Les messages sont orientés au regard de leur origine, dont les codes sont regroupés suivant 24 types ci-dessous énumérés :
Codes de catégorie :
| Code | Mot-clé | Description |
| 0 | kern | messages du noyau |
| 1 | user | messages de l'espace utilisateur |
| 2 | mail | messages du système de messagerie |
| 3 | daemon | messages des processus d'arrière plan |
| 4 | auth | messages d'authentification |
| 5 | syslog | messages générés par syslogd lui-même |
| 6 | lpr | messages d'impressions |
| 7 | news | messages d'actualités |
| 8 | uucp | messages UUCP |
| 9 | cron | Taches planifiées (at/cron) |
| 10 | authpriv | sécurité / élévation de privilèges |
| 11 | ftp | logiciel FTP |
| 12 | ntp | Synchronisation du temps NTP |
| 13 | security | log audit |
| 14 | console | log alert |
| 15 | solaris-cron | Taches planifiées (at/cron) |
| 16 | local0 | Utilisation locale libre 0 (local0) |
| 17 | local1 | Utilisation locale libre 1 (local1) |
| 18 | local2 | Utilisation locale libre 2 (local2) |
| 19 | local3 | Utilisation locale libre 3 (local3) |
| 20 | local4 | Utilisation locale libre 4 (local4) |
| 21 | local5 | Utilisation locale libre 5 (local5) |
| 22 | local6 | Utilisation locale libre 6 (local6) |
| 23 | local7 | Utilisation locale libre 7 (local7) |
Les catégories 9 et 15 sont toutes deux destinées à la gestion des tâches planifiées, aussi certains systèmes d'exploitation journalisent sur l'un ou l'autre, ou les deux catégories en même temps. Il en va de même pour les catégories auth, authpriv, log audit et log alert pour l'authentification et les autorisations utilisateurs.

#### Niveau de gravité

Les niveaux de gravité Syslog, appelés Severity level en anglais sont au nombre de huit représentés par un chiffre de 0 (Emergency) à 7 (Debug) :
Codes de gravité :
| Code | Gravité | Mot-clé | Description |
| 0 | Emergency | emerg (panic) | Système inutilisable. |
| 1 | Alert | alert | Une intervention immédiate est nécessaire. |
| 2 | Critical | crit | Erreur critique pour le système. |
| 3 | Error | err (error) | Erreur de fonctionnement. |
| 4 | Warning | warn (warning) | Avertissement (une erreur peut intervenir si aucune action n'est prise). |
| 5 | Notice | notice | Événement normal méritant d'être signalé. |
| 6 | Informational | info | Pour information. |
| 7 | Debugging | debug | Message de mise au point. |

## L'écriture dans le journal syslog

La journalisation dans syslog (local ou distant) se fait via
* logger (commande Unix) pour les scripts shell
* vsyslog ou syslog pour les programmes compilés ; ce sont des fonctions implémentées dans des bibliothèques logicielles

## Fichier de configuration (syslog.conf)

À l'origine, le fichier de configuration syslog était construit sur le mode ligne, chaque ligne était découpée en deux parties :
* la première indique l'origine du message
* la seconde la destination
Ce fichier de configuration permet de différencier les messages et de les orienter vers des destinations particulières.
Dans les versions récentes (rsyslog, syslog-ng, nxlog ...), la configuration est plus évoluée et permet des filtrages plus élaborés, bien que dans certains cas la configuration basique soit encore utilisée.

### Origine

Les origines peuvent être multiples et sont juxtaposées à l'aide d'un ';'.
Elles sont construites sous la forme :
La criticité doit être comprise comme la criticité minimale, ainsi user.crit correspond au message d'origine utilisateur pour le niveau de criticité critical et les niveaux supérieurs, en l'occurrence alert et emergency.
Le mot clef "none" peut lui aussi être utilisé afin de filtrer les messages, il est alors utilisé en lieu et place de la criticité.

### Destination

Dans syslog classique, la destination peut être soit un fichier soit un serveur distant. La destination peut être précédé d'un - afin d'indiquer la finalité de celle-ci. Le signe « - » est utilisé devant les chemins de fichiers les moins critiques pour améliorer les performances en écriture (pas de synchronisation des fichiers) au risque de perdre des données en cas de crash du système.

### Exemple

Extrait d'une partie d'un fichier de configuration :