NGNIX Routes Exporter

Dashboard de métricas do NGINX Exporter. Exporter: martin-helmich/prometheus-nginxlog-exporter

NGNIX Routes Exporter screenshot 1
NGNIX Routes Exporter screenshot 2

Overview

Dashboard que exibe algumas métricas úteis a partir do exporter martin-helmich/prometheus-nginxlog-exporter.

Prometheus

Para conseguir exportar as métricas, basta utilizar o exporter e suas instruções que podem ser encontradas na página oficial. O passo a passo também pode ser encontrado aqui.

Nginx

Na máquina na qual se deseja fazer o monitoramento dos sistemas que fazem uso do NGINX, é necessário fazer as seguintes configurações:

No arquivo /etc/nginx/nginx.conf, alterar as seguintes linhas que determinam como será gerado o log:

	##
	# Logging Settings
	##

	log_format custom   '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent"'
                         'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';

	access_log /var/log/nginx/access.log custom;
	error_log /var/log/nginx/error.log;

Feito isso, execute um comando para verificar que sua configuração de nginx é válida:

sudo nginx -t

Se tudo estiver certo, podemos então adicionar um novo site. Para isso basta executar ele na máquina que você deseja, e fazer com que os logs sejam salvos preferencialmente dentro de /var/log/nginx/.

Nginx Log Exporter

Hora então de configurar o log exporter para gerar as métricas que posteriormente serão lidas pelo Prometheus. As releases podem ser acompanhadas por aqui e sugiro sempre utilizar versões mais recentes do pacote. Para fins demonstrativos vamos utilizar a v1.9.2.

wget https://github.com/martin-helmich/prometheus-nginxlog-exporter/releases/download/v1.9.2/prometheus-nginxlog-exporter

Feito isso, dar permissão e move-lo para o local correto

chmod +x prometheus-nginxlog-exporter
mv prometheus-nginxlog-exporter /usr/bin/prometheus-nginxlog-exporter

Criar o diretório que irá receber a nossa config

sudo mkdir /etc/prometheus

Criar o arquivo de config /etc/prometheus/nginxlog_exporter.yml. O conteúdo dele irá determinar quais e como as métricas serão exportadas/interpretadas. Adapta-lo para cada caso:

listen:
  port: 4040
  address: "0.0.0.0"

consul:
  enable: false

namespaces:
  - name: myapp
    relabel_configs:
    - target_label: request_uri
      from: request
      split: 2
      separator: ' '  
    format: "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"rt=$request_time uct=\"$upstream_connect_time\" uht=\"$upstream_header_time\" urt=\"$upstream_response_time\""
    source:
      files:
        - /var/log/nginx/myapp*
    labels:
      service: "myapp"
      environment: "prod"
      hostname: "http://myapp.domain.com"
    histogram_buckets: [.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10]

Com essa configuração, ele irá pegar todas as métricas começadas com myapp dentro da pasta de logs do nginx default. service e environment são importantes para como serão interpretados dentro do dashboard e o relabel_configs são as configurações para conseguir identificar qual rota está recebendo o request. A porta onde será exportado os logs também pode ser alterada de acordo com sua necessidade.

A lista completa do que pode ser alterado nas configurações pode ser encontrada no repositório padrão.

Criar o service

Com tudo isso feito, hora de criar o service do processo. para isso crie o arquivo /etc/systemd/system/nginxlog_exporter.service e adicione:

[Unit]
Description=Prometheus Log Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/bin/prometheus-nginxlog-exporter -config-file /etc/prometheus/nginxlog_exporter.yml

[Install]
WantedBy=multi-user.target

Após isso, dê um reload, habilite o exporter para executar sempre que a VM reiniciar, e restarte o serviço:

sudo systemctl daemon-reload
sudo systemctl enable nginxlog_exporter
sudo systemctl restart nginxlog_exporter

Feito isso o exporter já estará recebendo os requests e as métricas podem ser observadas em http://ip-machine:4040/metrics. Caso queira pode também conferir o status do serviço usando:

sudo systemctl status nginxlog_exporter

Configurando o prometheus para ler as métricas

Por fim, para que seja possível o prometheus analisar as métricas, é preciso fazer uma pequena configuração na sua configuração. Dentro do arquivo de config dele, basta adicionar as seguintes informações dentro do scrape_configs:

scrape_configs:
  - job_name: 'myapp'
    scrape_interval: 10s
    static_configs:
      - targets: ['ip.of.nginx.exporter:4040']

Basta reiniciar então o prometheus. Exemplo em caso de um container docker:

docker-compose restart prometheus

Feito isso, as métricas serão então coletadas e disponíveis para alimentar o dashboard :)

Grafana

Indo agora para o Grafana, basta importar o dashboard. Depois disso, configurar a variável apis com a lista das APIs que irão ser monitoradas separadas por um |. Para o nosso exemplo:

myapp_http_response_count_total|other_http_response_count_total

Feito isso, pronto! Os dados já estarão disponíveis para visualização.

Créditos e Referências

Revisions
RevisionDescriptionCreated

Get this dashboard

Import the dashboard template

or

Download JSON

Datasource
Dependencies