108.2 Lección 1
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
108 Servicios Esenciales del Sistema |
Objetivo: |
108.2 Registros del sistema |
Lección: |
1 de 2 |
Introducción
Los registros pueden ser el mejor amigo
de un administrador de sistemas. Son
archivos (normalmente de texto) en los que
se registran cronológicamente todos los
eventos del sistema y de la red desde el
momento en que se inicia. Así, la gama de
información que se puede encontrar en los
registros incluye prácticamente todos los
aspectos del sistema: intentos fallidos de
autenticación, errores de programas y
servicios, hosts bloqueados por el
cortafuegos, etc. Como puedes imaginar,
los registros facilitan mucho la vida de
los administradores de sistemas a la hora
de solucionar problemas, comprobar
recursos, detectar comportamientos
anómalos de los programas, etc. En este
tema discutiremos una de las facilidades
de registro más comunes que se encuentran
actualmente en las distribuciones de
GNU/Linux: rsyslog
.
Estudiaremos los diferentes tipos de logs
que existen, dónde se almacenan, qué
información incluyen y cómo se puede
obtener y filtrar esa información. También
discutiremos cómo se pueden mantener los
logs en servidores centralizados a través
de redes IP, la rotación de logs y el ring
buffer del kernel.
Registro del sistema
En el momento en que el kernel y los diferentes procesos de tu sistema comienzan a ejecutarse y a comunicarse entre sí, se genera mucha información en forma de mensajes (que en su mayoría) se envían a los registros.
Sin los registros, la búsqueda de un evento ocurrido en un servidor supondría un dolor de cabeza para los administradores del sistema, de ahí la importancia de contar con una forma estandarizada y centralizada de realizar un seguimiento de cualquier suceso del sistema. Los registros son determinantes y reveladores cuando se trata de la resolución de problemas y la seguridad, y son fuentes de datos fiables para entender las estadísticas del sistema y hacer predicciones de tendencias.
Dejando de lado systemd-journald
(del que hablaremos en el próximo tema),
el registro ha sido tradicionalmente
manejado por tres servicios principales
dedicados: syslog
, syslog-ng
(syslog new generation) y rsyslog
("`the rocket-fast system for log
processing"). El rsyslog
aportó importantes mejoras (como el
soporte de RELP) y se ha convertido en
la opción más popular hoy en día. Cada
uno recoge mensajes de otros servicios y
programas, y los almacena en archivos de
registro, normalmente en /var/log
.
Sin embargo, algunos servicios se
encargan de sus propios registros (por
ejemplo, el servidor web Apache HTTPD o
el sistema de impresión CUPS). Asimismo,
el kernel de Linux utiliza el ring
buffer para almacenar sus mensajes de
registro.
Note
|
|
Dado que rsyslog
se ha
convertido en la instalación de registro
estándar oficial en las
principales distros, nos centraremos en
ella para el presente tema. rsyslog
utiliza un modelo cliente-servidor. El
cliente y el servidor pueden estar en el
mismo host o en diferentes máquinas. Los
mensajes son enviados y recibidos en un
formato particular y pueden ser
guardados en servidores centralizados de
rsyslog
a través de la red.
El demonio de rsyslog — rsyslogd
— trabaja junto con klogd
(que gestiona los mensajes del kernel).
En las próximas secciones se hablará de
rsyslog
y su
infraestructura de registro.
Note
|
Un demonio es un servicio que se ejecuta en segundo plano. Tenga en cuenta la "d" final en los nombres de los demonios: "klogd" o "rsyslogd". |
Tipos de registros
Como los registros son datos variables,
normalmente se encuentran en /var/log
.
A grandes rasgos, se pueden clasificar
en registros de sistema y registros
de servicio o programa.
Veamos algunos registros del sistema
y la información que guardan:
/var/log/auth.log
Actividades relacionadas con los
procesos de autenticación: usuarios
registrados, información sudo
,
trabajos cron, intentos fallidos de
inicio de sesión, etc.
/var/log/syslog
-
Es un archivo centralizado para prácticamente todos los registros capturados por
rsyslogd
. Debido a que incluye tanta información, los registros se distribuyen a través de otros archivos de acuerdo con la configuración suministrada en/etc/rsyslog.conf
. /var/log/debug
-
Información de depuración de programas.
/var/log/kern.log
-
Mensajes de kernel.
/var/log/messages
-
Mensajes informativos que no están relacionados con el kernel sino con otros servicios. También es el destino por defecto del registro del cliente remoto en una implementación de servidor de registro centralizado.
/var/log/daemon.log
-
Información relacionada con los demonios o servicios que se ejecutan en segundo plano.
/var/log/mail.log
-
Información relacionada con el servidor de correo electrónico, por ejemplo, postfix.
/var/log/Xorg.0.log
-
Información relacionada con la tarjeta gráfica.
/var/run/utmp
and/var/log/wtmp
-
Registros de acceso exitosos.
/var/log/btmp
-
Intentos fallidos de inicio de sesión, por ejemplo, ataque de fuerza bruta a través de ssh.
/var/log/faillog
-
Intentos de autenticación fallidos.
/var/log/lastlog
-
Fecha y hora de los últimos inicios de sesión de los usuarios.
Veamos ahora algunos ejemplos de registros de servicio:
/var/log/cups/
-
Directorio para los registros del Sistema de impresión (Common Unix Printing System). Normalmente incluye los siguientes archivos de registro por defecto:
error_log
,page_log
yaccess_log
. /var/log/apache2/
or/var/log/httpd
-
Directorio para los registros del Servidor Web Apache. Normalmente incluye los siguientes archivos de registro por defecto:
access.log
,error_log
, yother_vhosts_access.log
. /var/log/mysql
-
Directorio para los registros del Sistema de Gestión de Bases de Datos Relacionales MySQL. Suele incluir los siguientes archivos de registro por defecto:
error_log
,mysql.log
ymysql-slow.log
. /var/log/samba/
-
Directorio para los registros del protocolo Session Message Block (SMB). Suele incluir los siguientes archivos de registro por defecto:
log.
,log.nmbd
andlog.smbd
.
Note
|
El nombre exacto y el
contenido de los archivos de
registro pueden variar según
la distribución de Linux.
También hay registros
particulares de
distribuciones específicas
como |
Leyendo registros
Para leer los archivos de registro, primero asegúrese de que es el usuario root o de que tiene permisos de lectura sobre el archivo. Puede utilizar una variedad de utilidades como:
less
omore
-
Permiten ver y desplazarse por una página a la vez:
root@debian:~# less /var/log/auth.log Sep 12 18:47:56 debian sshd[441]: Received SIGHUP; restarting. Sep 12 18:47:56 debian sshd[441]: Server listening on 0.0.0.0 port 22. Sep 12 18:47:56 debian sshd[441]: Server listening on :: port 22. Sep 12 18:47:56 debian sshd[441]: Received SIGHUP; restarting. Sep 12 18:47:56 debian sshd[441]: Server listening on 0.0.0.0 port 22. Sep 12 18:47:56 debian sshd[441]: Server listening on :: port 22. Sep 12 18:49:46 debian sshd[905]: Accepted password for carol from 192.168.1.65 port 44296 ssh2 Sep 12 18:49:46 debian sshd[905]: pam_unix(sshd:session): session opened for user carol by (uid=0) Sep 12 18:49:46 debian systemd-logind[331]: New session 2 of user carol. Sep 12 18:49:46 debian systemd: pam_unix(systemd-user:session): session opened for user carol by (uid=0) (...)
zless
orzmore
-
Lo mismo que
less
ymore
, pero utilizado para los registros que se comprimen congzip
(una función común delogrotate
):root@debian:~# zless /var/log/auth.log.3.gz Aug 19 20:05:57 debian sudo: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/sbin/shutdown -h now Aug 19 20:05:57 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0) Aug 19 20:05:57 debian lightdm: pam_unix(lightdm-greeter:session): session closed for user lightdm Aug 19 23:50:49 debian systemd-logind[333]: Watching system buttons on /dev/input/event2 (Power Button) Aug 19 23:50:49 debian systemd-logind[333]: Watching system buttons on /dev/input/event3 (Sleep Button) Aug 19 23:50:49 debian systemd-logind[333]: Watching system buttons on /dev/input/event4 (Video Bus) Aug 19 23:50:49 debian systemd-logind[333]: New seat seat0. Aug 19 23:50:49 debian sshd[409]: Server listening on 0.0.0.0 port 22. (...)
tail
-
Muestra las últimas líneas de un archivo (el valor por defecto es de 10 líneas). El poder de tail reside en el parámetro
-f
, que muestra dinámicamente las nuevas líneas a medida que se añaden:root@suse-server:~# tail -f /var/log/messages 2019-09-14T13:57:28.962780+02:00 suse-server sudo: pam_unix(sudo:session): session closed for user root 2019-09-14T13:57:38.038298+02:00 suse-server sudo: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/messages 2019-09-14T13:57:38.039927+02:00 suse-server sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0) 2019-09-14T14:07:22+02:00 debian carol: appending new message from client to remote server...
head
-
Ver las primeras líneas de un archivo (por defecto son 10 líneas):
root@suse-server:~# head -5 /var/log/mail 2019-06-29T11:47:59.219806+02:00 suse-server postfix/postfix-script[1732]: the Postfix mail system is not running 2019-06-29T11:48:01.355361+02:00 suse-server postfix/postfix-script[1925]: starting the Postfix mail system 2019-06-29T11:48:01.391128+02:00 suse-server postfix/master[1930]: daemon started -- version 3.3.1, configuration /etc/postfix 2019-06-29T11:55:39.247462+02:00 suse-server postfix/postfix-script[3364]: stopping the Postfix mail system 2019-06-29T11:55:39.249375+02:00 suse-server postfix/master[1930]: terminating on signal 15
grep
-
Utilidad de filtrado que permite buscar cadenas específicas:
root@debian:~# grep "dhclient" /var/log/syslog Sep 13 11:58:48 debian dhclient[448]: DHCPREQUEST of 192.168.1.4 on enp0s3 to 192.168.1.1 port 67 Sep 13 11:58:49 debian dhclient[448]: DHCPACK of 192.168.1.4 from 192.168.1.1 Sep 13 11:58:49 debian dhclient[448]: bound to 192.168.1.4 -- renewal in 1368 seconds. (...)
Como habrá notado, la salida se imprime en el siguiente formato:
-
Marca de tiempo
-
Nombre del host desde el que se originó el mensaje
-
Nombre del programa/servicio que ha generado el mensaje
-
El PID del programa que generó el mensaje
-
Descripción de la acción realizada
Hay algunos ejemplos en los que los registros no son de texto, sino archivos binarios, y por consiguiente, hay que utilizar comandos especiales para analizarlos:
/var/log/wtmp
-
Use
who
(orw
):root@debian:~# who root pts/0 2020-09-14 13:05 (192.168.1.75) root pts/1 2020-09-14 13:43 (192.168.1.75)
/var/log/btmp
-
Use
utmpdump
olast -f
:root@debian:~# utmpdump /var/log/btmp Utmp dump of /var/log/btmp [6] [01287] [ ] [dave ] [ssh:notty ] [192.168.1.75 ] [192.168.1.75 ] [2019-09-07T19:33:32,000000+0000]
/var/log/faillog
-
Use
faillog
:root@debian:~# faillog -a | less Login Failures Maximum Latest On root 0 0 01/01/70 01:00:00 +0100 daemon 0 0 01/01/70 01:00:00 +0100 bin 0 0 01/01/70 01:00:00 +0100 sys 0 0 01/01/70 01:00:00 +0100 sync 0 0 01/01/70 01:00:00 +0100 games 0 0 01/01/70 01:00:00 +0100 man 0 0 01/01/70 01:00:00 +0100 lp 0 0 01/01/70 01:00:00 +0100 mail 0 0 01/01/70 01:00:00 +0100 (...)
/var/log/lastlog
-
Use
lastlog
:root@debian:~# lastlog | less Username Port From Latest root Never logged in daemon Never logged in bin Never logged in sys Never logged in (...) sync Never logged in avahi Never logged in colord Never logged in saned Never logged in hplip Never logged in carol pts/1 192.168.1.75 Sat Sep 14 13:43:06 +0200 2019 dave pts/3 192.168.1.75 Mon Sep 2 14:22:08 +0200 2019
Note
|
También hay herramientas
gráficas para leer los
archivos de registro, por
ejemplo: |
¿Cómo se convierten los mensajes en registros?
El siguiente proceso ilustra cómo se escribe un mensaje en un archivo de registro:
-
Las aplicaciones, los servicios y el kernel escriben mensajes en archivos especiales (sockets y buffers de memoria), por ejemplo
/dev/log
o/dev/kmsg
. -
rsyslogd
obtiene la información de los sockets o buffers de memoria. -
Dependiendo de las reglas encontradas en
/etc/rsyslog.conf
y/o de los archivos en/etc/ryslog.d/
,rsyslogd
mueve la información al archivo de registro correspondiente (típicamente encontrado en/var/log
).
Note
|
Un socket es un archivo
especial utilizado para
transferir información entre
diferentes procesos. Para
listar todos los sockets de
su sistema, puede utilizar
el comando |
Facilidades, prioridades y acciones
El archivo de configuración de rsyslog
es /etc/rsylog.conf
(en
algunas distribuciones también puede
encontrar archivos de configuración en
/etc/rsyslog.d/
).
Normalmente se divide en tres
secciones: MODULES
, GLOBAL
DIRECTIVES
y RULES
.
Vamos a echarle un vistazo explorando
el fichero rsyslog.conf
en nuestro host Debian GNU/Linux 10
(buster) — para hacer esto puede usar
sudo less /etc/rsyslog.conf
.
MODULES
incluye el
soporte de módulos para el registro,
la capacidad de mensajes y la
recepción de registros UDP/TCP:
################# #### MODULES #### ################# module(load="imuxsock") # proporciona soporte para el registro del sistema local module(load="imklog") # proporciona soporte de registro del kernel #module(load="immark") # proporciona la capacidad de mensajes --MARK--. # proporciona la recepción de syslogs UDP #module(load="imudp") #input(type="imudp" port="514") # proporciona la recepción de syslogs TCP #module(load="imtcp") #input(type="imtcp" port="514")
GLOBAL DIRECTIVES
permiten configurar una serie de cosas
como los registros y los permisos del
directorio de registros:
########################### #### GLOBAL DIRECTIVES #### ########################### # # UtilicE el formato tradicional de marca de tiempo. # Para habilitar las marcas de tiempo de alta precisión, comenta la siguiente línea. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # # Establezca los permisos por defecto para todos los archivos de registro. # $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 # # Dónde colocar los archivos de spool y de estado # $WorkDirectory /var/spool/rsyslog # # Incluir todos los archivos de configuración en /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf
RULES
es donde entran
las facilidades, las prioridades
y las acciones. Las
configuraciones de esta sección le
dicen al demonio de registro que
filtre los mensajes de acuerdo con
ciertas reglas y los registre o envíe
cuando sea necesario. Para comprender
estas reglas, primero debemos explicar
los conceptos de facilidades y
prioridades de rsyslog
.
A cada mensaje de registro se le da un
número de facilidad y una
palabra clave que están asociados con
el subsistema interno de Linux que
produce el mensaje:
Número | Palabra clave | Descripción |
---|---|---|
|
|
Mensajes del kernel de Linux |
|
|
Mensajes a nivel de usuario |
|
|
Mensajes del sistema de correo |
|
|
Demonios del sistema |
|
|
Mensajes de seguridad/autorización |
|
|
Mensajes de syslogd |
|
|
Subsistema de impresión de línea |
|
|
Mensajes del subsitema de red |
|
|
Subsistema UUCP (Unix-to-Unix Copy Protocol) |
|
|
Demonio del reloj |
|
|
Mensajes de seguridad/autorización |
|
|
Demonio del FTP |
|
|
Demonio del NTP |
|
|
Registros de auditoría |
|
|
Registros de alertas |
|
|
Demonio del cron |
|
De |
Local utiliza 0 - 7 |
Además, a cada mensaje se le asigna un nivel de prioridad:
Código | Severidad | Palabra clave | Descripción |
---|---|---|---|
|
Emergency |
|
El sistema es inutilizable |
|
Alert |
|
Hay que actuar inmediatamente |
|
Critical |
|
Condiciones críticas |
|
Error |
|
Condiciones de error |
|
Warning |
|
Condiciones de advertencia |
|
Notice |
|
Condición normal pero significativa |
|
Informational |
|
Mensajes informativos |
|
Debug |
|
Mensajes de nivel de depuración |
Aquí hay un extracto de rsyslog.conf
de nuestro sistema Debian GNU/Linux 10
(buster) que incluye algunas reglas de
ejemplo:
############### #### RULES #### ############### # Primero algunos archivos de registro estándar. Registro por instalación. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log # # Registro para el sistema de correo. Dividirlo para que # sea fácil escribir scripts para analizar estos archivos. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # # Algunos archivos de registro "catch-all" # *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages
El formato de la regla es el
siguiente:`<facilidad>.<prioridad>`
<acción>
Los selectores <facilidad>.<prioridad>
filtran los mensajes que deben
coincidir. Los niveles de prioridad
son jerárquicamente inclusivos, lo que
significa que rsyslog coincidirá con
los mensajes de la prioridad
especificada y superiores. El selector
<acción>
muestra la
acción a realizar (dónde enviar el
mensaje de registro). Aquí hay algunos
ejemplos para mayor claridad:
auth,authpriv.* /var/log/auth.log
Independientemente de su prioridad (*
),
todos los mensajes de auth
or authpriv
serán
enviados a /var/log/auth.log
.
*.*;auth,authpriv.none -/var/log/syslog
Todos los
mensajes — independientemente de su
prioridad (*
) — de todas
las facilidades (*
) —
descartando los de auth
o authpriv
(de ahí el
sufijo .none
) — se
escribirán en /var/log/syslog
(el signo menos (-
) antes
de la ruta evita excesivas escrituras
en disco). Tenga en cuenta el punto y
coma (;
) para dividir el
selector y la coma (,
)
para concatenar dos instalaciones en
la misma regla (auth,authpriv
).
mail.err /var/log/mail.err
Los mensajes de la instalación de mail
con un nivel de prioridad de error
o superior (crítico
, alerta
o emergencia
) se
enviarán a /var/log/mail.err
.
*.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug
Los mensajes de todas las
instalaciones con la prioridad debug
y ninguna otra (=
) se
escribirán en /var/log/debug
— excluyendo cualquier mensaje
procedente de las instalaciones auth
,
authpriv
, news
y mail
(nótese la
sintaxis: ;\
).
Entradas
manuales en el registro del sistema: logger
El comando logger
es
muy útil para los scripts de la
shell o para propósitos de prueba.
El comando logger
agregará cualquier mensaje que
reciba a /var/log/syslog
(o a /var/log/messages
cuando se registre en un servidor de
registro central remoto, como se
verá más adelante en esta lección):
carol@debian:~$ logger this comment goes into "/var/log/syslog"
Para imprimir la última línea en /var/log/syslog
,
utilice el comando tail
con la opción -1
:
root@debian:~# tail -1 /var/log/syslog Sep 17 17:55:33 debian carol: this comment goes into /var/log/syslog
rsyslog
como servidor central de registros
Para explicar este tema vamos a añadir un nuevo host a nuestra configuración. La disposición es la siguiente:
Role | Hostname | S.O | IP Address |
---|---|---|---|
Central Log Server |
|
openSUSE Leap 15.1 |
192.168.1.6 |
Client |
|
Debian GNU/Linux 10 (buster) |
192.168.1.4 |
Empecemos por configurar el servidor.
En primer lugar, nos aseguramos de que
rsyslog
este en
funcionamiento:
root@suse-server:~# systemctl status rsyslog rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-09-17 18:45:58 CEST; 7min ago Docs: man:rsyslogd(8) http://www.rsyslog.com/doc/ Main PID: 832 (rsyslogd) Tasks: 5 (limit: 4915) CGroup: /system.slice/rsyslog.service └─832 /usr/sbin/rsyslogd -n -iNONE
openSUSE incluye un archivo de
configuración dedicado al registro
remoto: /etc/rsyslog.d/remote.conf
.
Vamos a activar la recepción de
mensajes de los clientes (hosts
remotos) a través de TCP. Debemos
descomentar las líneas que cargan el
módulo e inician el servidor TCP en el
puerto 514:
# ######### Recepción de mensajes de hosts remotos ########## # TCP Syslog Server: # provides TCP syslog reception and GSS-API (if compiled to support it) $ModLoad imtcp.so # load module ##$UDPServerAddress 10.10.0.1 # force to listen on this IP only $InputTCPServerRun 514 # Starts a TCP server on selected port # UDP Syslog Server: #$ModLoad imudp.so # provides UDP syslog reception ##$UDPServerAddress 10.10.0.1 # force to listen on this IP only #$UDPServerRun 514 # start a UDP syslog server at standard port 514
Una vez hecho esto, debemos reiniciar el servicio rsyslog y comprobar que el servidor está escuchando en el puerto 514:
root@suse-server:~# systemctl restart rsyslog root@suse-server:~# netstat -nltp | grep 514 [sudo] password for root: tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 2263/rsyslogd tcp6 0 0 :::514 :::* LISTEN 2263/rsyslogd
A continuación, debemos abrir los puertos en el firewall y recargar la configuración:
root@suse-server:~# firewall-cmd --permanent --add-port 514/tcp success root@suse-server:~# firewall-cmd --reload success
Note
|
Con la llegada de openSUSE
Leap 15.0, |
Plantillas y condiciones de filtrado
Por defecto, los registros del
cliente se escribirán en el archivo
/var/log/messages
del
servidor, junto con los del propio
servidor. Sin embargo, crearemos una
plantilla y una condición
de filtro para que los
registros de nuestro cliente se
almacenen en directorios propios.
Para ello, añadiremos lo siguiente a
/etc/rsyslog.conf
(o /etc/rsyslog.d/remote.conf
):
$template RemoteLogs,"/var/log/remotehosts/%HOSTNAME%/%$NOW%.%syslogseverity-text%.log" if $FROMHOST-IP=='192.168.1.4' then ?RemoteLogs & stop
- Template
-
La plantilla corresponde a la primera línea y permite especificar un formato para los nombres de registro mediante la generación dinámica de nombres de archivo. Una plantilla se compone de:
-
Directiva de plantillas (
$template
) -
Nombre de la plantilla (
RemoteLogs
) -
Texto de la plantilla (
"/var/log/remotehosts/%HOSTNAME%/%$NOW%.%syslogseverity-text%.log"
) -
Opciones (optional)
-
Nuestra plantilla se llama RemoteLogs
y su texto consiste en una ruta en /var/log
.
Todos los registros de nuestro host
remoto irán al directorio remotehosts
,
donde se creará un subdirectorio
basado en el nombre del host de la
máquina (%HOSTNAME%
).
Cada nombre de archivo en este
directorio consistirá en la fecha (%$NOW%
),
la gravedad (también conocida como
prioridad) del mensaje en formato de
texto (%syslogseverity-text%
)
y el sufijo .log
. Las
palabras entre los signos de
porcentaje son propiedades
y permiten acceder al contenido del
mensaje de registro (fecha,
prioridad, etc.). Un mensaje syslog
tiene una serie de propiedades bien
definidas que pueden utilizarse en
las plantillas. A estas propiedades
se accede -y se pueden modificar-
mediante el llamado reemplazador
de propiedades que implica
escribirlas entre signos de
porcentaje.
- Condición del filtro
-
Las dos líneas restantes corresponden a la condición del filtro y su acción asociada:
-
Filtro basado en expresiones (
if $FROMHOST-IP=='192.168.1.4'
) -
Acción (
then ?RemoteLogs
,& stop
)
-
La primera línea comprueba la
dirección IP del host remoto que
envía el registro y — si es igual a
la de nuestro cliente
Debian — aplica la plantilla RemoteLogs
.
La última línea (& stop
)
garantiza que los mensajes no se
envían simultáneamente a /var/log/messages
(sino sólo a los ficheros del
directorio /var/log/remotehosts
).
Note
|
Para saber más sobre
plantillas, propiedades y
reglas, puedes consultar
la página del manual de |
Con la configuración actualizada,
reiniciaremos rsyslog
de nuevo y confirmaremos que aún no
existe el directorio remotehosts
en /var/log
:
root@suse-server:~# systemctl restart rsyslog root@suse-server:~# ls /var/log/ acpid chrony localmessages pbl.log Xorg.0.log alternatives.log cups mail pk_backend_zypp Xorg.0.log.old apparmor firebird mail.err samba YaST2 audit firewall mail.info snapper.log zypp boot.log firewalld mail.warn tallylog zypper.log boot.msg krb5 messages tuned boot.omsg lastlog mysql warn btmp lightdm NetworkManager wtmp
El servidor ya está configurado. A continuación, configuraremos el cliente.
De nuevo, debemos asegurarnos de
que rsyslog
está
instalado y funcionando:
root@debian:~# sudo systemctl status rsyslog rsyslog.service - System Logging Service Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: Active: active (running) since Thu 2019-09-17 18:47:54 CEST; 7min ago Docs: man:rsyslogd(8) http://www.rsyslog.com/doc/ Main PID: 351 (rsyslogd) Tasks: 4 (limit: 4915) CGroup: /system.slice/rsyslog.service └─351 /usr/sbin/rsyslogd -n
En nuestro entorno de ejemplo hemos
implementado la resolución de
nombres en el cliente añadiendo la
línea 192.168.1.6 suse-server
a /etc/hosts
. Así
podemos referirnos al servidor tanto
por su nombre (suse-server
)
como por su dirección IP (192.168.1.6
).
Nuestro cliente Debian no viene con
un fichero remote.conf
en /etc/rsyslog.d/
,
así que aplicaremos nuestras
configuraciones en /etc/rsyslog.conf
.
Escribiremos la siguiente línea al
final del fichero:
*.* @@suse-server:514
Por último, reiniciamos rsyslog
.
root@debian:~# systemctl restart rsyslog
Ahora, volvamos a nuestra máquina suse-server
y comprobemos la existencia de remotehosts
en /var/log
:
root@suse-server:~# ls /var/log/remotehosts/debian/ 2019-09-17.info.log 2019-09-17.notice.log
Ya tenemos dos registros dentro de
/var/log/remotehosts
como se describe en nuestra
plantilla. Para completar esta
sección, ejecutamos tail -f
2019-09-17.notice.log
en suse-server
mientras enviamos un registro manualmente
desde nuestro cliente Debian y
confirmamos que los mensajes se
añaden al archivo de registro como
se esperaba (la opción -t
proporciona una etiqueta para
nuestro mensaje):
root@suse-server:~# tail -f /var/log/remotehosts/debian/2019-09-17.notice.log 2019-09-17T20:57:42+02:00 debian dbus[323]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' 2019-09-17T21:01:41+02:00 debian anacron[1766]: Anacron 2.3 started on 2019-09-17 2019-09-17T21:01:41+02:00 debian anacron[1766]: Normal exit (0 jobs run)
carol@debian:~$ logger -t DEBIAN-CLIENT Hi from 192.168.1.4
root@suse-server:~# tail -f /var/log/remotehosts/debian/2019-09-17.notice.log 2019-09-17T20:57:42+02:00 debian dbus[323]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' 2019-09-17T21:01:41+02:00 debian anacron[1766]: Anacron 2.3 started on 2019-09-17 2019-09-17T21:01:41+02:00 debian anacron[1766]: Normal exit (0 jobs run) 2019-09-17T21:04:21+02:00 debian DEBIAN-CLIENT: Hi from 192.168.1.4
Mecanismo de rotación de registros
Los registros se rotan con regularidad, lo que sirve para dos propósitos principales: * Evitar que los archivos de registro más antiguos utilicen más espacio de disco del necesario.
-
Mantenga los registros con una longitud manejable para facilitar su consulta.
La utilidad encargada de la rotación
(o ciclado) de los registros es logrotate
y su trabajo incluye acciones como
mover los archivos de registro a un
nuevo nombre, archivarlos y/o
comprimirlos, a veces enviarlos por
correo electrónico al administrador
del sistema y eventualmente borrarlos
a medida que envejecen. Hay varias
convenciones para nombrar estos
archivos de registro rotados
(añadiendo un sufijo con la fecha al
nombre del archivo, por ejemplo); sin
embargo, la práctica común es
simplemente añadir un sufijo con un
número entero:
root@debian:~# ls /var/log/messages* /var/log/messages /var/log/messages.1 /var/log/messages.2.gz /var/log/messages.3.gz /var/log/messages.4.gz
Expliquemos ahora lo que ocurrirá en la próxima rotación del registro:
-
messages.4.gz
se eliminará. -
El contenido de
messages.3.gz
se trasladará amessages.4.gz
. -
El contenido de
messages.2.gz
se trasladará amessages.3.gz
. -
El contenido de
messages.1
se trasladará amessages.2.gz
. -
El contenido de
messages
se trasladará amessages.1
ymessages
estará vacío y listo para registrar nuevas entradas de registro.
Observe que según las directivas logrotate
(que verá en breve), los tres archivos
de registro más antiguos están
comprimidos, mientras que los dos más
recientes no lo están. Además,
conservaremos los registros de las
últimas 4-5 semanas. Para leer los
mensajes de hace una semana,
consultaremos messages.1
(y así sucesivamente).
logrotate
se ejecuta
como un proceso automatizado o trabajo
cron diariamente a través del script /etc/cron.daily/logrotate
y lee el archivo de configuración /etc/logrotate.conf
.
Este archivo incluye algunas opciones
globales y está bien comentado con
cada opción introducida por una breve
explicación de su propósito:
carol@debian:~$ sudo less /etc/logrotate.conf # see "man logrotate" for details # rotar los archivos de registro semanalmente weekly # mantener 4 semanas rotate 4 # crear nuevos archivos de registro (vacíos) después de rotar los antiguos create # Descomente esto si quiere que sus archivos de registro se compriman #compress # los paquetes dejan la información de la rotación del registro en este directorio include /etc/logrotate.d (...)
Como puedes ver, también se incluyen
los archivos de configuración en /etc/logrotate.d
para paquetes específicos. Estos
archivos contienen — en su
mayoría — definiciones locales y
especifican los archivos de registro a
rotar (recuerde, las definiciones
locales tienen prioridad sobre las
globales, y las definiciones
posteriores anulan las anteriores). Lo
que sigue es un extracto de una
definición en /etc/logrotate.d/rsyslog
:
/var/log/messages { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
Como puede ver, cada directiva está
separada de su valor por espacios en
blanco y/o un signo de igualdad
opcional (=
). Sin
embargo, las líneas entre postrotate
y endscript
deben
aparecer en líneas solas. La
explicación es la siguiente:
rotate 4
-
Conserva los registros de 4 semanas.
weekly
-
Rota los archivos de registro semanalmente.
missingok
-
No emita un mensaje de error si falta el archivo de registro; simplemente pase al siguiente.
notifempty
-
No gira el registro si está vacío.
compress
-
Comprime los archivos de registro con
gzip
(por defecto). delaycompress
-
Pospone la compresión del archivo de registro anterior al siguiente ciclo de rotación (sólo es efectivo cuando se utiliza en combinación con compress). Es útil cuando no se puede indicar a un programa que cierre su archivo de registro y, por tanto, podría seguir escribiendo en el archivo anterior durante algún tiempo.
sharedscripts
-
Relacionado con los scripts prerotate y postrotate. Para evitar que un script se ejecute varias veces, ejecute los scripts sólo una vez, independientemente de cuántos archivos de registro coincidan con un patrón determinado (por ejemplo,
/var/log/mail/*
). Además, si los scripts salen con errores, las acciones restantes no se ejecutarán para ningún registro. postrotate
-
Indica el inicio de un script postrotate.
invoke-rc.d rsyslog rotate > /dev/null
-
Utiliza
/bin/sh
para correrinvoke-rc.d rsyslog rotate > /dev/null
después de rotar los registros. endscript
-
Indica el final del script postrotate .
Note
|
Para una lista completa de
directivas y explicaciones,
consulte la página del
manual de |
The Kernel Ring Buffer
Dado que el kernel genera varios
mensajes antes de que rsyslogd
esté disponible en el arranque, se
hace necesario un mecanismo para
registrar esos mensajes. Aquí es donde
entra en juego el kernel ring
buffer. Es una estructura de
datos de tamaño fijo y, por lo tanto,
a medida que crece con nuevos
mensajes, los más antiguos
desaparecen.
El comando dmesg
imprime el kernel ring buffer. Debido
al tamaño del buffer, este comando se
utiliza normalmente en combinación con
la utilidad de filtrado de texto grep
.
Por ejemplo, para buscar mensajes
relacionados con los dispositivos del
Bus Serie Universal:
root@debian:~# dmesg | grep "usb" [ 1.241182] usbcore: registered new interface driver usbfs [ 1.241188] usbcore: registered new interface driver hub [ 1.250968] usbcore: registered new device driver usb [ 1.339754] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.19 [ 1.339756] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 (...)
Ejercicios guiados
-
Qué utilidades/comandos utilizarías en los siguientes escenarios:
Finalidad y archivo de registro Utilidad Leer
/var/log/syslog.7.gz
Leer
/var/log/syslog
Filtrar la palabra
renewal
en/var/log/syslog
Leer
/var/log/faillog
Leer
/var/log/syslog
dinamicamente
-
Reorganice las siguientes entradas de registro de manera que representen un mensaje de registro válido con la estructura adecuada:
-
debian-server
-
sshd
-
[515]:
-
Sep 13 21:47:56
-
sshd Server listening on 0.0.0.0 port 22
El orden correcto es:
-
-
Qué reglas añadirías a
/etc/rsyslog.conf
para cumplir con cada una de las siguientes:-
Enviar todos los mensajes de la instalación
mail
y una prioridad/gravedad decrit
(y superior) a/var/log/mail.crit
:
-
Envía todos los mensajes de la instalación
mail
con prioridades dealerta
yemergencia
a/var/log/mail.urgent
:
-
Excepto los procedentes de las instalaciones
cron
yntp
, envía todos los mensajes -independientemente de su facilidades y prioridad - a/var/log/allmessages
:
-
Con todos los ajustes requeridos correctamente configurados primero, envíe todos los mensajes de la instalación
mail
a un host remoto cuya dirección IP es192.168.1.88
usando TCP y especificando el puerto por defecto:
-
Independientemente de su facilidad, envía todos los mensajes con la prioridad
warning
(sólo con la prioridadwarning`
) a `/var/log/warnings
evitando la escritura excesiva en el disco:
-
-
Considere la siguiente sección de
/etc/logrotate.d/samba
y explique las diferentes opciones:carol@debian:~$ sudo head -n 11 /etc/logrotate.d/samba /var/log/samba/log.smbd { weekly missingok rotate 7 postrotate [ ! -f /var/run/samba/smbd.pid ] || /etc/init.d/smbd reload > /dev/null endscript compress delaycompress notifempty }
Opción Significado weekly
missingok
rotate 7
postrotate
endscript
compress
delaycompress
notifyempty
Ejercicios de exploración
-
En la sección “Plantillas y condiciones de filtrado” hemos utilizado uno basado en expresiones como condición de filtrado. Los filtros basados en propiedades son otro tipo de exclusivo de
rsyslogd
. Convierta nuestro filtro basado en expresiones en uno basado en propiedades:Filtro basado en expresiones Filtro basado en propiedades if $FROMHOST-IP=='192.168.1.4' then ?RemoteLogs
-
omusrmsg
es un módulo integrado enrsyslog
que facilita la notificación a los usuarios (envía mensajes de registro al terminal del usuario). Escribe una regla para enviar todos los mensajes de emergencia de todas las instalaciones tanto aroot
como al usuario regularcarol
.
Resumen
En esta lección aprendió:
-
El registro es crucial para la administración del sistema.
-
rsyslogd
es la utilidad encargada de mantener los registros limpios y ordenados. -
Algunos servicios se encargan de sus propios registros.
-
A grandes rasgos, los registros pueden clasificarse en registros de sistema y registros de servicio/programa.
-
Hay un número de utilidades que son convenientes para la lectura de registros:
less
,more
,zless
,zmore
,grep
,head
ytail
. -
La mayoría de los archivos de registro son de texto plano; sin embargo, hay un pequeño número de archivos de registro binarios.
-
En cuanto a los registros,
rsyslogd
recibe la información relevante de archivos especiales (sockets y buffers de memoria) antes de procesarla. -
Para clasificar los registros,
rsyslogd
utiliza reglas en/etc/rsyslog.conf
o/etc/rsyslog.d/*
. -
Cualquier usuario puede introducir sus propios mensajes en el registro del sistema manualmente con la utilidad
logger
. -
rsyslog
permite mantener todos los registros de las redes IP en un servidor de registros centralizado. -
Las plantillas son útiles para formatear los nombres de los archivos de registro de forma dinámica.
-
El objetivo de la rotación de registros es doble: evitar que los registros antiguos utilicen un espacio de disco excesivo y hacer que los registros de consulta sean manejables.
Respuesta a los ejercicios guiados
-
Qué utilidades/comandos utilizarías en los siguientes escenarios:
Finalidad y archivo de registro Utilidad Leer
/var/log/syslog.7.gz
zmore
orzless
Leer
/var/log/syslog
more
orless
Filtrar la palabra
renewal
en/var/log/syslog
grep
Leer
/var/log/faillog
faillog -a
Leer
/var/log/syslog
dinamicamentetail -f
-
Reorganice las siguientes entradas de registro de manera que representen un mensaje de registro válido con la estructura adecuada:
-
debian-server
-
sshd
-
[515]:
-
Sep 13 21:47:56
-
sshd Server listening on 0.0.0.0 port 22
El orden correcto es:
Sep 13 21:47:56 debian-server sshd[515]: Server listening on 0.0.0.0 port 22
-
-
Qué reglas añadirías a
/etc/rsyslog.conf
para cumplir con cada una de las siguientes:-
Enviar todos los mensajes de la instalación
mail
y una prioridad/gravedad decrit
(y superior) a/var/log/mail.crit
:mail.crit /var/log/mail.crit
-
Envía todos los mensajes de la instalación
mail
con prioridades dealerta
yemergencia
a/var/log/mail.urgent
:mail.alert /var/log/mail.urgent
-
Excepto los procedentes de las instalaciones
cron
yntp
, envía todos los mensajes -independientemente de su facilidades y prioridad - a/var/log/allmessages
:*.*;cron.none;ntp.none /var/log/allmessages
-
Con todos los ajustes requeridos correctamente configurados primero, envíe todos los mensajes de la instalación
mail
a un host remoto cuya dirección IP es192.168.1.88
usando TCP y especificando el puerto por defecto:mail.* @@192.168.1.88:514
-
Independientemente de su facilidad, envía todos los mensajes con la prioridad
warning
(sólo con la prioridadwarning`
) a `/var/log/warnings
evitando la escritura excesiva en el disco:*.=warning -/var/log/warnings
-
-
Considere la siguiente sección de
/etc/logrotate.d/samba
y explique las diferentes opciones:carol@debian:~$ sudo head -n 11 /etc/logrotate.d/samba /var/log/samba/log.smbd { weekly missingok rotate 7 postrotate [ ! -f /var/run/samba/smbd.pid ] || /etc/init.d/smbd reload > /dev/null endscript compress delaycompress notifempty }
Opción Significado weekly
Rotar los archivos de registro semanalmente.
missingok
No emita un mensaje de error si falta el registro; simplemente continúe con el siguiente.
rotate 7
Mantenga 7 semanas de atrasos.
postrotate
Ejecute el script en la siguiente línea después de rotar los registros.
endscript
Indica el final de la secuencia de comandos postrotate.
compress
Comprime los registros con
gzip
.delaycompress
En combinación con
comprimir
, pospone la compresión al siguiente ciclo de rotación.notifyempty
No gire el registro si está vacío.
Respuestas a los ejercicios de exploración
-
En la sección “Plantillas y condiciones de filtrado” hemos utilizado uno basado en expresiones como condición de filtrado. Los filtros basados en propiedades son otro tipo de exclusivo de
rsyslogd
. Convierta nuestro filtro basado en expresiones en uno basado en propiedades:Filtro basado en expresiones Filtro basado en propiedades if $FROMHOST-IP=='192.168.1.4' then ?RemoteLogs
:fromhost-ip, isequal, "192.168.1.4" ?RemoteLogs
-
omusrmsg
es un módulo integrado enrsyslog
que facilita la notificación a los usuarios (envía mensajes de registro al terminal del usuario). Escribe una regla para enviar todos los mensajes de emergencia de todas las instalaciones tanto aroot
como al usuario regularcarol
.*.emerg :omusrmsg:root,carol