Rotar archivos de logs con newsyslog en OpenBSD

Escrito por Adrian Ali el 27 de septiembre de 2022, usando OpenBSD Release 7.2 contacto: adrianali arroba fortix.com.ar

Índice

1. Introducción
2. Archivo de configuración
3. Rotar logs propios
3.1. Cabecera en los nuevos archivos de logs
4. Rotación en el planificador de tareas
5. Referencias

1. Introducción

Así como en Linux existe la conocida herramienta de rotación de logs llamada logrotate, en OpenBSD esa herramienta se llama newsyslog. En el shell para obtener información de la misma ejecutamos el siguiente comando:

man newsyslog

2. Archivo de configuración

Su archivo de configuración es:

/etc/newsyslog.conf

cada linea en el archivo de configuración a excepción de las comentadas con carácter '#' , representa la ejecución de una rotación de un archivo de log, ejemplo:

puffy ~ # cat /etc/newsyslog.conf 
#       $OpenBSD: newsyslog.conf,v 1.38 2022/01/05 18:34:23 deraadt Exp $
#
# configuration file for newsyslog
#
# logfile_name          owner:group     mode count size when  flags
/var/cron/log           root:wheel      600  3     10   *     Z
/var/log/authlog        root:wheel      640  7     *    168   Z
/var/log/daemon                         640  5     300  *     Z
/var/log/lpd-errs                       640  7     10   *     Z
/var/log/maillog                        640  7     *    24    Z
/var/log/messages                       644  5     300  *     Z
/var/log/secure                         600  7     *    168   Z
/var/log/wtmp                           644  7     *    $M1D4 B "" 
/var/log/xferlog                        640  7     250  *     Z
/var/log/pflog                          600  3     250  *     ZB "pkill -HUP -u root -U root -t - -x pflogd" 
/var/www/logs/access.log                644  4     *    $W0   Z "pkill -USR1 -u root -U root -x httpd" 
/var/www/logs/error.log                 644  7     250  *     Z "pkill -USR1 -u root -U root -x httpd" 
puffy ~ #

3. Rotar nuestros propios logs

Si nosotros con nuestros propios programas generamos logs lo podemos rotar agregando una linea al archivo de configuración, ejemplo:

/var/log/wireguard.log 644 12 * $W0 Z

descripción de los campos:

logfile_name.: El nombre del archivo a rotar con un camino absoluto.
owner:group..: Si queremos que el nuevo archivo que se genera al rotar el viejo tenga un dueño y grupo particular.
mode.........: Los permisos a configurar en el nuevo archivo de log en notación octal de tres dígitos UNIX.
count........: La cantidad de logs viejos a guardar.
size.........: El limite de tamaño del archivo en KiB que al superarlo se rota. Si se pone asterisco se toma el siguiente parámetro para rotar.
when.........: Cuando rotar en formato ISO 8601 restricted time format. Ver 'man newsyslog' para ejemplos.
flags........: Opciones de tratamiento a los logs viejos, ejemplo 'Z' comprime con gzip, mas opciones en 'man newsyslog'.

El último campo es opcional y se usa para ejecutar un comando al rotar el archivo.

3.1. Cabecera en los nuevos archivos de logs

Cuando newsyslog rota un archivo, generando un nuevo archivo de log, el mismo no esta vacío inicialmente, tiene una linea del tipo:

puffy ~ root # cat /var/log/rspamd/rspamd.log
2023-10-16T22:00:01.585Z telchar newsyslog[34067]: logfile turned over
puffy ~ root #                                                             

fijarse que newsyslog en esa primera linea avisa que el archivo de log nuevo esta listo, mostrando ademas un tiempo en el estándar ISO 8601 extendido, tanto para la fecha como para la hora.

4. Rotación en el planificador de tareas

El programa o comando newsyslog que es el encargado de rotar los logs, es ejecutado cada hora por una entrada en el crontab del usuario root, la misma es:

puffy ~ root # crontab -l | grep newsyslog
0       *       *       *       *       /usr/bin/newsyslog
puffy ~ root #

5. Referencias

man newsyslog

wikipedia ISO 8601