Como ativar o módulo nginx-module-vts de métricas do Nginx

Esse é um tutorial de habilitar o módulo de exportação de métricas do Nginx

O objetivo é que ao ativar as métricas, seja possível exportar estas mesmas métricas para o prometheus.

De uma maneira geral, será necessário:

  • clonar o projeto nginx (ele é open-source)
  • clonar o módulo nginx-module-vts (que é outro projeto independente)
  • compilar o nginx "linkado" com o módulo de métricas como uma dependência de compilação (ele será linkado em tempo de compilação ao core do nginx)
  • o resultado da compilação será um binário do nginx (que já possui o módulo), depois basta fazer a instalação deste binário em sua máquina (via um make install)
  • configurar uma rota em que serão expostas as métricas (essa configuração é feita no próprio nginx)
  • configurar um scrapper do prometheus

Para ativar este módulo é necessário compilar o nginx e no momento da compilação utilizar este módulo como um dos argumentos da compilação.

Como o nginx (1.21.6) é um projeto open-source podemos baixar o código fonte e seguir as instruções para poder compilar o código fonte. Para isso eu baixei a ultima versão lançada no momento da escrita deste artigo.

Após baixar vai ser necessário extrair o arquivo tar.gz .

tar -zxvf nginx-1.21.6.tar.gz nginx-1.21.6

Isso vai extrair estes arquivos e assim vamos ter a base para poder ligar o módulo nginx-module-vts.

Depois de baixar os fontes do nginx, é necessário clonar o repositório do módulo que desejamos adicionar. Neste caso o módulo pode ser encontrado no seguinte link.

Agora que clonamos o repositório basta fazer a configuração da instalação, já temos os pré-requisitos para que possamos fazer o build do nginx. E a partir daí ativar o módulo.

Para isso vamos entrar no diretório onde extraimos o nginx, você deve estar na pasta raiz, e executar o comando abaixo:

./configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre  --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module --add-module=/root/nginx-module-vts

Verifique que no final colocamos o argumento --add-module com caminho do diretório de onde foi baixado o módulo nginx-module-vts.

Após executar com sucesso este código, basta executar o comando make e depois executar um make install este vai gerar um executável do nginx com este módulo embutido.

Ativar o nginx para funcionar na máquina com o comando:

sudo nginx start

Após fazer a compilação basta seguir as instruções do repositório do módulo para ativar a rota que possui as estatísticas.

Para isso vai precisar editar o seu arquivo nginx.conf

sudo vim /etc/nginx/nginx.conf
http {
vhost_traffic_status_zone;

...

server {

    ...

    location /status {
        vhost_traffic_status_display;
        vhost_traffic_status_display_format html;
        }
    }
}

Após isso basta para a instância e iniciar novamente.

sudo nginx stop
sudo nginx start

Ao fazer esta alteração o módulo já deve estar ativo, para testar vamos abrir um browser no endereço: http://localhost/status

Ao fazer este acesso vai ver uma tela bem parecida com esta:

Pronto, agora já possui uma instalação do nginx com um módulo para métricas funcional.

O ultimo passo é agora a gente configurar um exporter para o prometheus, para isso vamos precisar adicionar este novo scraper em nosso scraper-config. A configuração que utilizei foi a seguinte:

 - job_name: nginx
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /status/format/prometheus
    scheme: http
    follow_redirects: true
    static_configs:
    - targets:
      - localhost

Repare que no metrics_path estou passando um valor que exporta os dados no formato do prometheus. Que também pode ser acessado via browser.

Lembrando que neste caso específico a mesma máquina que está executando a instância do nginx também está executando o prometheus. Por isso toda a configuração é feita utilizando o localhost. Por isso é necessário fazer os ajustes nos scripts caso esteja utilizando uma configuração diferente.

Após fazer esta configuração é possível ver que a instalação do prometheus está fazendo o scraping correto, via a tela de status do prometheus.

Agora basta utilizar o sua ferramenta preferida de monitoramento para criar os gráficos que deseja com os dados fornecidos pelo módulo de métricas do vts do nginx.