Sistemas Windows: Caídas e inicios de servidor

Los administradores de sistemas necesitamos tener constancia en todo momento de: los períodos de tiempo entre caídas de servidor, así como determinar cuando se ha producido una caída o un apagado ordenado de un sistema. En los sistemas Windows, toda esta información se almacena en el Visor de Sucesos, lo cual supone de gran ayuda para entornos no monitorizados. El problema que surge es la escasa «manejabilidad» de este registros de eventos y su extracción de información, por lo que con objeto de facilitar su tratamiento voy a dar información muy básica sobre este sistema, y cómo extraer información de una manera sencilla.

Cada tipo determinado de información viene marcada por un número de Identificador de evento, que indica un tipo distinto de acción en el servidor. Por ejemplo, respecto a las caídas e inicios de servidor podemos observar tres eventos tipo:

Evento 6006, que refleja que se detiene el Registro de sucesos. Esto indica por regla general un cierre ordenado del sistema, aunque evidentemente podría detenerse únicamente el servicio de registro de sucesos:

c:\> net stop eventlog

Tipo de suceso: Información
Origen del suceso: EventLog
Categoría del suceso: Ninguno
Id. suceso: 6006
Fecha: dd/mm/aaaa
Hora: hh:mm:ss
Usuario: No disponible
Equipo: MISERVIDOR
Descripción:
Se ha detenido el servicio de Registro de sucesos.

Evento 6009, que refleja que el servidor ha sido iniciado.

Tipo de suceso: Información
Origen del suceso: EventLog
Categoría del suceso: Ninguno
Id. suceso: 6009
Fecha: dd/mm/aaaa
Hora: hh:mm:ss
Usuario: No disponible
Equipo: MISERVIDOR
Descripción:
Microsoft (R) Windows (R) 5.02. 3790 Service Pack 2 Multiprocessor Free.

Evento 6008. Este evento nos avisa de cuando se produjo una caída inesperada de sistema, lo cual nos proporciona información para poder determinar que otros sucesos ocurrieron entorno a ese hora/día y determinar las causas de la caída del sistema.

Tipo de suceso: Error
Origen del suceso: EventLog
Categoría del suceso: Ninguno
Id. suceso: 6008
Fecha: dd/mm/aaaa
Hora: hh:mm:ss
Usuario: No disponible
Equipo: MISERVIDOR
Descripción:
El cierre anterior del sistema a las hh:mm:ss del dd/mm/aaaa resultó inesperado.

Una vez sabemos dónde tenemos que buscar la información, queda la cuestión de cómo estructurarla. Aunque se pueden aplicar filtros en el Visor de sucesos para la búsqueda de información, a continuación planteo una forma más automatizada para la obtención de dicha información, y a través de la que podremos exportar la información. Para ello utilizaremos lenguaje VBS.

El siguiente script (que obviamente, y como disclaimer previo, deberán utilizar bajo su propia responsabilidad y de cuyos posibles efectos perjudiciales no asumimos responsabilidad alguna) se encarga de realizar un volcado de la información a un fichero .txt. Si bien es cierto que la información volcada al fichero es pequeña, en esta entrada simplemente trato de abrir la puerta a las posibilidades que nos ofrece el hecho de automatizar procesos de obtención de información. El resto se deja como ejercicio para el lector interesado (o necesitado).

REM Definimos la máquina (en este caso local)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

REM Creamos fichero para añadir texto
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("c:\informe.txt", ForAppending, True)

REM Recolectamos los eventos de Sistema con EventID: 6009)
Set colLoggedEvents = objWMIService.ExecQuery _
  ("Select * from Win32_NTLogEvent Where Logfile = 'System' and " _
    & "EventCode = '6009'")

REM Introducimos en el fichero cada una de las lineas obtenidas
For Each objEvent in colLoggedEvents
  objTextFile.WriteLine(objEvent.EventCode & vbTab _
    & objEvent.TimeWritten & vbTab & _
      objEvent.Message)
Next

Al ejecutar el anterior script, en el fichero «informe.txt» tendremos los eventos registrados en el Visor de Sucesos para el evento 6009, Inicio de servidor. Modificando los valores del EventID, dependiendo del tipo de evento que deseemos buscar, o el nombre de la máquina (ya que con un usuario privilegiado en el dominio podriamos acceder a máquinas remotas) obtendremos informes completos sobre las caídas y reinicios de los sistemas de nuestra red, que podremos exportar y tratar de manera más automatizada que visualizando el visor de sucesos.

El resto de aplicaciones y posibilidades se dejan como ejercicio.

Comments

  1. Hola, me parece muy interesante tu artículo. Tengo una duda al respecto. Si quisiera obtener un registro de todos los eventos 6006, osea del cierre del pc, que debería hacer? porque viendo el visor de sucesos no me salen todos los 6006 de cada día que he abierto y cerrado el pc. Hay algún tipo de registro que haga la media del cierre de todos los dias? Muchas gracias,

    Marina