Pular para o conteúdo principal

Monitorar servidor Apache pelo Zabbix

Estou com este post pronto deste 18/07/2012, porém esqueci de agendar a data da postagem e só agora, revisando meus posts, vi que este ainda não estava ativo. Mas agora ele está aí.

Outro dia estava procurando detalhes de como monitorar o servidor Apache pelo Zabbix e encontrei um texto na Wiki do Zabbix. No tópico da Wiki tem três métodos explicando como fazer o monitoramento do servidor Apache, dois com Python e um em bash script.

Na Wiki tem disponível o código do script e uma template para coletar os itens.

Eu modifiquei o script para tornar a consulta mais rápida usando fgrep e awk ao invés de dar um echo no arquivo temporário e logo em seguida usar grep e awk, como no script disponível na Wiki.



Crie o seguinte script com o nome apache.sh e salve onde achar necessário (eu coloco os meus scripts em /opt/zabbix/externalscripts/):
#!/bin/bash
host="localhost"
resposta=0
tmp="/opt/zabbix/tmp/apache_status"
pega_status=`wget --quiet -O $tmp http://$host/server-status?auto`
case $1 in
   TotalAccesses)
      $pega_status
      fgrep "Total Accesses:" $tmp | awk '{print $3}'
      resposta=$?;;
   TotalKBytes)
      $pega_status
      fgrep "Total kBytes:" $tmp | awk '{print $3}'
      resposta=$?;;
   Uptime)
      $pega_status
      fgrep "Uptime:" $tmp | awk '{print $2}'
      resposta=$?;;
   ReqPerSec)
      $pega_status
      fgrep "ReqPerSec:" $tmp | awk '{print $2}'
      resposta=$?;;
   BytesPerSec)
      $pega_status
      fgrep "BytesPerSec:" $tmp | awk '{print $2}'
      resposta=$?;;
   BytesPerReq)
      $pega_status
      fgrep "BytesPerReq:" $tmp | awk '{print $2}'
      resposta=$?;;
   BusyWorkers)
      $pega_status
      fgrep "BusyWorkers:" $tmp | awk '{print $2}'
      resposta=$?;;
   IdleWorkers)
      $pega_status
      fgrep "IdleWorkers:" $tmp | awk '{print $2}'
      resposta=$?;;
   WaitingForConnection)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "_" } ; { print NF-1 }'
      resposta=$?;;
   StartingUp)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "S" } ; { print NF-1 }'
      resposta=$?;;
   ReadingRequest)
      $pega_status
      fgrep "Scoreboard:" $tmp| awk '{print $2}'| awk 'BEGIN { FS = "R" } ; { print NF-1 }'
      resposta=$?;;
   SendingReply)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "W" } ; { print NF-1 }'
      resposta=$?;;
   KeepAlive)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "K" } ; { print NF-1 }'
      resposta=$?;;
   DNSLookup)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "D" } ; { print NF-1 }'
      resposta=$?;;
   ClosingConnection)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "C" } ; { print NF-1 }'
      resposta=$?;;
   Logging)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "L" } ; { print NF-1 }'
      resposta=$?;;
   GracefullyFinishing)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "G" } ; { print NF-1 }'
      resposta=$?;;
  IdleCleanupOfWorker)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "I" } ; { print NF-1 }'
      resposta=$?;;
  OpenSlotWithNoCurrentProcess)
      $pega_status
      fgrep "Scoreboard:" $tmp | awk '{print $2}'| awk 'BEGIN { FS = "." } ; { print NF-1 }'
      resposta=$?;;
   *)
      echo "ZBX_NOTSUPPORTED"
esac
if [ "$resposta" -ne 0 ]; then
   echo "ZBX_NOTSUPPORTED"
fi
exit $resposta
Após copiar o script para a pasta desejada (eu coloco meus scripts utilizados pelo Zabbix em /opt/zabbix/externalscripts/), precisamos editar o arquivo de configuração zabbix_agentd.conf (no meu caso em /etc/zabbix/zabbix_agentd.conf) e adicionar no final do arquivo:
# Monitoramento Apache
UserParameter=apache[*],/opt/zabbix/externalscripts/apache.sh '$1'
Salve o arquivo e reinicie o servidor do agente do Zabbix.

O que acabamos de fazer foi incluir um monitoramento inexistente no Zabbix. Porém, a flexibilidade oferecida pelo Zabbix nos permite entregar apenas o resultado de um monitoramento, o restante ele faz (coleta, alarmes etc).

Explicando a configuração do UserParameter que acabamos de incluir no arquivo de configuração

O Zabbix irá executar o script apache.sh com o parâmetro que está cadastrado no item.
Por exemplo: Imagine que o item seja 'BytesPerReq'. Assim que o Zabbix for coletar o item, o script será executado com o parâmetro 'BytesPerReq' que executará a consulta na página de status do Apache e retornará apenas o valor do item que desejamos coletar.

Eu modifiquei a template disponível na Wiki do Zabbix, pois ela não tinha gráfico configurado. Para baixá-la, clique aqui.

Após baixar a template, basta exportar o e associar ao host que será monitorado.

Configurar apache para permitir a consulta dos dados

Não basta apenas configurar o Zabbix para que o monitoramento do servidor Apache funcione, é preciso liberarmos no arquivo de configuração (no meu caso /etc/httpd/conf/httpd.conf) do Apache o seguinte parâmetro:
ExtendedStatus On
Procure a string ExtendedStatus no arquivo e verifique se esta opção está comentada. Se sim, apenas descomente. Caso esteja com a opção Off, altere para On.

Em seguida, cole o trecho abaixo no final do mesmo arquivo:
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
Reinicie o serviço do Apache para que as configurações tenham efeito.

Bem simples de fazer o monitoramento do servidor Apache. Veja abaixo a tela de um gráfico com os itens disponíveis deste monitoramento.


Agora é só você adicionar as triggers de acordo com a sua necessidade e ficar tranquilo.

Até mais.

Comentários

  1. Amigo boa noite, será que existe uma forma de checar o status do apache utilizando-se o próprio index do site ao invés de fazer desta forma, pois temos diversos servidores na rede, alguns até mesmo de terceiros e gostaria de monitora-los sem ter que entrar em contato com os responsáveis para fazer essa modificação no servidor.

    ResponderExcluir
    Respostas
    1. Infelizmente não tem como, pois é necessário você liberar o acesso pelo servidor que provê o serviço.

      Excluir
  2. Muito bom, parabéns pela iniciativa!

    ResponderExcluir
  3. Janssen se puder me ajudar, fiz as conf como esta no seu blog, mas no executar o comando a baixo não da resultado correto.

    # zabbix_agentd -t apache[TotalAccesses]
    apache [m|ZBX_NOTSUPPORTED]

    Obrigado

    ResponderExcluir
    Respostas
    1. Mário,

      Execute o script no shell do linux conforme o exemplo:
      sh -x /opt/zabbix/externalscripts/apache.sh TotalAccesses

      Copie o resultado aqui para mim.

      Excluir
    2. sh -x /opt/zabbix/scripts/apache.sh TotalAccesses
      + host=localhost
      + resposta=0
      + tmp=/opt/zabbix/tmp/apache_status
      ++ wget --quiet -O /opt/zabbix/tmp/apache_status 'http://localhost/server-status?auto'
      + pega_status=
      + case $1 in
      + fgrep 'Total Accesses:' /opt/zabbix/tmp/apache_status
      + awk '{print $3}'
      + resposta=0
      + '[' 0 -ne 0 ']'
      + exit 0

      Excluir
    3. Você está monitorando o Apache no mesmo servidor que está o Zabbix?

      Se a resposta for não, você tem que colocar em Allow from no arquivo de configuração do Apache o IP do servidor Zabbix.

      Você também pode testar a abertura da página no navegador -> http://localhost/server-status

      Vê se está retornando os valores no navegador.

      Excluir
  4. Janssen, tudo bom?

    Cara fiz a configuração, conforme informado em seu post, porém quando adiciono o template ao host os item ficam inativos, informando que o Zabbix Agent não suporta.

    Consegue me ajudar ?

    ResponderExcluir
  5. Ola Boa tarde
    Em qual versão do zabbix_server e zabbix_agent foi realizada essa configuração?

    Aqui para mim até aparece o gráfico porem não registra nenhum dado!

    Ps: Seu Livre é muito bom Janssen, Parabéns!

    ResponderExcluir
    Respostas
    1. Alan,

      Funciona nas versões 2.0.x, 2.2.x e 2.4.x.
      O gráfico plota alguma informação? Por que aparecer é relativo, pois pode exibir os gráficos sem informações. Verifique o log do Zabbix para verificarr a presença de algum erro e me reporte para te ajudar.

      Excluir
    2. Comigo os items aparecem com "não suportados". Qual seria o problema?

      Excluir
    3. Aqui a mesma coisa. Os ítens ficam como "não suportado" no zabbix. A coleta ocorre normal, o script funciona mas o zabbix não pega as infos.

      Excluir
    4. Rodrigo,

      Criamos o fórum http://zabbixoverflow.com para concentrarmos diversas dúvidas para resolução de problemas. Teria como você acessar o fórum e postar esse problema por lá? Informe qual a versão do Zabbix e sistema operacional que você está usando. Vou reproduzir esse monitoramento para ver se encontro algo de diferente nas versões atuais do Zabbix, já que você mencionou que o script está funcionando.

      Excluir
  6. Tem que atualizar a versão do agente do zabbix, por isso diz não suportado

    ResponderExcluir
  7. Aqui deu o mesmo erro.

    Alguem tem a solução? nao achei o topico referente a esse assunto no forum

    ResponderExcluir
  8. Atualização do script e também do arquivo da template -> https://github.com/janssenlima/ZabbixOverFlow

    ResponderExcluir
  9. Janssen segui todos os passos acima e não consigo monitorar. Os itens ficam não suportados. Estou no zabbix 3.0.4, você já testou nessa versão? Abraço.

    ResponderExcluir
  10. Tá dificil o meu tabém dá o mesmo erro

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Integração Zabbix + GLPI

Versão atualizada Essa atualização é em consequência de pedidos vindo dos gringos e também a pedido da Zabbix SIA por ser o 4.º conteúdo mais popular no recém criado  https://share.zabbix.com/  e o 1.º entre os brasileiros.   Para conferir a lista dos mais populares, acesse  https://share.zabbix.com/popular Há um tempo que eu queria desenvolver algo para integrar o Zabbix a algum outro sistema. Esse ano surgiu uma oportunidade de implementação de alguns sistemas de inventário e gerenciamento de chamados. Logo pensei em fazer uma integração para abertura e fechamento automático dos tickets quando ocorresse algum problema que o Zabbix identificasse. Porém, o meu entusiasmo foi logo caindo quando eu percebi que não era uma coisa tão trivial de se fazer. Pesquisei várias fontes em busca de informações a respeito dessa integração, porém não passavam de tutoriais ensinando como abrir tickets no GLPI enviando um e-mail. Estudando mais um pouco o GLPI, percebi que não era possível

Primeiros passos com API do Zabbix

Bom galera, Faz tempo que não posto nada sobre Zabbix. Então, quis presentear vocês com um conteúdo mais avançado. Espero que ao menos 1 vez por mês coloco mais assuntos como esse no blog. Vou mostrar para vocês como utilizar a API do Zabbix. Antes vou explicar de forma básica o que API para os que não sabem do que se trata. Programadores tem a obrigação de saber.  :P - API  - Application Programming Interface  - é um conjunto de rotinas e padrões estabelecidos por um software. Isso permite que aplicações de terceiros utilizem as funcionalidades oferecidas pelo software.

Usando LSOF para verificar porta usada por determinado processo

Outro dia fui realizar alguns testes em aplicações rodando no JBoss e verifiquei que nenhuma aplicação estava funcionando. Verifiquei no log do JBoss que o serviço iniciava e ocorria vários erros, informando que não conseguia fazer o deploy das aplicações. Mesmo parando o serviço do JBoss, verifiquei com a ferramenta nmap que a porta 8080 continuava aberta.