none
Ferramenta monitoração SQL Server + Host RRS feed

  • Pergunta

  • Olá Pessoal, 

    Estou precisando monitorar meus servidores SQL Server a nível de database, instância e de máquina em uma unica ferramenta. ex:

    Monitoração de logs de diversas databases, espaço livre em cada file group, consumo de memória da instância, consumo de processador e memoria total do host.

    Tentei implementar o Nagios XI, mas ele só me deixa colocar uma única instância e uma unica database por Host. Preciso que isso seja mais amplo.

    Alguem conhece alguma ferramenta que possa fazer isso?

    Muito Obrigado,

    Lucas Andrade

    segunda-feira, 21 de maio de 2012 18:02

Respostas

  • Olá Lucas tudo bem?

    Ferramentas pagas há algumas opções interessantes como HP BSM (Sitescope é muito bacana) e em um nível mais barato tem o SQLMonitor citado pelo Junior que também é bem legal.

    Ferramentas gratuitas com a mesma qualidade da HP e Red-gate é difícil, eu usei (e ainda uso) rotinas baseadas em Powershell consultando objetos WMI, funciona muito bem e você consegue monitorar qualquer contador disponível no S.O, SQL Server, etc. Eu guardo os resultados do script em uma tabela, assim eu também consigo ter um histórico de alta qualidade, gerar relatórios via Reporting Services e alertas via e-mail. Funciona muito bem.

    A solução consiste basicamente em:

    1-Definir uma credencial

    2-Definir um proxy powershell

    3-Criar um job para execução do script

    A parte mais complexa é a criação do script mesmo.

    Veja um exemplo de como monitorar enfileiramento de disco:

    $Queue	=get-wmiobject -query "select Name,AvgDiskQueueLength from Win32_Perfformatteddata_perfdisk_physicaldisk where Name<>'_Total'" -computername NOMEDOSERVIDOR
    	foreach ($objItem in $Queue)
    	{
    		$ContadorSrv = $objItem.Name
    		$Contador[$ContadorSrv]=$objItem.AvgDiskQueueLength
    		$Valor=$objItem.AvgDiskQueueLength
    		$Command.CommandText = "Insert into TB_CONTADORESWMI ([Server],[Name],[Value]) values ($AspasNOMEDOSERVIDOR$Aspas,$aspas$ContadorSrv-AvgDiskQueueLength$Aspas,$Valor)"
    		$Command.ExecuteNonQuery()
    	}

    Com os dados armazenados você pode colocar por exemplo uma trigger na tabela que dispara um e-mail, ou ainda usar o próprio powershell para enviar e-mails:

    $AgentSQL=get-wmiobject -query "Select name,state from win32_service where name like 'SQL%AGENT%' and state = 'Stopped'" -computername NOMEDOSERVIDOR |Select -Unique
    foreach ($objItem in $AgentSQL)
    {
    	if ($objItem.name -match "NOMEDAINSTANCIA")
    	{
    		if($objItem.state -eq "Stopped")
    		{
    			$Mensagem="O Agent do SQL Server está desabilitado-" + NOMEDOSERVIDOR + ":" + $objItem.state
    			$smtp = New-Object Net.Mail.SmtpClient("SERVIDOR.EXCHANGE")
    			$smtp.Send("ricardomuramatsu@hotmail.com","destinatario@dominio.com.br","Agente SQL Desabilitado",$Mensagem)
    		}
    	
    	}
    }

    Parece complexo, mas depois de me acostumar com o PS, passei a usá-lo para tarefas comuns também, além de ser um ótimo aprendizado.


    View Ricardo Muramatsu's profile on LinkedIn

    terça-feira, 29 de maio de 2012 15:21

Todas as Respostas

  • Olá Rafael,

    Não conheço nenhuma ferramenta que faça isso.

    Veja esta te mostra algumas coisas muito importes, e permite que você monitore várias Base de Dados.

    http://www.confio.com/performance/sql-server/ignite/

    Qualquer duvida estou a disposição.


    Keny Maciel da Silva
    DBA SQL-Server
    MCTS SQL Server 2008 Implementation and Maintenance
    Email: kenymaciel@gmail.com

    domingo, 27 de maio de 2012 01:36
  • Rafael,

    O que você deseja monitorar? Inicialmente o SQL Server Profiler não ajudaria?

    Existem ferramentas da Red-Gate, Apex e Idera que podem ser utéis, inclusive existe uma chamada SQLMonitor bastante prática e de fácil utilização.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 28 de maio de 2012 17:33
    Moderador
  • Olá Amigos,

    O SQL Server Profiler não ajuda muito no meu caso, pois preciso que uma equipe cuide dos alertas. Essa equipe precisa ter acesso a um sistema de monitoração que indique a saúde do SQL Server. Mesmo quando não haja ninguém monitorando, preciso ser alertado por email ou SMS de que algo não está bem a nível de Host, instancia e database.

    Atualmente estou realizando esse serviço para um órgão governamental e caso a ferramenta de monitoração seja paga, isso precisa passar por aprovação de 20 setores, abrir licitação, etc. O que demora muito o processo de aquisição. Mas se não houver outra forma...

    Estou implantando dois softwares de monitoração (Nagios XI e Zabbix).

    O nagios consegue me passar tudo o que quero (monitor de servidor, up-time, consumo de processador, memoria, rede, disco, partições, serviços; informações de Instância geral; informações da database como log, transações, etc..) o problema do nagios é quando eu tento colocar mais de uma instancia e/ou database. Ele substitui a database que já está no monitoramento. Só posso adicionar mais de uma instancia/database caso eu faca a adição manual, sem usar nenhum tipo de wizzard. Essa forma é muito custosa, visto que tenho mais de 10 servidores SQL Server onde cada servidor possui inúmeras instancias e cada instancia, dezenas de databases, onde alguns servidores estão clusterizados com databases que já ultrapassam 4TB...

    O Zabbix ainda não consegui colocar p coletar dados do SQL Server, estou procurando documentação p isso.

    Atualmente eu utilizo Planos de manutenção para verificar o estado do SQL Server e recebo o resultado por email, mas isso não é muito efetivo. Não consigo gerar relatórios, tempo de indisponibilidade, o custo de processamento do plano de manutenção é alto, só posso rodar o mesmo poucas vezes ao dia. Não consigo uma monitoração efetiva.

    PS: Quem é Rafael?

    Muito Obrigado,

    Lucas Andrade

    segunda-feira, 28 de maio de 2012 18:06
  • Olá Lucas tudo bem?

    Ferramentas pagas há algumas opções interessantes como HP BSM (Sitescope é muito bacana) e em um nível mais barato tem o SQLMonitor citado pelo Junior que também é bem legal.

    Ferramentas gratuitas com a mesma qualidade da HP e Red-gate é difícil, eu usei (e ainda uso) rotinas baseadas em Powershell consultando objetos WMI, funciona muito bem e você consegue monitorar qualquer contador disponível no S.O, SQL Server, etc. Eu guardo os resultados do script em uma tabela, assim eu também consigo ter um histórico de alta qualidade, gerar relatórios via Reporting Services e alertas via e-mail. Funciona muito bem.

    A solução consiste basicamente em:

    1-Definir uma credencial

    2-Definir um proxy powershell

    3-Criar um job para execução do script

    A parte mais complexa é a criação do script mesmo.

    Veja um exemplo de como monitorar enfileiramento de disco:

    $Queue	=get-wmiobject -query "select Name,AvgDiskQueueLength from Win32_Perfformatteddata_perfdisk_physicaldisk where Name<>'_Total'" -computername NOMEDOSERVIDOR
    	foreach ($objItem in $Queue)
    	{
    		$ContadorSrv = $objItem.Name
    		$Contador[$ContadorSrv]=$objItem.AvgDiskQueueLength
    		$Valor=$objItem.AvgDiskQueueLength
    		$Command.CommandText = "Insert into TB_CONTADORESWMI ([Server],[Name],[Value]) values ($AspasNOMEDOSERVIDOR$Aspas,$aspas$ContadorSrv-AvgDiskQueueLength$Aspas,$Valor)"
    		$Command.ExecuteNonQuery()
    	}

    Com os dados armazenados você pode colocar por exemplo uma trigger na tabela que dispara um e-mail, ou ainda usar o próprio powershell para enviar e-mails:

    $AgentSQL=get-wmiobject -query "Select name,state from win32_service where name like 'SQL%AGENT%' and state = 'Stopped'" -computername NOMEDOSERVIDOR |Select -Unique
    foreach ($objItem in $AgentSQL)
    {
    	if ($objItem.name -match "NOMEDAINSTANCIA")
    	{
    		if($objItem.state -eq "Stopped")
    		{
    			$Mensagem="O Agent do SQL Server está desabilitado-" + NOMEDOSERVIDOR + ":" + $objItem.state
    			$smtp = New-Object Net.Mail.SmtpClient("SERVIDOR.EXCHANGE")
    			$smtp.Send("ricardomuramatsu@hotmail.com","destinatario@dominio.com.br","Agente SQL Desabilitado",$Mensagem)
    		}
    	
    	}
    }

    Parece complexo, mas depois de me acostumar com o PS, passei a usá-lo para tarefas comuns também, além de ser um ótimo aprendizado.


    View Ricardo Muramatsu's profile on LinkedIn

    terça-feira, 29 de maio de 2012 15:21
  • Olá Amigo,

    mas dessa forma eu não tenho um ambiente de gerenciamento centralizado e vou precisar criar scripts diferenciados para cada database de cada instancia de cada servidor. vou levar anos p monitorar tudo...

    quarta-feira, 30 de maio de 2012 14:45
  • Nada cara, na verdade você pode centralizar isso tudo em um único servidor exatamente com eu faço aqui:

    Um arquivo .txt no servidor (ex:c:\scripts\servidores.txt)

    No script você pode definir um parâmetro, ler o arquivo texto (ou uma tabela) e mandar executar remotamente:

    $arrComputers = get-Content -Path "c:\scripts\servidores.txt"
    foreach ($strComputer in $arrComputers)
    {
    	$SO		=Get-WmiObject -query "Select Version from Win32_OperatingSystem" -computer $strComputer
    	write-host $SO
    }

    Caso precise permitir a execução de scripts remotos é só alterar o nível de permissão do powershell em cada um dos servidor (isto sim você vai ter que rodar um por um mas apenas uma vez):

    Get-ExecutionPolicy
    Se o resultado for Unrestricted, beleza não precisa fazer nada e seu scritp vai funcionar remotamente a partir de um servidor centralizador.
    Se for Restricted execute:
    Set-ExecutionPolicy unrestricted
    
    Alteração da Diretiva de Execução
    A diretiva de execução ajuda a proteger contra scripts não confiáveis. A alteração da diretiva de execução pode implicar em exposição aos riscos de segurança descritos no tópico
    da ajuda about_Execution_Policies. Deseja alterar a diretiva de execução?
    [S] Sim  [N] Não  [U] Suspender  [?] Ajuda (o padrão é "S"):

    Editado:

    Criei um Post no Wiki sobre este assunto, quem quiser colaborar é muito bem vindo:

    http://social.technet.microsoft.com/wiki/pt-br/contents/articles/11802.monitorando-o-sql-server-com-powershell.aspx

    Abraço.


    View Ricardo Muramatsu's profile on LinkedIn


    quarta-feira, 30 de maio de 2012 21:43