Cuando surjan problemas con el rendimiento de tu servidor, lo primero que debes hacer es revisar los registros de Linux . En el registro del sistema, encontrarás mensajes de diagnóstico útiles de diferentes componentes del sistema operativo, como el kernel o varios servicios, por lo que probablemente allí encontrarás la causa del fallo.
Cada mensaje del registro se genera como resultado de ciertos eventos en el sistema operativo: desde el usuario y la autorización hasta el cierre de un servicio o un fallo de la aplicación. Estos eventos tienen diferentes prioridades según su gravedad. Existen los siguientes tipos de eventos en Linux:
emerg- fallo, máxima prioridad;alert- advertencia urgente;crit- evento crítico;err- error ordinario;warn- advertencia ordinaria;notice- notificación;info- mensaje informativo;debug- información de depuración;
Actualmente, los principales servicios de recolección de registros en Linux son rsyslog y systemd-journald . Vienen incluidos en la mayoría de los paquetes de las distribuciones modernas y funcionan de forma independiente.
rsyslog
Los registros de este servicio se encuentran en la carpeta “ /var/log/ ” en forma de archivos de texto normales. Los mensajes de registro se guardan en diferentes archivos según el tipo de evento. Por ejemplo, “ /var/log/auth.log ” contiene información sobre la autorización de los usuarios en el sistema, y “ /var/log/kern.log ” contiene mensajes del kernel. Los nombres de los archivos pueden variar entre los paquetes de distribución, así que veamos el archivo de configuración para hacernos una idea de dónde se encuentra cada cosa: “ /etc/rsyslog.d/50-default.conf ”.
Estas reglas muestran qué archivo contiene cada tipo de mensaje de registro. La parte izquierda muestra el tipo de mensaje en el formato “ [Origen].[Prioridad] ” y la parte derecha muestra el nombre del archivo de registro. Al escribir el tipo de mensaje, se puede añadir el carácter “ * ”. Esto significa un valor vacío o “ ninguno ”, lo que lo elimina de la lista. Analicemos con más detalle las dos primeras reglas.
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
La primera regla indica que todos los mensajes recibidos del mecanismo de autorización se registrarán en el archivo “ /var/log/auth.log ”. Todos los intentos de autorización (tanto exitosos como fallidos) se registrarán en este archivo. La segunda regla indica que todos los mensajes, excepto los relacionados con la autorización, se registrarán en el archivo “ /var/log/syslog ”. Estos dos archivos suelen ser los más utilizados. Las siguientes reglas definen la ruta para almacenar los registros del kernel “ kern.* ” y los registros del servicio de correo “ mail.* ”.
Los archivos de registro se pueden abrir con cualquier editor de texto, como less , cat o tail . Abramos el archivo “ /var/log/auth.log ”.
less /var/log/auth.log
Cada línea del archivo es un mensaje independiente recibido de la aplicación o servicio. Todos los mensajes, independientemente de su origen, tienen un formato único y constan de cinco partes. Tomemos como ejemplo el mensaje resaltado en la captura de pantalla.
- Marca de tiempo del mensaje: “12 de febrero, 06:18:33”
- Nombre de la computadora que envió el mensaje - “vds”
- Nombre de la aplicación o servicio que envió el mensaje - “sshd”
- ID de proceso - [653]
- Texto del mensaje: “Contraseña aceptada para Mihail desde 188.19.42.165, puerto 2849 ssh2”
Este fue un ejemplo de una conexión exitosa a SSH.
Y así es como se ve un intento de inicio de sesión fallido:
Este archivo también registra comandos con permisos avanzados.
Vamos a abrir el archivo /var/log/syslog.
Un mensaje resaltado en la captura de pantalla es el mensaje sobre el apagado de la interfaz de red.
Para buscar información en archivos de texto largos, utilice la utilidad grep . Puede encontrar todos los mensajes recibidos del servicio pptpd en el archivo “ /var/log/syslog ”.
grep 'pptpd' /var/log/syslog
Durante el diagnóstico, puede usar la utilidad tail , que muestra las últimas líneas de los archivos. El comando “ tail -f /var/log/syslog ” le permitirá ver los registros en tiempo real.
El servicio rsyslog es muy flexible y potente. Puede utilizarse para recopilar registros tanto en sistemas locales como a nivel empresarial. Encontrará la documentación completa en el sitio web oficial https://www.rsyslog.com/
Rotación de registros en Linux
El registro de eventos se realiza de forma continua, por lo que el tamaño de los archivos aumenta constantemente. El mecanismo de rotación garantiza el archivado automático de los registros antiguos y la creación de nuevos archivos. Según las reglas, esto puede ocurrir diariamente, semanalmente, mensualmente o por límite de tamaño. A medida que se crean nuevos registros, los antiguos se pueden eliminar o enviar por correo electrónico. La rotación de registros la realiza la utilidad logrotate . Puede encontrar la configuración principal en el archivo “ /etc/logrotate.conf ”. El contenido de los archivos también se procesa en la carpeta “ /etc/logrotate.d/ ”.
Se pueden registrar nuevas reglas en el archivo de configuración principal. Sin embargo, lo mejor es crear un archivo separado en “ /etc/logrotate.d/ ”. Por defecto, hay algunos archivos en este directorio.
Vamos a echar un vistazo al archivo “ /etc/logrotate.d/rsyslog “ que contiene las reglas de rotación para los registros del servicio rsyslog.
En primer lugar, la regla debe contener la ruta al archivo de registro y luego ir todas las pautas entre corchetes.
- rotar 7 - Número de archivos a conservar: 7
- todos los días - crear un nuevo archivo cada día
- comprimir - comprimir y archivar archivos antiguos
En la captura de pantalla se puede ver que en la carpeta “ /var/log/ ” se encuentran el registro principal “ syslog ” y 7 archivos, lo que corresponde con las reglas del archivo de configuración.
Puedes encontrar una descripción más detallada de logrotate en el manual, ejecutando el comando “ man logrotate ”.
Recopilación de registros de Linux - journald
El servicio de recolección de registros systemd-journald forma parte del sistema de inicialización systemd . Los archivos de registro de Linux se almacenan en “ /var/log/journal/ ” en un formato especial y se pueden abrir con la utilidad journalctl . El formato de los registros es exactamente el mismo que en rsyslog.
El comando journalctl sin atributos muestra todos los registros, pero no es adecuado para archivos de registro grandes. Veamos algunas opciones de esta utilidad.
journalctl -b- mostrar todos los registros desde el último iniciojournalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- mostrar registro dentro de un período de tiempo determinadojournalctl -u pptpd- mostrar registros de un determinado serviciojournalctl -k- mostrar mensajes del kerneljournalctl -p err- mostrar mensajes de cierta prioridad, mensajes de mayor prioridad en este caso (crítico, alerta, emergencia)journalctl -f- mostrar mensajes en tiempo real
Para mayor flexibilidad, puedes combinar estas opciones. Mostremos todos los errores del servicio pptpd.
journalctl -u pptpd -p err
Si especificas la ruta al archivo ejecutable como atributo, la utilidad mostrará todos los mensajes enviados por dicho archivo. Veamos todos los mensajes enviados por el archivo “ /usr/bin/sudo ” desde las 04:15 del 18 de febrero de 2020. De hecho, mostrará todos los comandos ejecutados con permisos superiores.
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
Para saber cuánto espacio en disco ocupan los archivos de registro, ejecute el siguiente comando
journalctl --disk-usage
Para limitar el archivo de registro a 1 Gb, ejecute el siguiente comando
journalctl --vacuum-size=1G
Abrir archivos binarios
Ahora veamos algunos archivos especiales en la carpeta “ /var/log/ ”, donde se almacenan todos los intentos de inicio de sesión. Estos archivos son binarios y solo se pueden abrir con programas especiales.
El archivo /var/log/wtmp contiene información sobre los intentos de inicio de sesión exitosos. Utilice la última utilidad para abrirlo.
/var/log/btmp : contiene todos los intentos de inicio de sesión fallidos. Se puede abrir con lastb con permisos avanzados. El atributo -n define el número de líneas que se muestran desde el final del archivo.
/var/log/lastlog : contiene la hora del último inicio de sesión para cada registro de cuenta. Se puede abrir con lastlog.