Como visualizar o NGINX Plus com Prometheus e Grafana

NGINX | 23 de setembro de 2021

Como discutimos em Como melhorar a visibilidade no Kubernetes, um dos principais desafios para as equipes de desenvolvimento e entrega de aplicativos é obter visibilidade sobre o desempenho, a segurança e a disponibilidade dos aplicativos. Essas informações ajudam as equipes a solucionar problemas rapidamente e a se preparar de forma proativa para picos de tráfego.

As ferramentas de gerenciamento de tráfego – como balanceadores de carga, proxies reversos, gateways de API e controladores Ingress – geram uma grande quantidade de informações sobre a integridade do seu aplicativo e da sua infraestrutura. Você pode acompanhar essas métricas valiosas em tempo real no painel do NGINX Plus, e o NGINX Plus também pode enviar métricas para ferramentas de monitoramento de terceiros, oferecendo insights adicionais por meio de visualizações do desempenho ao longo do tempo. Duas das ferramentas mais populares trabalham em conjunto para fornecer esses gráficos de séries temporais:

  • Prometheus – Um projeto de código aberto da Cloud Native Computing Foundation (CNCF) para monitoramento e alertas
  • Grafana – Uma ferramenta de código aberto para visualização e análise que gera gráficos e outras representações visuais a partir de bancos de dados de séries temporais, como o Prometheus

O módulo Prometheus-njs facilita o envio de métricas do NGINX Plus para o Prometheus e o Grafana. Ele usa o módulo JavaScript do NGINX (NJS) e a API do NGINX Plus para exportar métricas do NGINX Plus para o servidor Prometheus.

Nesta demonstração em vídeo, abordamos todas as etapas para configurar o NGINX Plus, o Prometheus e o Grafana, além de criar gráficos no Grafana.

 

Para ajudar você a configurar sua própria implementação, resumimos as etapas nas seções a seguir, associadas aos respectivos momentos do vídeo:

Observações:

  • Estas instruções dependem da API do NGINX Plus e, portanto, não funcionam com o NGINX Open Source.
  • Para usar o Prometheus e o Grafana com o NGINX Ingress Controller, consulte nossa documentação.

Pré-requisitos

Antes de iniciar a demonstração, atendemos aos seguintes pré-requisitos.

  1. Instale o NGINX Plus no servidor NGINX Plus. Para fins de demonstração, faremos uma instalação inicial limpa. Se você estiver usando um servidor NGINX Plus existente, talvez seja necessário adaptar as alterações feitas nos arquivos de configuração durante a demonstração.
  2. Instale o módulo JavaScript (njs) do NGINX no servidor NGINX Plus.
  3. Instale a versão mais recente do Docker no servidor do Prometheus. Na demonstração, seguimos a prática comum de executar o Prometheus em um segundo servidor, separado do NGINX Plus.
  4. Instale a versão mais recente do Docker no servidor do Grafana (na demonstração, um terceiro servidor).

Configure o servidor NGINX Plus (1:20)

  1. Instale o módulo Prometheus-njs. Na demonstração, usamos o Ubuntu 20.04, e este é o comando apropriado. Para outros sistemas operacionais, consulte a documentação.
$ sudo apt-get install nginx-plus-module-prometheus
  1. Usando seu editor de texto preferido, abra /etc/nginx/nginx.conf e adicione a seguinte diretiva load_module no contexto de nível superior, fora do bloco http.
load_module modules/ngx_http_js_module.so;
# existing top-level directives

http {
    #...
}
  1. (Opcional) Aumente o tamanho do buffer para armazenar os corpos das respostas de subsolicitações (o tamanho padrão é 4 KB ou 8 KB, dependendo da plataforma). Isso evita os erros too big subrequest response, que aparecem no log de erros do NGINX. Adicione a seguinte diretiva subrequest_output_buffer_size no bloco http.
http {    #...
    subrequest_output_buffer_size 32k;
}

  1. Salve o arquivo nginx.conf e execute este comando para verificar se a configuração do NGINX está sintaticamente correta.
$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. Acesse o diretório conf.d e liste os arquivos.
$ cd conf.d$ ls
default.conf
  1. O arquivo default.conf define um servidor virtual que escuta na porta 80. O servidor virtual do Prometheus precisa escutar nessa porta, portanto, remova o arquivo default.conf para liberá-la.
$ sudo rm default.conf
  1. Usando seu editor de texto preferido, crie um novo arquivo chamado prometheus.conf, com o seguinte conteúdo.
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;

server {
    location = /metrics {
        js_content prometheus.metrics;
    }
 
    location /api {
        api;
    } 
}
  1. A diretiva js_import especifica o local do código JavaScript do NGINX que converte as métricas geradas pela API do NGINX Plus para o formato exigido pelo Prometheus. (Também não é necessário adicionar uma diretiva load_module para o Prometheus-njs.) O primeiro bloco location fornece acesso às métricas formatadas para o Prometheus. O segundo bloco location habilita a API do NGINX Plus, que gera as métricas brutas e as disponibiliza ao Prometheus. Observação: Em ambientes de produção, recomendamos enfaticamente restringir o acesso à API do NGINX Plus conforme descrito em nossa documentação. Para obter mais informações sobre o módulo Prometheus-njs, consulte nossa documentação.
  2. Salve prometheus.conf, verifique se a sintaxe está correta, como na Etapa 4, e execute este comando para iniciar o NGINX Plus.
$ sudo nginx

Configure o servidor Prometheus (5:30)

  1. Crie um novo arquivo de configuração do Prometheus no formato YAML chamado prometheus.yml no diretório /etc/prometheus, com o conteúdo a seguir (baseado em um arquivo de configuração padrão do site do Prometheus). Conforme mostrado, a única alteração necessária é adicionar o endereço IP e a porta do servidor NGINX Plus no campo targets.
global:
  scrape_interval: 15s 
  
  external_labels:
    monitor: 'codelab-monitor'
 
scrape_configs:  
  - job_name: 'prometheus'
    
    scrape_interval: 5s
 
    static_configs:
      - targets: ['NGINX_Plus_IP_address:80']
  1. Para obter detalhes sobre a configuração do Prometheus, incluindo outras opções que podem ser adicionadas ao arquivo de configuração, consulte a documentação do Prometheus.
  2. Salve prometheus.yml e execute o comando a seguir. Ele baixa o Prometheus do Docker Hub e o disponibiliza na porta 9090.
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  1. Em um navegador, acesse o endereço IP e a porta do novo servidor Prometheus. Uma página como a mostrada a seguir confirma que o servidor está funcionando.
  2. Verifique se o Prometheus está acessando o feed de métricas do NGINX Plus. Clique no ícone de globo à esquerda do botão Executar no canto superior direito da janela. Uma lista de métricas como a seguinte será exibida.

Configure o servidor Grafana (9:15)

  1. Execute este comando para baixar o Grafana do Docker Hub e disponibilizá-lo na porta 3000:
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana
  1. Para outros métodos de instalação, consulte a documentação do Grafana.
  2. Em um navegador, acesse o endereço IP e a porta do novo servidor Grafana. A página de login do Grafana confirma que o servidor está funcionando.
  3. Faça login inserindo admin nos campos E-mail ou nome de usuário e Senha. Recomendamos enfaticamente que você defina uma nova senha segura quando solicitado, mas, para poupar tempo, pulamos essa etapa na demonstração.

  1. Na página inicial do Grafana exibida, registre o Prometheus como uma fonte de dados seguindo as instruções na documentação do Grafana. O vídeo mostra as etapas na interface gráfica do Grafana. Observação: na Etapa 5 das instruções do Grafana, em vez do exemplo de URL mostrado (http://localhost:9090), insira o endereço IP do seu servidor Prometheus (e a porta 9090).
    Depois de clicar no botão Salvar e testar na Etapa 7 das instruções do Grafana, a caixa verde com uma marca de seleção e a mensagem A fonte de dados está funcionando indicam que o Grafana se conectou com sucesso ao servidor Prometheus.

Crie gráficos do NGINX Plus no Grafana (11:15)

Embora o Prometheus seja útil para visualizar apenas uma métrica, o Grafana facilita a visualização de um conjunto de métricas em um único gráfico.

Para criar um gráfico no Grafana:

  1. Clique no sinal de adição (+) na barra de navegação à esquerda da página (veja a captura de tela na Etapa 4 da seção anterior). Selecione Painel no menu suspenso Criar.
  2. Clique na caixa Adicionar um painel vazio.
  3. Na página Novo painel/Editar painel exibida, verifique se o Prometheus aparece no campo Fonte de dados da guia Consulta, na metade inferior da página. Caso contrário, selecione Prometheus no menu suspenso.
  4. Insira nginx no campo Navegador de métricas >. Uma lista de métricas do NGINX Plus será exibida.
    Veja a seguir breves descrições para ter uma ideia das informações que elas fornecem.
    • nginxplus_connections_accepted – Conexões de clientes aceitas
    • nginxplus_connections_active – Conexões de clientes ativas
    • nginxplus_connections_dropped – Conexões de clientes descartadas
    • nginxplus_connections_idle – Conexões de clientes ociosas
    • nginxplus_http_requests_current – Solicitações HTTP atuais
    • nginxplus_http_requests_total – Total de solicitações HTTP
    • nginxplus_nginx_meta – Metainformações do NGINX
    • nginxplus_processes_respawned – Número total de processos filhos encerrados de forma anormal e reiniciados
    • nginxplus_ssl_handshakes – Handshakes SSL bem-sucedidos
    • nginxplus_ssl_handshakes_failed – Handshakes SSL malsucedidos
    • nginxplus_ssl_session_reuses – Reutilizações de sessão durante o handshake SSL
    • nginxplus_workers_mem_private – Memória privada usada pelos workers do NGINX, não inclui bibliotecas compartilhadas
    • nginxplus_workers_mem_rss – Memória utilizada pelos processos de trabalho do NGINX
  5. Selecione uma métrica na lista (na demonstração, selecionamos nginxplus_connections_active). Para selecionar outra métrica, clique no botão + Consulta e selecione outra métrica no novo campo Navegador de métricas > (na demonstração, selecionamos nginxplus_connections_idle).
  6. Clique no ícone de "atualizar" (duas setas formando um círculo) acima do gráfico, na metade superior da página, e os resultados começarão a aparecer no gráfico.

Bônus: insights e análises unificados para todas as suas implantações do NGINX Plus

Talvez você esteja se perguntando: “E se eu tiver uma implantação de NGINX de grande porte, incluindo muitas instâncias do NGINX Plus?” ou “Como posso atualizar a configuração das minhas instâncias com base nos insights e nas análises do Prometheus e do Grafana?” NGINX Controller, nossa solução de plano de controle e gerenciamento para implantações do NGINX, ajuda você a responder a essas e muitas outras perguntas.

Embora o Prometheus e o Grafana sejam excelentes soluções de monitoramento, alertas e visualização, eles não oferecem uma maneira de atualizar configurações e políticas. Para tomar medidas com base nessas informações, ainda é necessário fazer login em cada instância do NGINX Plus para realizar alterações, o que pode ser demorado e propenso a erros – especialmente em implantações grandes e complexas do NGINX Plus.

O NGINX Controller oferece insights e análises detalhadas sobre as mais de 200 métricas do NGINX Plus, incluindo solicitações por segundo, uso da CPU, erros 4xx e 5xx, falhas nas verificações de integridade e muito mais — tudo apresentado em uma plataforma intuitiva, unificada e centrada em aplicações. Você pode então analisar os dados em profundidade, exportá-los em relatórios e fazer as alterações necessárias nas configurações e políticas usando fluxos de trabalho automatizados e específicos para cada função, desenvolvidos por especialistas da NGINX para simplificar a complexidade.

Com o NGINX Controller, você pode acompanhar de perto suas implantações de aplicativos e assumir o controle de instâncias do NGINX Plus e objetos de configuração (por exemplo, Ambientes, Gateways e Aplicativos) em grande escala. E você não precisa abrir mão de suas soluções favoritas de monitoramento e alertas; o design do Controller com foco em API torna a integração com soluções de terceiros muito simples e direta.

 

Comece a usar o NGINX Plus e o NGINX Controller

Se você ainda não experimentou o NGINX Plus, recomendamos que o teste como balanceador de carga, proxy reverso e gateway de API ou como um servidor web com suporte completo e APIs avançadas de monitoramento e gerenciamento. Comece hoje mesmo com uma avaliação gratuita de 30 dias ou entre em contato conosco para conversar sobre seus casos de uso.

E, se você acha que o NGINX Controller pode ser a solução ideal para visualizar e monitorar seu conjunto de instâncias do NGINX Plus, confira a avaliação gratuita de 30 dias que inclui os módulos Application Delivery e API Management, além do Controller App Security.


Compartilhar

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
NGINX | 10/10/2024

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade

Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
NGINX | 17/06/2024

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa

Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
NGINX | 14/07/2021

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor

Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
NGINX | 02/04/2019

Distribuição segura de chaves privadas SSL com o NGINX

Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
NGINX | 24/05/2018

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX

O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
NGINX | 19/04/2016

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus

Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.