Monitorizar los Servicios 3

 


Monitorizar los cambios en el estado de los servicios mediante Registro de Sucesos


Los cambios en el estado de los servicios no se registraban en en el registro de sistema en versiones de Windows anteriores a Windows Server 2003 y Windows XP. En su lugar, un evento relacionado con un servicio sólo se registraba cuando el servicio fallaba. Esto no ayuda a monitorizar los servicios y su rendimiento en toda la red. Aunque una herramienta de monitorización puede descubrir si un servicio ha sido detenido, no podemos saber quién lo hizo, cuando ni porqué. Por ello, desconocemos si otro administrador o usuario avanzado ha detenido el servicio intencionadamente, o si se ha detenido por un problema de hardware o software.


En Windows Server 2003 y Windows XP professional, sin embargo, los sucesos se registran automáticamente en el registro de sistema siempre que se produzca un cambio en el estado del servicio, o siempre que un código de control se le envió al servicio. Por ejemplo, cuando un servicio cambia de estado, un suceso 7036 se registra:


evento7036


Este es el evento provocado por la detención del servicio BITS que realicé manualmente para que el script del artículo anterior detectase y guardase en un archivo el cambio de estado de un servicio.


Asimismo, un evento 7035 se grabará cada vez que un código de control sea enviado al servicio.


Ya que podemos usar WMI para recuperar eventos seleccionados desde el registro de sucesos, podemos seguir la fiabilidad del servicio periódicamente consultando al registro de sucesos y anotando las fechas y horas en que los servicios se detienen o inician.



   1: ‘Este script sirve para comprobar cambios de estado de los servicios
   2: ‘ usando event log y anotándolo en un archivo de texto
   3:  
   4: ‘(c) Juansa 29-11-2008
   5:  
   6:  
   7:  
   8: Const ForReading = 1, ForWriting = 2
   9: Dim TabStop, NewLine
  10: TabStop = Chr(9)
  11: NewLine = Chr(10)
  12: Set objFSO = CreateObject(«Scripting.FileSystemObject»)
  13: Set objFile = objFSO.OpenTextFile(«C:scriptsServicios_cambios.txt», ForWriting, True)
  14:  
  15: Set dtmConvertedDate = CreateObject(«wbemScripting.SwbemDateTime»)
  16:  
  17: StrComputer = «.»
  18: Set objWMIService = GetObject(«winmgmts:» & «{impersonationLevel=Impersonate}!\» & strComputer &  «rootcimv2»)
  19:  
  20: Set ColServiceEvents = objWMIService.ExecQuery («SELECT * FROM Win32_NTLogEvent WHERE LogFile =  ‘System’ AND « & «EventCode = ‘7036’»)
  21:  
  22: For Each strEvent in ColServiceEvents
  23:     dtmConvertedDate.Value = strEvent.TimeWritten
  24:     objFile.WriteLine dtmConvertedDate.GetVarDate
  25:     objFile.WriteLine strEvent.Message
  26: Next

 


Cuyo resultado nos da:


eventQuery

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *