Monitoramento e reinicialização automática do Nginx com Zabbix

Configuração do lado do agente Zabbix

No arquivo de configuração do Nginx (nginx.conf), adicione o seguinte local:

location /ngx_status {
    stub_status on;
    access_log off;
    allow 10.0.10.5;   # IP do agente Zabbix
    allow 10.0.30.1;   # IP do servidor Zabbix
    deny all;
}

Teste acessando a URL:

[node1.jfxx.wsd root@10.0.10.5 /usr/local/nginx/conf]# curl 10.0.10.5/ngx_status
Active connections: 5 
server accepts handled requests
 12143 12143 25709 
Reading: 0 Writing: 5 Waiting: 0

Resultado bem-sucedido.

Script de coleta de métricas do Nginx

Crie o script nginx_status.sh no diretório do binário do Zabbix:

#!/bin/bash
HOST=$(ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}')
PORT="80"

case $1 in
  ping)
    /sbin/pidof nginx | wc -l
    ;;
  active)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk '/Active/ {print $NF}'
    ;;
  reading)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk '/Reading/ {print $2}'
    ;;
  writing)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk '/Writing/ {print $4}'
    ;;
  waiting)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk '/Waiting/ {print $6}'
    ;;
  accepts)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk 'NR==3 {print $1}'
    ;;
  handled)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk 'NR==3 {print $2}'
    ;;
  requests)
    /usr/bin/curl -s "http://$HOST:$PORT/ngx_status/" | awk 'NR==3 {print $3}'
    ;;
  *)
    echo "Parâmetro inválido"
    exit 1
    ;;
esac

Configuração do agente Zabbix

Edite o arquivo zabbix_agentd.conf e ajuste as seguintes linhas:

LogFile=/var/log/zabbix/zabbix_agentd.log
Server=10.0.30.1
ListenIP=10.0.10.5
ServerActive=10.0.30.1
Hostname=10.0.10.5
UnsafeUserParameters=1
EnableRemoteCommands=1   # permite execução remota de comandos, necessário para reinicialização automática
UserParameter=nginx.status[*],/usr/local/zabbix-2.4.7/bin/nginx_status.sh $1

Importação do template no Zabbix Web

Baixe o template pelo link: http://pan.baidu.com/s/1b0Hm02 (senha: 631h) e importe via interface web do Zabbix.

Verificação de problemas comuns

  1. Verificar acesso ao ngx_status: ```

    curl http://10.0.10.1/ngx_status

    Active connections: 124 server accepts handled requests 10683663 10683663 10689745 Reading: 0 Writing: 1 Waiting: 123
  2. Testar o script de monitoramento: ```

    ./nginx_status.sh accepts

    10684050
  3. Testar via zabbix_get no servidor: ```

    zabbix_get -s 10.0.10.1 -p 10050 -k "nginx.accepts"

    10684902
    
    

Reinicialização automática do Nginx em caso de falha

No Zabbix, crie uma ação com condição de gatilho (exemplo: nginx.ping retorna 0).

Configure a operação para executar um comando remoto no agente:

sudo /etc/init.d/nginx restart

No servidor monitorado, edite o /etc/sudoers com visudo e adicione:

zabbix ALL=NOPASSWD: ALL
zabbix ALL=NOPASSWD: /etc/init.d/nginx restart
#Defaults    requiretty      # comente esta linha para permitir execução remota

Com essas configurações, quando o serviço Nginx parar, o Zabbix executará automaticamente o comando de reinicialização.

Tags: Zabbix nginx monitoring auto-restart Shell Script

Publicado em 7-30 07:22