El sistema de log

Al igual que sucede en cualquier sistema Unix, en AIX la información y los errores generados por eventos en el sistema son gestionados por el demonio syslogd, que en función de su configuración (en el archivo /etc/syslogd.conf) envía sus registros a consola, a un fichero, a un programa, a otro sistema...tal y como se explica en el capítulo dedicado a la auditoría de sistemas Unix. No obstante, además de syslogd, AIX proporciona otro mecanismo para la gestión de errores y mensajes del hardware, del sistema operativo y de las aplicaciones, ofreciendo una información muy valiosa para determinar cualquier tipo de problemas en el entorno ([Skl01]); mientras que por defecto syslogd no realiza ningún tipo de registro en AIX, este sistema no necesita ningún tipo de configuración adicional para comenzar a realiza su trabajo. Además, viene `de serie', ya que este mecanismo adicional forma parte de los paquetes bos.rte y bos.sysmgt.serv_aid, instalados por defecto con el operativo:
bruja:/etc# lslpp -l bos.rte bos.sysmgt.serv_aid
  Fileset                    Level  State      Description         
  --------------------------------------------------------------------------
Path: /usr/lib/objrepos
  bos.rte                 4.3.3.10  COMMITTED  Base Operating System Runtime
  bos.sysmgt.serv_aid     4.3.3.50  COMMITTED  Software Error Logging and
                                               Dump Service Aids

Path: /etc/objrepos
  bos.rte                  4.3.3.0  COMMITTED  Base Operating System Runtime
  bos.sysmgt.serv_aid     4.3.3.50  COMMITTED  Software Error Logging and
                                               Dump Service Aids
bruja:/etc#
Al arrancar una máquina AIX desde /etc/inittab se invoca a /sbin/rc.boot, shellscript donde se inicializa el demonio errdemon, encargado de monitorizar contínuamente el archivo /dev/error y crear los registros de error en el fichero correspondiente; a diferencia de syslogd, errdemon no escribe una entrada cada vez que se registra un evento, sino que lo hace mediante buffers tal y como se le indica en su base de datos de notificación de errores, /etc/objrepos/errnotify. Además, el registro de errores por defecto se mantiene en /var/adm/ras/errlog, mientras que el último log generado se guarda en memoria NVRAM de forma que en el arranque del sistema se añade al registro cuando se inicializa el demonio.

Los registros guardados por errdemon están en modo binario (a diferencia de los logs habituales en Unix) por defecto, como hemos comentado, dentro del fichero /var/adm/ras/errlog; de esta forma, para visualizarlos necesitaremos ciertas herramientas que vienen con el sistema; podemos utilizar desde línea de comandos la orden errpt o bien - como siempre en AIX - invocarla desde SMIT. En cualquier caso, mediante esta herramienta se genera en tiempo real un informe de errores:
bruja:/# errpt |head -2   
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
AA8AB241   0506081102 T O OPERATOR       OPERATOR NOTIFICATION
bruja:/#
Como podemos ver, cada línea mostrada por esta orden es uno de los registros procesados; la primera columna es un identificador de error único y la segunda indica la hora en que se generó el mismo en formato mmddhhmmyy (mes, día, hora, minuto y año). La tercera describe el tipo de error registrado: una `T' indica que es temporal, una `P' que es permanente y una `U' que es desconocido. La cuarta columna define la clase del error (`S' para errores software, `H' para hardware y `O' para entradas generadas mediante errlogger, como veremos después). Finalmente, la quinta columna indica el recurso afectado, y la última una descripción del error. Si pensamos que el formato es algo complicado de interpretar a simple vista (quizás tengamos razón), podemos utilizar la opción `-a' de la orden, que muestra los registros con un mayor nivel de detalle, hasta el punto de indicar las posibles causas del problema y su solución (aunque realmente esta información no es tan útil como pueda parecer en principio):
bruja:/# errpt -a|head -36
-------------------------------------------------------------------------
LABEL:          SRC
IDENTIFIER:     E18E984F

Date/Time:       Mon May  6 07:02:05 
Sequence Number: 30479
Machine Id:      000000375C00
Node Id:         bruja
Class:           S
Type:            PERM
Resource Name:   SRC

Description
SOFTWARE PROGRAM ERROR

Probable Causes
APPLICATION PROGRAM

Failure Causes
SOFTWARE PROGRAM

        Recommended Actions
        PERFORM PROBLEM RECOVERY PROCEDURES

Detail Data
SYMPTOM CODE
           0
SOFTWARE ERROR CODE
       -9017
ERROR CODE
           9
DETECTING MODULE
'srchevn.c'@line:'288'
FAILING MODULE
qdaemon
-------------------------------------------------------------------------
bruja:/#
El archivo errlog es un registro circular, es decir, almacena tantas entradas como se define al arrancar el demonio errdemon. Al llegar una nueva entrada, se almacena primero en un buffer intermedio para minimizar la probabilidad de pérdida del registro, y a continuación se pasa al fichero errlog; en este punto, si se va a sobrepasar el tamaño máximo del archivo, se elimina la primera entrada registrada. Podemos consultar los parámetros de configuración actuales mediante errdemon, y quizás nos interese también modificar alguno de ellos en el arranque del sistema; por ejemplo, [Bha01] recomienda incrementar el tamaño por defecto de los buffers y del archivo de log para obtener un mejor registro de auditoría:
bruja:/# /usr/lib/errdemon -l
Error Log Attributes
---------------------------------------------
Log File                /var/adm/ras/errlog
Log Size                1048576 bytes
Memory Buffer Size      8192 bytes
bruja:/# /usr/lib/errdemon -s4194304 -B32768
The error log memory buffer size you supplied will be rounded up
to a multiple of 4096 bytes.
bruja:/# /usr/lib/errdemon -l
Error Log Attributes
---------------------------------------------
Log File                /var/adm/ras/errlog
Log Size                4194304 bytes
Memory Buffer Size      32768 bytes
bruja:/#
Otra herramienta interesante para trabajar con el sistema de registro de AIX es errlogger; la funcionalidad de la misma es similar a la de la orden logger en otros Unices: añadir entradas al fichero de log desde línea de comandos, por ejemplo a la hora de registrar eventos desde un shellscript:
bruja:/# errlogger Mensaje de prueba
bruja:/# errpt |head -2   
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
AA8AB241   0506081102 T O OPERATOR       OPERATOR NOTIFICATION
bruja:/# errpt -a |head -25
-------------------------------------------------------------------------
LABEL:          OPMSG
IDENTIFIER:     AA8AB241

Date/Time:       Mon May  6 08:11:54 
Sequence Number: 30480
Machine Id:      000000375C00
Node Id:         bruja
Class:           O
Type:            TEMP
Resource Name:   OPERATOR

Description
OPERATOR NOTIFICATION

User Causes
ERRLOGGER COMMAND

        Recommended Actions
        REVIEW DETAILED DATA

Detail Data
MESSAGE FROM ERRLOGGER COMMAND
Mensaje de prueba
-------------------------------------------------------------------------
bruja:/#
AIX ofrece más herramientas para realizar diferente tareas sobre su sistema nativo de log: eliminar entradas (errclear), instalar nuevas entradas en el archivo de configuración (errinstall), detener el demonio errdemon (errstop); para obtener información adicional podemos consultar el capítulo 10 de [IBM97a]. El sistema de log en AIX es una de las características más potentes que el operativo nos ofrece, proporcionando un nivel de detalle y granularidad en la clasificación de eventos muy superior al de syslogd; no obstante, la cantidad de información registrada, y el hecho de que no existan herramientas `de serie' (realmente sí que las hay, en muchos casos simples scripts desarrolladas por terceros) que informen de algún modo especial ante errores graves, hacen que no se consulte mucho el log y se pierdan entradas que son importantes, no sólo en lo referente a la seguridad del sistema sino también en lo que concierne a su estabilidad.
© 2002 Antonio Villalón Huerta