NGNIX Routes Exporter
Dashboard de métricas do NGINX Exporter. Exporter: martin-helmich/prometheus-nginxlog-exporter
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
Data source config
Collector config:
Upload an updated version of an exported dashboard.json file from Grafana
Revision | Description | Created | |
---|---|---|---|
Download |