Herramientas de usuario

Herramientas del sitio


informatica:certificaciones:lpic:lpic-1:108_essential_system_services:108.2_system_logging

108.2 System logging

Pertenece a Topic 108: Essential System Services

  • Weight: 4
  • Description: Candidates should be able to configure rsyslog. This objective also includes configuring the logging daemon to send log output to a central log server or accept log output as a central log server. Use of the systemd journal subsystem is covered. Also, awareness of syslog and syslog-ng as alternative logging systems is included.
  • Key Knowledge Areas:
    • Basic configuration of rsyslog.
    • Understanding of standard facilities, priorities and actions.
    • Query the systemd journal.
    • Filter systemd journal data by criteria such as date, service or priority.
    • Configure persistent systemd journal storage and journal size.
    • Delete old systemd journal data.
    • Retrieve systemd journal data from a rescue system or file system copy.
    • Understand interaction of rsyslog with systemd-journald.
    • Configuration of logrotate.
    • Awareness of syslog and syslog-ng.
  • The following is a partial list of the used files, terms and utilities:
    • /etc/rsyslog.conf
    • /var/log/
    • logger
    • logrotate
    • /etc/logrotate.conf
    • /etc/logrotate.d/
    • journalctl
    • systemd-cat
    • /etc/systemd/journald.conf
    • /var/log/journal/

System Log Files

Linux mantiene cada día una gran variedad de registros de logs sobre el estado del sistema. Para ello, hay un daemon corriendo que es el rsyslogd que hace que todo el sistema de registros funcione bien.

Los logs se guardan en /var/log/.

Rsyslog se encarga de recoger los avisos de los diferentes servicios y redirigirlos a los archivos o dispositivos correspondientes.

La configuración de dicho daemon se realiza en /etc/rsyslog.conf

Cada entrada del fichero consiste en diferentes reglas que incluyen un selector y una acción.

Cada selector es una combinación de una facility (servicio) y una prioridad, separados por un punto

Ejemplos:

# Los archivos de prioridad "info" y superiores se deben guardar en /var/log/mail.info:
mail.info /var/log/mail.info

# Guarda todos los mensajes de nivel "debug" en el fichero /var/log/debug:
*.=debug /var/log/debug
Facility Uso
auth / security Sistema de autenticación, incluyendo login, su y getty
authpriv Programas de autorización privados
cron cron y at
daemon Demonios del sistema
ftp Demonio de ftp
kern Mensajes generados por el kernel
local0-7 Reservado para uso local
lpr Sistema de impresión
mail Sistema de mail
mark Mensajes internos de syslogd (no usable por aplicaciones)
news Sistema de news en la red
syslog Mensajes del demonio de syslog
user Aplicaciones de usuario
uucp Sistema UUCP
* Todas las facilities menos mark
Prioridad Uso
debug (7) Mensajes generados en la depuración de un programa
info (6) Mensajes informativos
notice (5) Mensajes no críticos que requieren investigación adicional
warning (4) Mensajes de aviso
err (3) Otros errores
crit (2) Condiciones críticas como errores hardware
alert (1) Condiciones que se deberían resolver rápidamente
emerg (0) Condiciones de pánico muy importantes
none Bloquea un facility
Acción Uso
fichero Ruta absoluta al fichero donde se guardan los mensajes
/dev/ttX Escribe los mensajes en el terminal
@host o @ip Host remoto donde su syslogd recoge los mensajes
:omusrmsg:user1 & user2 Escribe los mensajes a los usuarios si están conectados
:omusrmsg:*
Símbolo Uso
, Define varias facilities para una misma prioridad
; Permite definir varios selectores para una misma accion
= Especifica sólo una prioridad y no las superiores
! Ignorar esa prioridad
* Todas las facilities o prioridades

Ejemplos del fichero /etc/rsyslog.conf:

auth,authpriv.*       /var/log/auth.log

Tanto auth como authpriv, en todos los niveles de prioridad irán al fichero /var/log/auth.log

mail.info              /var/log/mail.info
mail.warn              /var/log/mail.warn
mail.err               /var/log/mail.err

Los mensajes de información relacionados con el correo irán a /var/log/mail.info, los de aviso a /var/log/mail.warn y los de error a /var/log/mail.err

Dependiendo de la distribución Linux, tendríamos los siguientes ficheros:

  • /var/log/messages: logs que llegan con prioridad info (información), notice (notificación) o warn (aviso). En Debian sería /var/log/syslog
  • /var/log/kern.log: aquí se almacenan los logs del kernel generados por klogd
  • /var/log/auth.log: aquí se almacenan los login en el sistema, las veces que hacemos su, etc. Los intentos fallidos se registran con información del tipo invalid password o authentication failure. En Red Hat sería /var/log/secure.
  • /var/log/dmesg: se almacena

logger

El comando logger nos permite enviar mensajes al sistema de logs del sistema.

logger [opciones] [-p prioridad] [mensaje]

Envía un mensaje con nivel “err” al sistema de mail:

logger -p mail.err "Prueba de mail.err"

La opción -p imprime un mensaje en subsistema llamado mail.err

Podemos verificarlo mirando en /var/log/syslog o /var/log/mail.err.

Registra el mensaje del fichero /etc/motd en “auth.notice”, poniéndole una etiqueta TEST:

logger -p auth.notice -t TEST -f /etc/motd

Una posible salida del comando anterior es que en /var/log/syslog se vería:

Apr 22, 12:10.10 Debian11 TEST ...

Systemd journal

El proceso que gestiona las notificaciones de sistema en systemd es systemd-journal y tiene una herramienta para gestionarlo que es journalctl.

Esta herramienta genera sus logs de forma independiente a rsyslog y por defecto no los guarda en ficheros sino que se consultan en tiempo de ejecución, aunque podemos forzar su volcado a ficheros.

Con esta herramienta podemos consultar todos los registros o hacer consultas específicas.

Al ejecutarlo, entramos en su interfaz propio y nos permite navegar por los logs desde el principio, como si fuera un less.

  • journalctl: inicia la herramienta
  • journalctl -e: nos manda directamente al final del log
  • journalctl -x: añade explicaciones a cada línea
  • journalctl --list-boots: muestra los inicios o reinicios
  • journalctl --since "2017-08-16 18:46:30" --until "2017-08-16 18:55:00": filtrar los datos por fecha
  • journalctl -u <NOMBRE_SERVICIO>: filtramos las entradas por servicio (journalctl -u sshd.service)
  • journalctl -t <FACILITY>: filtramos por una facility (cron, mail, lpr…)
  • journalctl -f: añade las nuevas entradas (como tail -f)
  • journalctl -p err: filtramos las entradas por prioridad “err”.
  • journalctl --disk-usage: muestra es espacio ocupado por logs
  • journalctl -k: muestra solo mensajes del kernel (como con el comando dmesg)
  • journalctl -g "<PATRON>": busca según un patrón (soporta regex)

Cuando vemos el estado de un servicio con systemctl status, las últimas líneas corresponden a mensajes del journal de Systemd relacionado con dicho servicio.

Combinaciones:

journalctl --since '5 min ago' -u sshd.service

Más información sobre journalctl en 101.2 Boot the system

systemd-cat

Similar a logger, pero para systemd.

echo 'hola1' | systemd-cat -p info
echo 'hola2' | systemd-cat -p warning
echo 'hola3' | systemd-cat -p emerg

Podemos ir viendo que se va registrando en el journal con:

journalctl -f

Logrotate

Este servicio se encarga de gestionar cómo se generan y se almacenan los logs del sistema para evitar que crezcan desmesuradamente. logrotate los divide, comprime y guarda copias.

El archivo de configuración principal es /etc/logrotate.conf, aunque cada servicio suele tener su propia configuración en /etc/logrotate.d/

El funcionamiento es por medio de un script, alojado en /etc/cron.daily/logrotate por lo que la ejecución del script depende de cron.

Parámetros de configuración importantes de logrotate:

  • rotate [num]: número de copias rotadas que se conservan
  • compress: comprimir copias antiguas
  • delaycompress: deja la mas reciente sin comprimir
  • hourly/weekly/monthly/yearly: periodicidad de la rotación
  • maxsize/minsize [tam]: tamaño que pueden alcanzar antes de rotar
  • minage/maxage [num]: rota los logs con ese numero de dias
  • missingok: permite que el log no exista para crearlo
  • mail [direccion]: notifica por mail cuando se rota el log
  • postrotate: indica qué acción se ejecutará cuando se haga la rotación del log.
  • dateext: usa la fecha como sufijo en el fichero rotado.

Si queremos forzar la rotación:

logrotate -f /etc/logrotate.conf

Configuración rsyslog remoto a través de UDP

Editamos /etc/rsyslog.conf

# Providees UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

Reiniciamos el servicio:

systemctl restart rsyslog.service

Si miramos las conexiones abiertas, veremos el servicio de rsyslogd corriendo en el puerto 514:

netstat -putan | grep 514

Ahora tendríamos que configurar los logs de las máquinas de nuestro interés para que lo escriban en el rsyslog remoto. El /etc/rsyslog.conf de los clientes, tendríamos que ir a la sección “RULES” e indicar que sus registros vayan a sí mismo y a otro servidor:

*info;mail.none;authpriv.none;cron.none     /var/log/messages
                                            @192.168.1.10
                                            
authpriv.*                                  /var/log/secure
                                            @192.168.1.10                                            

Si la configuración se hubiese hecho con TCP, para indicar el rsyslog remoto se emplearían dos signos @@ en lugar de uno.

En ese momento, si un usuario inicia sesión en ese cliente, el registro quedará en ese cliente, pero también se enviará al servidor.

Con esta configuración, la información se envía en texto plano, sin cifrar. Es posible usar TLS.

informatica/certificaciones/lpic/lpic-1/108_essential_system_services/108.2_system_logging.txt · Última modificación: por tempwin