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
No hay comentarios:
Publicar un comentario