Usuário com melhor resposta
Monitorar Consumo de CPU

Pergunta
-
Prezados,<o:p></o:p>
Gostaria de saber se tem alguma forma que eu possa monitorar o uso de CPU em meu servidor e em minha maquinas virtuais, pois estou tendo problemas, porque alguns sistema instalados no servidor as vezes consomem muito CPU fazendo o servidor travar e os outros sistemas nele também.<o:p></o:p>
Teria como criar um monitoramento que me enviasse um alerta por e-mail dizendo que o CPU aumentou?<o:p></o:p>
[]'s, Maikon Pablo Rodrigues
Respostas
-
Boa tarde Pablo
Voce pode juntar as duas soluções em um único Script.vbs e criar um Task no windows pra rodar em um tempo determinado.
O código abaixo utiliza o WMI pra pegar a informação que voce esta precisando, basta voce trocar o inteiro em : PercentProcessorTime > 1 pelo numero que voce precisa :
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _ "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where PercentProcessorTime > 1",,48) For Each objItem in colItems Wscript.Echo "-----------------------------------" Wscript.Echo "Win32_PerfFormattedData_PerfProc_Process instance" Wscript.Echo "-----------------------------------" Wscript.Echo "Process Name: " & objitem.NAme Wscript.Echo "PercentProcessorTime: " & objItem.PercentProcessorTime Next
E aqui voce tem opções pra enviar o email:
- Marcado como Resposta MpR_Pablo quarta-feira, 22 de fevereiro de 2012 12:51
-
Consegui achar um jeito de monitorar, pegando o processo _Total que especifica o CPU ocioso do servidor se este CPU esta menor que 20, quer dizer que o CPU do servidor esta usando mais de 80% de CPU assim ele envia um e-mail dizendo que o processo tal da maquina tal esta consumindo muito CPU.
Segue abaixo o Script:
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery( _ "SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfProc_Process where Name = '_Total'") For Each objItem in colItems if objItem.PercentProcessorTime < 95 Then Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Processamento" objMessage.From = "xxx" objMessage.To = "xxx" objMessage.TextBody = "Nome=" & objitem.NAme & " " & objItem.PercentProcessorTime & strComputer '==Esta seção fornece as informações de configuração para o servidor SMTP remoto. objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendusing") = xxx 'Nome ou IP do servidor SMTP remoto objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxx" 'Tipo de autenticação, NONE, Básico (Base64 encoded), NTLM objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = xxx 'O seu UserID no servidor SMTP objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx" 'Sua senha no servidor SMTP objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxx" 'Porta do servidor (normalmente 25) objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = xxx 'Use SSL para a conexão (falso ou verdadeiro) objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False 'Tempo limite de conexão em segundos (o tempo máximo CDO tentará estabelecer uma conexão com o servidor SMTP) objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 objMessage.Configuration.Fields.Update '==Fim SMTP remoto seção de configuração do servidor== objMessage.Send End if next
Obrigado a todos que ajudaram.
[]'s, Maikon Pablo Rodrigues
- Marcado como Resposta MpR_Pablo quarta-feira, 22 de fevereiro de 2012 12:55
Todas as Respostas
-
-
Pesquisei sobre ele e vi que ele faz mais coisas do que somente monitorar o servidor, mas queria algo especifico que me avisasse por e-mail ou qualquer tipo de alerta, assim não precisaria ficar sempre monitorando.
Uma coisa mais simples e funcional.
[]'s, Maikon Pablo Rodrigues
-
Boa tarde Pablo
Voce pode juntar as duas soluções em um único Script.vbs e criar um Task no windows pra rodar em um tempo determinado.
O código abaixo utiliza o WMI pra pegar a informação que voce esta precisando, basta voce trocar o inteiro em : PercentProcessorTime > 1 pelo numero que voce precisa :
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _ "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where PercentProcessorTime > 1",,48) For Each objItem in colItems Wscript.Echo "-----------------------------------" Wscript.Echo "Win32_PerfFormattedData_PerfProc_Process instance" Wscript.Echo "-----------------------------------" Wscript.Echo "Process Name: " & objitem.NAme Wscript.Echo "PercentProcessorTime: " & objItem.PercentProcessorTime Next
E aqui voce tem opções pra enviar o email:
- Marcado como Resposta MpR_Pablo quarta-feira, 22 de fevereiro de 2012 12:51
-
-
-
Estou usando a seguinte sequencia, mas ele me enforma mesmo assim processos que não estão usando mais de 80% de CPU
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_PerfFormattedData_PerfProc_Process where PercentProcessorTime > 80",,48)
For Each objItem in colItems
if objItem.PercentProcessorTime > 80 Then
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Processamento"
objMessage.From = "e-mailde"
objMessage.To = "e-mailpara"
objMessage.TextBody = "OK Nome=" & objitem.NAme
'==Esta seção fornece as informações de configuração para o servidor SMTP remoto.
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Nome ou IP do servidor SMTP remoto
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxx"
'Tipo de autenticação, NONE, Básico (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'O seu UserID no servidor SMTP
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx"
'Sua senha no servidor SMTP
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxx"
'Porta do servidor (normalmente 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = xx
'Use SSL para a conexão (falso ou verdadeiro)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
'Tempo limite de conexão em segundos (o tempo máximo CDO tentará estabelecer uma conexão com o servidor SMTP)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update
'==Fim SMTP remoto seção de configuração do servidor==
objMessage.Send
End if
nextConsegues me dizer o que tem de errado ai?
[]'s, Maikon Pablo Rodrigues
-
Consegui achar um jeito de monitorar, pegando o processo _Total que especifica o CPU ocioso do servidor se este CPU esta menor que 20, quer dizer que o CPU do servidor esta usando mais de 80% de CPU assim ele envia um e-mail dizendo que o processo tal da maquina tal esta consumindo muito CPU.
Segue abaixo o Script:
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery( _ "SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfProc_Process where Name = '_Total'") For Each objItem in colItems if objItem.PercentProcessorTime < 95 Then Set objMessage = CreateObject("CDO.Message") objMessage.Subject = "Processamento" objMessage.From = "xxx" objMessage.To = "xxx" objMessage.TextBody = "Nome=" & objitem.NAme & " " & objItem.PercentProcessorTime & strComputer '==Esta seção fornece as informações de configuração para o servidor SMTP remoto. objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendusing") = xxx 'Nome ou IP do servidor SMTP remoto objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxx" 'Tipo de autenticação, NONE, Básico (Base64 encoded), NTLM objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = xxx 'O seu UserID no servidor SMTP objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx" 'Sua senha no servidor SMTP objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxx" 'Porta do servidor (normalmente 25) objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = xxx 'Use SSL para a conexão (falso ou verdadeiro) objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False 'Tempo limite de conexão em segundos (o tempo máximo CDO tentará estabelecer uma conexão com o servidor SMTP) objMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 objMessage.Configuration.Fields.Update '==Fim SMTP remoto seção de configuração do servidor== objMessage.Send End if next
Obrigado a todos que ajudaram.
[]'s, Maikon Pablo Rodrigues
- Marcado como Resposta MpR_Pablo quarta-feira, 22 de fevereiro de 2012 12:55
-
Oi Pablo desculpe não ter aparecido antes.
Se resolveu o problema beleza, na verdade não sabia que com "_Total" isto poderia ser solucionado.
Vi acima que voce perguntou sobre onde guardar esta informação: Voce pode guardar em um mdb se quiser fazendo uma referencia ao banco no proprio script.
Se precisar de ajuda pra isto to aqui.
Abraço.
Matheus Finotti Desenvolvimento de Software(Internet / Desktop) Informática e Assessoria a Clientes
-