Netdata

Monitorar o Nginx com o Netdata

No artigo Monitorar servidor em tempo real com o Netdata, vimos o que é o Netdata e como instalá-lo. Agora veremos como monitorar o Nginx com o Netdata.

Ativando a status page do Nginx

A maioria das instalações do Nginx já vem com o módulo http_stub_status_module instalado. Você pode verificar isso executando o comando:

nginx -V 2>&1 | grep -o with-http_stub_status_module

Se você visualizar um retorno assim:

with-http_stub_status_module

Significa que a instalação do seu Nginx tem esse módulo instalado. Esse é o primeiro passo para que possamos prosseguir aqui. Esse módulo fornece informações em tempo real sobre as conexões e requisições ao servidor.

Só que para ter acesso a essas informações, é preciso definir uma location (um endpoint) de acesso a elas e normalmente utiliza-se /nginx_status.

Amazon Web Services (AWS) - EC2 - Fundamentos
Curso de Amazon Web Services (AWS) - EC2 - Fundamentos
CONHEÇA O CURSO

A location /nginx_status

Algumas pessoas definem essa location dentro do virtualhost do domínio da aplicação delas e acessam assim:

http://www.meusite.com/nginx_status

Ao acessar, as seguintes informações são impressas:

Active connections: 134 
server accepts handled requests
 979653 979653 4496872 
Reading: 0 Writing: 5 Waiting: 130 
  • Active connections: Número de conexões abertas. Isso não reflete o número de usuário online no seu site, uma vez que um único usuário pode ter mais de uma conexão aberta (de forma simultânea);
  • Server accepts handled requests: O primeiro valor é o total de conexões aceitas e o segundo valor é o total de conexões que o nginx definitivamente chegou a lidar, e na maioria das vezes esses dois valores são iguais. O terceiro valor refere-se ao número de solicitações recebidas. Dividindo o terceiro valor pelo segundo, chega-se ao número de requisições por conexão. No caso desse exemplo: 4496872 / 979653 = 4,5, ou seja, 4,5 requisições por conexão;
  • Reading: O número atual de conexões em que o nginx está lendo o cabeçalho da solicitação;
  • Writing: O número atual de conexões em que o nginx está escrevendo uma resposta de retorno ao cliente;
  • Waiting: O número atual de conexões inativas aguardando uma solicitação (algumas conexões são mantidas abertas).

Mas ter essas informações de forma pública e acessível por todos, pode não fazer tanto sentido. A recomendação aqui é:

  • 1) Se for pra liberar um acesso externo, fora da rede local do servidor, bloqueie esse acesso por IP ou defina uma autenticação nesse endpoint (e isso pode ser feito no próprio Nginx mesmo);
  • 2) Permita apenas acesso local a esse endpoint (que é a opção mostrada nesse artigo);

Definindo a location /stub_status

O bloco server a ser adicionado é:

server {
    listen 1701;
    server_name 127.0.0.1 localhost;

    location /stub_status {
        access_log off;
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}

Ou seja, ficaremos na porta 1701 (você pode escolher outra porta se desejar) do localhost escutando pelas requisições ao endpoint stub_status e quando isso acontecer, a diretiva stub_status; é executada e retorna as informações atuais sobre o servidor. A diretiva allow 127.0.0.1; especifica que apenas quem tiver acesso à rede local poderá requisitar esse endpoint.

Reinicie o nginx:

sudo service nginx restart

E então você pode testar se o endpoint está acessível executando:

curl 127.0.0.1:1701/stub_status

A primeira etapa está feita. Agora é hora da gente configurar o Netdata pra ele buscar essas informações desse endpoint que acabamos de definir.

Configurando o Netdata para monitorar o Nginx

Para que o Netdata possa exibir gráficos dessas informações, temos que configurar o coletor do Nginx. Acesse o diretório de configuração:

cd /etc/netdata

E então execute:

sudo ./edit-config python.d/nginx.conf

É nesse arquivo que você vai configurar quais servidores Nginx você está monitorando. É possível monitorar servidores locais ou remotos.

Deverá existir nesse arquivo três diretivas padrões:

localhost:
  name : 'local'
  url  : 'http://localhost/stub_status'

localipv4:
  name : 'local'
  url  : 'http://127.0.0.1/stub_status'

localipv6:
  name : 'local'
  url  : 'http://[::1]/stub_status'

Podemos trocar as três por apenas uma:

localhost:
  name : 'local'
  url  : 'http://localhost:1701/stub_status'

Salve o arquivo e reinicie o Netdata:

sudo service netdata restart

E agora é só acessar a interface do seu Netdata e navegar pelo novo item “nginx local” que ele adicionou:

netdata nginx

Monitorar os logs de acesso do Nginx

Outro coletor disponível no Netdata é o “Web log” que é capaz de monitorar os logs de acesso do Nginx (ou apache) e assim fornecer uma visão bem ampla da quantidade de requisições que estão tendo sucesso/erro, o tipo delas etc:

netdata weblog

Para ativá-lo, acesse o diretório de configuração do Netdata:

cd /etc/netdata/

E então execute:

sudo ./edit-config python.d/web_log.conf

Um exemplo de configuração que pode ser adicionada nesse arquivo:

nginx:
  name: 'nginx'
  path: '/var/log/nginx/access.log'
  categories:
    blog: '^/blog'
    checkout: '^/checkout'

Em path temos o caminho onde o Nginx guarda os logs de acesso. Você pode confirmar isso no arquivo de configuração do Nginx:

sudo nano /etc/nginx/nginx.conf

É preciso que exista uma diretiva assim:

access_log /var/log/nginx/access.log

Esse que é o log de acesso geral de todo o Nginx.

Em categories é onde você pode agrupar essas informações pelo endpoint de acesso. Por exemplo, você notou que está tendo muitas requisições com erro 500, se você tem elas agrupadas no Netdata, você consegue distinguir que a maioria dos erros estão vindo do seu Blog (www.seusite.com/blog), por exemplo. Essa configuração categories é opcional. Você pode simplesmente removê-la.

Salve o arquivo e reinicie o Netdata:

sudo service netdata restart

Pronto. Você está apto a visualizar os logs do Nginx diretamente pelo Netdata.

Até a próxima!

Amazon Web Services (AWS) - Fundamentos
Curso de Amazon Web Services (AWS) - Fundamentos
CONHEÇA O CURSO

Monitorar servidor em tempo real com o Netdata

O Netdata é uma ferramenta opensource para monitoramento em tempo real de sistemas baseados em Unix. Ela possui uma infinidade de coletores e métricas sobre o uso dos recursos do sistema como: memória, CPU, rede, operações de escrita/leitura no disco etc.

Painel do Netdata

Não obstante, a ferramenta também disponibiliza coletores para aplicações de bancos de dados, servidores web (como o Nginx) entre outros.

A melhor parte de usar o Netdata é que os resultados são imediatos, sem muitas configurações. Você instala e já começa a visualizar os dados coletados. Com o tempo você personaliza as configurações que julgar serem importantes pro seu caso de uso.

Esse artigo não tem o objetivo de teorizar todos os recursos do Netdata, para isso, você pode consultar o site oficial e a sua vasta documentação. A intenção aqui é ser um guia rápido de instalação para que você consiga monitorar o seu servidor em tempo real.

Você pode testar a interface fornecida pelo Netdata e ver as informações padrões que ela oferece através dessa demonstração: https://london.my-netdata.io/

Amazon Web Services (AWS) - EC2 - Fundamentos
Curso de Amazon Web Services (AWS) - EC2 - Fundamentos
CONHEÇA O CURSO

Instalando o Netdata

Existem diversos métodos de instalação do Netdata, sendo o mais simples, o que usa a ferramenta oficial de instalação automática e ela suporta todas as distribuições Linux.

Basta executar no seu servidor:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

O processo pode demorar alguns minutos. Muitas das coisas serão compiladas.

É isso. Tá tudo pronto. Na pós-instalação ele inicia o agente e você pode validar isso:

sudo service netdata status

Se exibir active (running), está tudo no ponto:

Netdata service running

Caso ele não tenha sido iniciado, você pode tentar forçar essa inicialização:

sudo service netdata start

O Netdata abre a porta 19999 para acesso à sua interface web, você pode acessá-lo assim http://seuservidor.com:19999/. Mas não é uma boa coisa deixar isso público para todas as pessoas que entrarem em seu site. Vamos restringir esse acesso para localhost.

Restringindo o acesso à localhost

Isso pode ser feito editando o arquivo /etc/netdata/netdata.conf e na seção [web] remover o comentário # da linha abaixo e definir o valor dela para o IP local:

[web]
    bind to = 127.0.0.1

Depois de cada alteração nos arquivos de configuração do Netdata, é preciso reiniciá-lo

sudo service netdata restart

Estratégias para acesso à interface do Netdata

Agora que bloqueamos o acesso ao socket do Netdata apenas para localhost, temos que definir por onde vamos visualizar os dados e as métricas coletadas do servidor. Existem duas principais estratégias:

  • 1) Através do seu servidor mesmo, criando um proxy reverso no Nginx e definindo uma senha para acessá-lo na web. Por exemplo, você poderia acessar assim: www.seusite.com.br/netdata ou netdata.seusite.com.br;
  • 2) Utilizando o Netdata Cloud, que é a forma mais simples (e é grátis). O Netdata Cloud permite coletar em tempo real os dados e métricas do servidor e organizá-los em espaços e salas de uma forma descentralizada. O Netdata Cloud funciona apenas no modo leitura e toda a comunicação nas duas pontas é feita via uma conexão segura.

Depois de se cadastrar no Netdata Cloud, ele pedirá um nome para o espaço onde as salas de nós monitorados ficarão agrupadas. Você pode colocar o nome que quiser:

Criar o primeiro espaço no netdata

Na tela seguinte, ele pedirá para criar uma “War Room”, que basicamente é uma forma de agrupar nós comuns que você estará monitorando. Por exemplo, se você tem 2 ou 3 servidores EC2 para monitorar, uma possível sala (war room) poderia se chamar EC2:

Netdata Cloud - War Room

Na próxima etapa, é hora de adicionar o nó do seu servidor:

Adicionar nó no Netdata

Em “Rooms” selecione a sala que você acabou de criar. Em seguida é só copiar o comando indicado e executar no servidor onde o agente do Netdata foi instalado. Só avançar até chegar na tela principal, onde o seu nó estará listado. Um exemplo de uma sala com vários nós:

Netdata nodes

É possível adicionar N nós e N salas no Netdata Cloud. A partir desse momento, é só você entrar no nó e usufruir das informações fornecidas por ele.

O que mais posso fazer?

Não existe lugar melhor para consultar os recursos, configurações e opções que a própria documentação do Netdata. Portanto, recomendo enormemente que você dê uma atenção especial a ela.

O que mais pode ser feito no Netdata?

  • Personalização de alertas e configuração de notificações para serem enviadas no seu Telegram, Slack, E-mail, SMS etc;
  • Coletores de outros serviços e aplicações;
  • Outras features e características você pode visualizar na documentação oficial;

Em um próximo artigo veremos como configurar o Netdata para monitorar a stack PHP-FPM e Nginx.

Até a próxima!

Amazon Web Services (AWS) - Fundamentos
Curso de Amazon Web Services (AWS) - Fundamentos
CONHEÇA O CURSO

© 2004 - 2019 TreinaWeb Tecnologia LTDA - CNPJ: 06.156.637/0001-58 Av. Paulista, 1765, Conj 71 e 72 - Bela Vista - São Paulo - SP - 01311-200