David Bohm

Hay dos frases que definen mi manera de pensar:
Realmente no hemos prestado mucha atención al pensamiento como un proceso; hemos participado en pensamientos, pero sólo hemos prestado atención al contenido, no al proceso.
La capacidad de percibir o pensar de manera diferente es más importante que el conocimiento adquirido.
Ambas son de David Bohm.
Mostrando entradas con la etiqueta Logs. Mostrar todas las entradas
Mostrando entradas con la etiqueta Logs. Mostrar todas las entradas

miércoles, 3 de febrero de 2021

Análisis de los errores y logs de un sistema Linux

Cuando hay un problema en un servidor tenemos que tener un procedimiento que nos permita realizar un análisis exhaustivo de forma ordenada y sencilla.

Como ya vimos en una entrada anterior los logs se almacenan en: /var/log

Está claro que ahí tendremos que realizar un recorrido según el problema del que se trate, pero quizás sea interesante empezar por otro lado para coger perspectiva. Veamos algunos comandos que son útiles cuando analizas un sistema y comencemos por analizar a los usuarios, quien está conectado, su historial de conexión, etcétera. Dependiendo de la distribución, quizás sea necesario instalar algún paquete. Si la idea te gusta dejatelo ya instalado previamente por si un día tienes que analizar el sistema.

USUARIOS E INICIO DE SESIÓN

Obtengamos un listado de todos los usuarios del sistema:

   # cat /etc/passwd

Para saber quien está conectado actualmente:

   # who -a

Si queremos ver el historial de los inicios de sesión podemos ejecutar el comando:

   # last -a


Para ver el último inicio de sesión de los usuarios en el sistema:

   # lastlog

Para ver el último reinicio del sistema:

   # last reboot


CPU, MEMORIA, PROCESOS Y RED

Veamos un listado de los procesos del sistema, par ver uso de CPU, memoria, tamaños de cache, procesos con PID, usuarios, etcétera:

   # top

Si este comando te gusta, prueba a instalar htop, tiene caracteristicas y un interfaz mas trabajado.

   # htop

Listado de ficheros abiertos actualmente:

   # lsof

Sobre la red, puertos y paquetes de entrada y salida:

   # netstat -a

En cuanto a los procesos de entrada y salida en disco, podemos ejecutar:

   # iotop

Si quieres obtener estadisticas de utilización del ancho de banda de la red:

   # iftop

Obviamente si necesitamos tener visibilidad y exactitud sobre todo lo que pasa a nivel de paquetes en la red...wireshark es tu aliado, pero eso es otro cantar.

HARDWARE, DISCO DURO Y ESPACIO

Tabla de particiones:

   # fdisk -l

Listado de puntos de montaje con el comando mount:

   # mount -l

Listado de puntos de montaje, sistemas de archivos y su uso:

   # df -aTh

Interesante echar un vistazo a fstab:

   # cat /etc/fstab

NAVEGADOR DE LOGS

Y por último, cuando acabas en el directorio de logs y te enfrentas a tanto archivo, la forma tradicional era hacer un cat o tail por ejemplo:

   # cat /var/log/syslog

Podemos añadir filtros con grep y ver por ejemplo todo lo que contenga la palabra Network:

   # cat /var/log/syslog | grep Network

Con Tail podemos ir mas allá y mantener el fichero abierto y ver en tiempo real que pasa en el log:

   # tail -f /var/log/syslog

Otra herramienta utilizada ultimamente era journalctl del systemd, una herramienta que podemos instalar y utilizar.

Pero un programa muy interesante para tener una perspectiva global de los logs del sistema es lnav. Y creo que combina muy bien todo lo que nos puede ofrecer tail

Dependiendo del sistema debemos instalarlo:

   En distribuciones derivadas de Debian:

      # apt install lnav

   En distribuciones derivadas de Red Hat:

      # yum install epel-release

      # yum install lnav

Al lanzarlo sin especificar el archivo log que quieres consultar, verás como ha navegado en todos los logs del sistema y te presenta un resumen exhaustivo de todo lo que ha pasado, y lo mas importante, de todo lo que está pasando en vivo y en directo.

   # lnav 

Siempre puedes analizar solo una parte de los logs, por ejemplo:

   # lnav /var/log/syslog

O podemos centrarnos en syslog pero para todos los archivos de la rotación de logs:

   # lnav /var/log/syslog*

Lo bueno es que realiza resaltado de sintaxis y esto ayuda mucho a un repaso visual rápido.

Otro punto fuerte es que permite realizar búsquedas como las que realizarías en un vim, por poner un ejemplo cercano en el mundo de la consola. En este ejemplo resaltaría todo lo que contenga la palabra especificada:

   /Network

Nada mas poner el cáracter / lnav muestra una pequeña ayuda en la sintaxis:

   Syntax Help  ::
       .   Any character     a|b  a or b         ^       Start of string
       \w  Word character    a?   0 or 1 a's     $       End of string
       \d  Digit             a*   0 or more a's  (...)   Capture
       \   Escape character  a+   1 or more a's  [ab-d]  Any of a, b, c, or d
   Examples
     abc* matches 'ab', 'abc', 'abccc'
     key=(\w+) matches key=123, key=abc and captures 123 and abc
     \[abc\] matches '[abc]'

Incluso realiza una previsualización en la que puedes ver algunos resultados y como quedaría la búsqueda.

Pero lnav va mucho mas allá, permite realizar búsquedas sql. En la página oficial podemos consultar como hacer esa extracción de datos aquí. Tenemos que comenzar con el carácter ; para entrar en el modo búsqueda. Cuando introducimos el cáracter ; directamente nos muestra una pequeña ayuda:

   Query Help   ::
       SELECT  Select rows from a table       DELETE  Delete rows from a table
       INSERT  Insert rows into a table       UPDATE  Update rows in a table
       CREATE  Create a table/index           DROP    Drop a table/index
       ATTACH  Attach a SQLite database file  DETACH  Detach a SQLite database
   Examples
       SELECT * FROM syslog_log WHERE log_level >= 'warning' LIMIT 10
       UPDATE syslog_log SET log_mark = 1 WHERE log_line = log_top_line()
       SELECT * FROM logline LIMIT 10

Para ver las tablas y campos que podemos consultar debemos lanzar el siguiente comando:

    ;.schema

Ahí veremos todas las tablas virtuales que se generan y los campos a los que podríamos acudir para filtrar la búsqueda.

Por poner algún ejemplo útil, podríamos hacer una consulta sencilla tal y como marca la documentación oficial para ver el resultado:

    ;select * from logline

Herramienta sencilla, fácil de implementar, utilizar y con muchas posibilidades para consultar los logs del sistema.

SaluDOS

domingo, 31 de mayo de 2020

Logs en Linux, archivos para dar y tomar

El mundo de los logs en Linux se hace complicado cuando hay que analizar un comportamiento en el servidor, uno de sus servicios o una aplicación concreta. Por ello vamos intentar resumir los ficheros mas importantes, comúnes o útiles, aunque es un tarea complicada.

Veamos, tradicionalmente se han clasificado en categorias como:
   - Logs de sistema
   - Logs de eventos
   - Logs de servicios
   - Logs de aplicaciones

Eso está muy bien y aparece en todos los sitios, pero la realidad es que si vamos a la configuración de rsyslog o syslog-ng por ejemplo, podremos ver un listado extenso de archivos a los que hace referencia:

   /var/log/auth.log - Logs de autenticación.
   /var/log/syslog.log - Logs de sistema
   /var/log/crond.log - Logs de los trabajaos de cron
   /var/log/daemon.log - Logs de servicios en segundo plano
   /var/log/kernel.log - Logs del kernel
   /var/log/lpr.log - Logs de impresión
   /var/log/user.log - Logs de usuario
   /var/log/maillog - Logs relacionados con el servidor de correo
   /var/log/messages - Logs generales de sistema

Si indagamos por internet, podremos obtener un puñado mas de archivos de logs:


   /var/log/httpd/ - Logs de apache
   /var/log/lighttpd/ - Logs de Lighttpd
   /var/log/boot.log - Logs de arranque de sistema
   /var/log/kern.log - Logs de kernel
   /var/log/mysqld.log o /var/log/mysql.log - Logs de MySQL
   /var/log/secure o /var/log/auth.log - Logs de autenticación
   /var/log/utmp or /var/log/wtmp
   /var/log/yum.log Logs de yum
   /var/log/qmail/ - Logs de qmail

Se que es una locura, pero si además incluyes aplicacions la lista puede ser infinita. Si tuviesemos que centrarnos en unos cuantos creo que sería bueno seleccionar los logs mas críticos y relevantes si un día tenemos un problema. Se que no vamos a descubrir nada nuevo, pero veamos esta lista tan habitual:


/var/log/boot.log --- Almacena la informacion relacionada con el arranque y los mensajes que se registran en dicho proceso. Aqui obtendremos información sobre apagados incorrectos, reinicios no planeados o fallos de arranque en general.

/var/log/auth.log o /var/log/secure --- El primer fichero es típico de distribuciones basadas en debian y el segundo en distribuciones basadas en red hat. Contiene todos los eventos relacionados con la autenticación y la autorización de usuarios. Permite revisar intentos fallidos de acceso, fuerza bruta, etcétera. Almacena todo lo relacionado con la seguridad, uso de sudo, inicios de sesión ssh y todos los eventos de autenticación de usuario. Informará sobre intentos de acceso no autorizados o fallidos, además de los inicios de sesión que se han realizado con éxito. También /var/log/faillog o /var/log/btmp contendrán intentos fallidos de acceso. El registro de inicio de sesión y su fin se mantienen en /var/log/wtmp. A este respecto es muy útil /var/log/lastlog que mantiene el último inicio de sesión de cada usuario.

/var/log/messages o /var/log/syslog --- Contiene registros de la actividad general del sistema, almacena mensajes informativos y no críticos. Puede mostrar errores de arranque no relacionados con el kernel y servicios relacionados con las aplicaciones. Suele ser el primer archivo que revisaremos si algo va mal.

/var/log/dmesg --- Almacena mensajes del nucleso relacionados con hardware, dispositivos y sus controladores. Contendrá la detección de los dispositivos, errores de hardware y otros mensajes genéricos.

/var/log/kernel.log o /var/log/kern.log --- Es un archivo importantísimo, contiene todo lo que registra el núcleo. Nos puede ayudar si tenemos un núcleo personalizado, o nuestro servidor presenta problemas de hardware, conectividad, etcétera.


/var/log/cron --- Registra todo lo que tenga que ver con las tareas programadas en cron. Cada vez que se ejecute una tarea programada cron registrará la información relevante, ejecuciones correctas, errores, etcétera.

/var/log/daemon.log --- Registra eventos relevantes de los demonios que estén en ejecución en segundo plano.

/var/log/yum.log --- Almacenará toda la información relevante cuando se instale un nuevo paquete si hemos usado yum. Registra la instalación de componentes del sistema y los paquetes de los repositorios. Es habitual que si un software no se ha instalado correctamente acudamos a este archivo log.

/var/log/maillog o /var/log/mail.log --- Registrará todo lo relacionado con el servicio de correo y de cualquier aplicación que tenga que ver con dicho servicio. Se podrá rastrear los envios y recepciones de correos electrónicos, investigar sobre problemas de entrega de correos, averiguar origen de un correo, spam, etcétera.

/var/log/httpd --- Almacena los registros del servidor apache si lo tenemos instalado. Normalmente se almacena en dos archivos diferentes: error_log y acces_log. En el primero se registrarán los errores relacionados con el servidor, su servicio y el sistema. En el segundo archivo se almacenarán todas las peticiones de acceso recibidas a través de protocolo http. Registrará dirección IP y el ID de los clientes que realizan peticiones de conexión al servidor tanto exitosas como infructuosas.

/var/log/mysqld.log o /var/log/mysql.log --- Almacena los registros del servidor mysql si lo tenemos instalado. El primer archivo es típico de distribuciones basadas en Red Hat y el segundo para las basadas en Debian. Es el archivo de registro con todos los mensajes de depuración, fallo y éxito relacionados con mysql. Se puede registrar desde problemas al iniciar, ejecutar o detener el demonio de mysql, hasta información sobre bloqueos de consultas, consultas de ejecución lenta, etcétera.

En otras entradas trataremos formas de centralizar la información y de poder hacer un análisis mas general o rápido de los logs, por lo menos en un primer paso que nos evite empezar a revisar archivo tras archivo. Podríamos ver desde un logwatch que nos ayuda a obtener un informe un poco mas "humano" de forma puntual o programada, hasta un servidor de logs Nagios o un graylog, con el que podremos centralizar, recopilar y monitorizar, para establecer alertas que nos notifiquen si hay un comportamiento anómalo en nuestros servidores.

SaluDOS