Registre de dimonis. Logging. Syslog

De Wikijoan
Dreceres ràpides: navegació, cerca

[Sergi Tur]

Com hem comentat anteriorment, una de les caracterítiques principals dels dimonis és que no tenen una interfície directa amb els usuaris. Què passa doncs si volem notificar errors o enregistrar esdeveniments del dimoni?

En aquests casos és quan entra en joc el registre del sistema Syslog. Els sistemes Unix tenen un servei centralitzat de registre (logging en angles) on podem notificar els errors o esdeveniments del nostres dimonis. Syslog és una utilitat client-servidor que permet a les aplicacions (clients) enregistrar els seus esdeveniments en un fitxer centralitzat (servidor). Els missatges són guardats al servidor en diferents fitxers segons la configuració del fitxer /etc/syslog.conf.

El fitxer include:

/usr/include/syslog.h

Ens proporciona les següents funcions:

void openlog(char *ident, int option, int facility); 

void syslog(int priority, char *format, ...); 

void closelog(void);

La funció openlog() crea una connexió amb syslog. La cadena de caràcters ident és afegida a cada missatge i correspon normalment al nom del dimoni. Això permet identificar quines línies del registre pertanyen al nostre dimoni en el cas que compartim el registre amb altres aplicacions. El paràmetre option permet fer el log a la consola en cas d'error. L'argument facility classifica el tipus de programa o dimoni que estem executant. Per defecte LOG_USER.

La funció syslog() és l'encarregada d'afegir un missatge al registre. Els arguments són similars als de la funció printf() amb excepció de %m que serà reemplaçat pel missatge d'error per al valor actual de errno. El paràmetre priority indica la importància del missatge.

La funció closelog tanca la connexió amb syslog. És opcional.

Les utilitats de syslog estan incorporades al paquet libc6-dev:

$ dpkg -S /usr/include/syslog.h
libc6-dev: /usr/include/syslog.h

[Joan Q] Bé doncs, el nostre dimoni echod.c fa servir el syslog per notificar al sistema tot allò que va passant. Per ex,

syslog(LOG_INFO,"S'ha rebut del client el següent String:%s\n", buf);

Com visualitzo aquesta informació? Per veure les últimes entrades puc fer servir

$gedit /var/log/syslog
$gedit /var/log/syslog.0
Nov  3 00:24:41 ubuntu echod: S'ha rebut del client el següent String:hola 

De fet, el syslog és un servidor de logs, que s'està executant:

/var/log$ ps aux | grep syslogd
syslog    4741  0.0  0.0   1936   684 ?        Ss   00:21   0:00 /sbin/syslogd -u syslog

el fitxer de configuració està a /etc/syslog.conf

https://help.ubuntu.com/community/LinuxLogFiles

Log Rotation

When viewing directory listings in /var/log or any of its subdirectories, you may encounter log files with names such as daemon.log.0, daemon.log.1.gz, and so on. What are these log files? They are 'rotated' log files. That is, they have automatically been renamed after a predefined time-frame, and a new original log started. After even more time the log files are compressed with the gzip utility as in the case of the example daemon.log.1.gz. The purpose of log rotation is to archive and compress old logs so that they consume less disk space, but are still available for inspection as needed. What handles this functionality? Why, the logrotate command of course! Typically, logrotate is called from the system-wide cron script /etc/cron.daily/logrotate, and further defined by the configuration file /etc/logrotate.conf. Individual configuration files can be added into /etc/logrotate.d (where the apache2 and mysql configurations are stored for example).

This guide will not cover the myriad of ways logrotate may be configured to handle the automatic rotation of any log file on your Ubuntu system. For more detail, check the Resources section of this guide.

Per veure el final del fitxer:

$ tail syslog
$ tail -n 20 syslog

També podem veure el principi, o tot el fitxer amb paginació,...

$ head example.log
$ less example.log

Però el que pot ser més interessant per al nostre cas és la possibilitat de veure un fitxer que està canviant

Also, the -f ("follow") switch puts tail into a loop, constantly waiting for new additions to the file it's displaying. This is useful for monitoring files that are being updated in real time:

<pre>
tail -f syslog

Per cercar dins el fitxer fer servir el grep:

grep "echod" syslog | less


Press Ctrl+C to quit the loop. </pre>

A Ubuntu hi ha una eina gràfica, Visor de Sucesos del Sistema, que facilita bastant tota aquesta tasca.

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines