segunda-feira, 30 de maio de 2011

Monitorando Hosts Windows com Zabbix e PerfCounter (Contadores de Performance do Windows)

Introdução:
O Zabbix é uma ferramenta eficiente de monitoramento e gerência de rede, que permite integração com alguns elementos, nesse tutorial vamos abordar o monitoramento de hosts Windows utilizando o Zabbix e os Contadores de Performanace do Windows (PerfCounter).

Pré-Requisitos:
O único pré-requisito necessário é a instalação do Agente Zabbix no host Windows.

Determinando o que será monitorado:
Nos hosts Windows temos um aplicativo chamado Monitor de Desempenho, ele pode ser acessado através do Menu Iniciar // Executar // perfmon

Neste software podemos facilmente visualizar os Objetos disponíveis e os contadores que cada objeto possui, bem como testar a leitura das informações, visto que determinados contadores só funcionam, por exemplo, se o serviço ao qual ele está relacionado estiver em execução.
Uma maneira prática de obter uma lista destes objetos e seus contadores é através do comando typeperf -qx. Para isso clique no Menu Iniciar // Executar // cmd

 
Na janela de prompt de comando que surgiu digite:
typeperf -qx -o c:\objetos.txt


Este comando vai trazer a lista de todos os contadores instalados, redirecionar a saída através da opção -o, para o arquivo c:\objetos.txt, para outras opções consulte a ajuda, através do comando "typeperf /?".

Agora basta olhar no arquivo gerado as opções disponíveis, escolher o que será monitorado e testar através do Monitor de Desempenho.

Testando a Leitura do Parâmetro via Servidor Zabbix:
A leitura do parametro é feita através do comando zabbix_get -s IP -k perf_counter["\Contador\Objeto"], exatamentamente da mesma maneira que aparece no arquivo gerado (Com espaço, acentos, maiúsculas e minúsculas, símbolos, etc), por exemplo:
zabbix_get -s IP -k perf_counter["\Serviços de Terminal\Sessões Ativas"]
1.000000
zabbix_get -s IP -k perf_counter["\Interface de rede(AMD PCNET Family PCI Ethernet Adapter - Miniporta do agendador de pacotes
)\Bytes recebidos/s"]
882.030062
zabbix_get -s 143.106.113.8 -k perf_counter["\Interface de rede(AMD PCNET Family PCI Ethernet Adapter - Miniporta do agendador de pacotes)\Bytes enviados/s"]
357.157417


Com o resultado destes comandos já dá para determinar o tipo de dados recebido (Integer, Float, Text)

Criação do Item no Zabbix:
O item, é um item normal, do tipo "Zabbix Agente", o detalhe está na chave que deve ser a mesma entrada recebida pelo comando perf_counter.
Type: Zabbix Agent
Key: perf_counter["\Interface de rede(AMD PCNET Family PCI Ethernet Adapter - Miniporta do agendador de pacotes)\Bytes recebidos/s"]

Monitorando Hosts Windows com Idiomas Diferentes:
O problema destes contadores e seus objetos é que eles são traduzidos para o idioma do host, neste caso mesmo que eu tenha dois Hosts com o mesmo Sistema Operacional Windows, da mesma Versão, mas em idiomas diferentes, esses contadores e objetos terão nomes diferentes como por exemplo, "\Interface de rede\Bytes recebidos/s" no Host A e "\Network Interface\Bytes Received/Sec" no Host B. Dá para imaginar que isso vai ser um grande problema, por exemplo, se eu administrar um data center com máquinas em diversos idiomas.
Mas este problema está documentado no Manual do Zabbix, esse contadores possuem além da identificação textual, uma identificação númérica que é universal, que pode ser vizualizada através do Editor de Registros do Windows.

Acesse Menu Iniciar // Executar // regedit

Dentro do Editor de Registros, navegue pela estrutura "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\", dentro desse diretório teremos dois diretórios:
009 - Relação dos contadores e seus identificadores númericos no Idioma Inglês
016 - Relação dos contadores e seus identificadores númericos no Idioma Português do Brasil

Nesta relação, abrindo o objeto "Counter" encontraremos as seguintes definições:
2176
Serviços de terminal

2180
Sessões ativas

Ou seja se realizarmos a leitura:
zabbix_get -s IP -k perf_counter["\Serviços de Terminal\Sessões Ativas"]
ou
zabbix_get -s IP -k perf_counter["\2176\2180"]

Receberemos a mesma informação, com a vantagem de que no segundo exemplo, podemos usar um único item para monitorar vários hosts de idiomas diferentes.