Monitore seus servidores NGINX auto-hospedados com o OpenTelemetry usando o coletor NRDOT (recomendado) ou o OpenTelemetry Collector Contrib para enviar métricas de desempenho e dados de telemetria para o New Relic.
Antes de você começar
Certifique-se de ter:
Chave de licençada New Relic válida
NGINX com o módulo HTTP stub status habilitado
Um dos seguintes coletores instalado em um host Linux:
Acesso à rede do host Linux para:
- Endpoint de status stub HTTP do NGINX
- Endpoint OTLPda New Relic
Configurar o monitoramento do NGINX
Escolha seu coletor preferido e siga as etapas:
Você pode usar o coletor NRDOT para monitorar seu servidor NGINX. O coletor NRDOT é uma distribuição pré-configurada que inclui componentes específicos da New Relic.
Para instalar e configurar o coletor NRDOT, siga estas etapas:
Dica
Se alguma etapa de verificação falhar, instale os componentes ausentes antes de continuar. Precisa de ajuda para instalar o coletor NRDOT? Consulte a seção de instalação do repositório nrdot-collector-releases.
Durante a instalação, use export collector_distro="nrdot-collector"
Configure o coletor NRDOT para coletar métricas do seu endpoint de status stub do NGINX e enviá-las para o New Relic.
Importante
Escolha sua abordagem de monitoramento:
Monitoramento exclusivo do NGINX (este guia): monitora apenas o desempenho e as métricas do seu servidor web NGINX
Monitoramento completo do servidor: monitora o NGINX e todo o seu servidor (uso da CPU, memória, espaço em disco, logs do sistema)
Se você quiser monitorar todo o seu servidor, não apenas o NGINX, use a configuração padrão do coletor NRDOT em vez disso e adicione a configuração do receiver do NGINX a ela.
Crie o arquivo de configuração /etc/nrdot-collector/nginx-config.yaml:
receivers: nginx: endpoint: <YOUR_STUB_STATUS_ENDPOINT> # Replace with your stub status URL collection_interval: 30s # How often to collect metrics metrics: nginx.requests: enabled: true nginx.connections_accepted: enabled: true nginx.connections_handled: enabled: true nginx.connections_current: enabled: true
processors: # Detect system information resourcedetection: detectors: [system] system: resource_attributes: host.name: enabled: false host.id: enabled: true
# Add NGINX-specific identification resource/nginx: attributes: - key: nginx.server.endpoint value: "<YOUR_STUB_STATUS_ENDPOINT>" # Replace with your endpoint action: upsert - key: nginx.deployment.name value: "<DEPLOYMENT_NAME>" # Replace with your deployment name action: upsert # Batch metrics for efficient sending batch: timeout: 30s send_batch_size: 1024
# Transform metrics for better display in New Relic transform/nginx_metrics: metric_statements: - context: resource statements: # Customize the display name as needed for your New Relic dashboard - set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":")) transform/metadata_nullify: metric_statements: - context: metric statements: - set(description, "") - set(unit, "")
exporters: otlp_http: endpoint: ${env:YOUR_NEWRELIC_OTLP_ENDPOINT} headers: api-key: ${env:YOUR_NEW_RELIC_LICENSE_KEY}
service: pipelines: metrics/nginx: receivers: [nginx] processors: [resourcedetection, resource/nginx, batch, transform/nginx_metrics, transform/metadata_nullify] exporters: [otlp_http]Parâmetro de configuração
A tabela a seguir descreve os principais parâmetros de configuração:
Parâmetro | Descrição |
|---|---|
| Substitua pelo endpoint de status stub do NGINX (por exemplo,
) |
| Substitua por um nome de implantação exclusivo para este servidor NGINX (por exemplo,
,
,
) |
| Intervalo em segundos para coletar métricas. O valor padrão é definido como
|
| Tempo limite em segundos para aguardar antes de enviar métricas em lote. O valor padrão é definido como
|
| Número de métricas a serem agrupadas em lote antes de enviar. O valor padrão é definido como
|
Atualize a configuração do coletor NRDOT para usar seu arquivo de configuração NGINX e defina o endpoint OTLP.
Determine o endpoint OTLP com base na sua região da New Relic. Consulte Configurar endpoint, porta e protocolo para obter a lista completa de endpoints e portas suportadas para sua região.
Importante
Sua chave de licença já está configurada em /etc/nrdot-collector/nrdot-collector.conf durante a instalação. Você só precisa atualizar o caminho do arquivo de configuração e o endpoint OTLP.
Atualize o arquivo de configuração do coletor:
$export collector_distro="nrdot-collector"$export otlp_endpoint="<YOUR_NEWRELIC_OTLP_ENDPOINT>" # Replace with your region's endpoint$
$# Update the config file path to point to nginx-config.yaml$sudo sed -i 's|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/config.yaml"|OTELCOL_OPTIONS="--config=/etc/nrdot-collector/nginx-config.yaml"|' /etc/${collector_distro}/${collector_distro}.conf$
$# Add the OTLP endpoint$echo "OTEL_EXPORTER_OTLP_ENDPOINT=${otlp_endpoint}" | sudo tee -a /etc/${collector_distro}/${collector_distro}.conf > /dev/nullAlém das métricas, você pode enviar logs de acesso e erro do NGINX para o New Relic para monitoramento e solução de problemas abrangentes. Esses logs complementam as métricas principais do NGINX e fornecem insights detalhados no nível da solicitação.
Dica
Ignore esta etapa se você só precisa de métricas básicas do NGINX e não precisa de logs de solicitação detalhados.
Para configurar o NGINX para gerar logs formatados em JSON, adicione isso à sua configuração do NGINX (
/etc/nginx/nginx.conf):http {# JSON log format for better parsinglog_format json_combined escape=json'{''"time":"$time_local",''"remote_addr":"$remote_addr",''"request":"$request",''"status":$status,''"bytes_sent":$body_bytes_sent,''"request_time":$request_time,''"referer":"$http_referer",''"user_agent":"$http_user_agent"''}';# Use the JSON format for access logsaccess_log /var/log/nginx/access.log json_combined;error_log /var/log/nginx/error.log warn;# Your existing configuration...}Recarregue o NGINX para aplicar as alterações:
bash$sudo nginx -t && sudo nginx -s reloadPara configurar o coletor para encaminhamento de logs, adicione estas seções ao seu
/etc/nrdot-collector/nginx-config.yaml:receivers:# Your existing nginx receiver...nginx:# existing configuration...# Add log receiversfilelog/nginx_access:include:- /var/log/nginx/access.logfilelog/nginx_error:include:- /var/log/nginx/error.logprocessors:# Your existing processors...# Add log processortransform/nginx_access_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx")transform/nginx_error_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx-error")service:pipelines:# Your existing metrics pipeline...# Add log pipelineslogs/nginx-access:receivers: [filelog/nginx_access]processors: [resource/nginx, batch, transform/nginx_access_logs]exporters: [otlp_http]logs/nginx-error:receivers: [filelog/nginx_error]processors: [resource/nginx, batch, transform/nginx_error_logs]exporters: [otlp_http]Defina permissões e aplique a configuração. Permitir que o coletor leia os arquivos de log do NGINX:
bash$# Add collector user to adm group (has read access to logs)$sudo usermod -a -G adm nrdot-collector$$# Ensure log files are readable$sudo chmod 644 /var/log/nginx/access.log$sudo chmod 644 /var/log/nginx/error.log
Agora que tudo está configurado, inicie o coletor NRDOT e verifique se os dados estão fluindo para o New Relic.
Inicie o coletor:
- Aplique as alterações de configuração:
bash$sudo systemctl daemon-reload$sudo systemctl restart nrdot-collector.service- Verifique se o serviço está em execução:
bash$sudo systemctl status nrdot-collector.serviceSaída esperada:
Active: active (running)sem erros recentesVerifique a coleta de dados:
- Verifique os logs de inicialização:
bash$sudo journalctl -u nrdot-collector.service -n 20- Gere tráfego de teste (para criar métricas):
bash$# Make a few requests to your NGINX server$curl http://localhostAguarde um tempo para que os dados iniciais apareçam no New Relic e, em seguida, acesse seu dashboard do NGINX para verificar a coleta de dados.
Dica
Se alguma etapa de verificação falhar, instale os componentes ausentes antes de continuar. Precisa de ajuda para instalar o coletor? Consulte o guia de instalação do OpenTelemetry Collector.
Configure o OpenTelemetry Collector para coletar métricas do seu endpoint de status stub do NGINX e enviá-las para o New Relic.
Importante
Antes de editar: faça backup da sua configuração existente: sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backup
Edite o arquivo de configuração do seu coletor (normalmente /etc/otelcol-contrib/config.yaml) e adicione as seguintes seções. Se você já tiver seções de receptores, processadores ou exportadores, mescle-as com sua configuração existente:
Configure o receptor NGINX:
receivers:nginx:endpoint: <YOUR_STUB_STATUS_ENDPOINT> # Replace with your stub status URLcollection_interval: 30s # How often to collect metricsmetrics:nginx.requests:enabled: truenginx.connections_accepted:enabled: truenginx.connections_handled:enabled: truenginx.connections_current:enabled: trueConfigure os processadores para metadados e batching:
processors:# Detect system informationresourcedetection:detectors: [system]system:resource_attributes:host.name:enabled: falsehost.id:enabled: true# Add NGINX-specific identificationresource/nginx:attributes:- key: nginx.server.endpointvalue: "<YOUR_STUB_STATUS_ENDPOINT>" # Replace with your endpointaction: upsert- key: nginx.deployment.namevalue: "<DEPLOYMENT_NAME>" # Replace with your deployment nameaction: upsert# Batch metrics for efficient sendingbatch:timeout: 30ssend_batch_size: 1024# Transform metrics for better display in New Relictransform/nginx_metrics:metric_statements:- context: resourcestatements:# Customize the display name as needed for your New Relic dashboard- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))transform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")Configure o exportador New Relic:
exporters:# Send metrics to New Relic via OTLPotlp_http:endpoint: ${env:YOUR_NEWRELIC_OTLP_ENDPOINT}headers:api-key: ${env:YOUR_NEW_RELIC_LICENSE_KEY}Conecte tudo com um pipeline:
service:pipelines:metrics/nginx:receivers: [nginx]processors: [resourcedetection, resource/nginx, batch, transform/nginx_metrics, transform/metadata_nullify]exporters: [otlp_http]Parâmetro de configuração
A tabela a seguir descreve os principais parâmetros de configuração:
Parâmetro
Descrição
<YOUR_STUB_STATUS_ENDPOINT>Substitua pelo endpoint de status stub do NGINX (por exemplo,
http://127.0.0.1/basic_status)
<DEPLOYMENT_NAME>Substitua por um nome de implantação exclusivo para este servidor NGINX (por exemplo,
production-web-01,
staging-api,
prod-lb-01)
collection_intervalIntervalo em segundos para coletar métricas. O valor padrão é definido como
30stimeoutTempo limite em segundos para aguardar antes de enviar métricas em lote. O valor padrão é definido como
30ssend_batch_sizeNúmero de métricas a serem agrupadas em lote antes de enviar. O valor padrão é definido como
1024
Configure a autenticação segura para que o OpenTelemetry Collector possa enviar dados para sua conta New Relic. Esta etapa configura variáveis de ambiente para manter suas credenciais seguras.
Obtenha suas credenciais do New Relic:
- Chave de licença: obtenha sua chave de licença na página da interface de chaves de API
- Endpoint OTLP: use o endpoint da sua região dos endpoints New Relic OTLP
Configure as credenciais:
- Crie um diretório de substituição do systemd:
bash$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.d- Crie o arquivo de configuração do ambiente:
bash$cat <<EOF | sudo tee /etc/systemd/system/otelcol-contrib.service.d/environment.conf$[Service]$Environment="NEWRELIC_OTLP_ENDPOINT=<YOUR_NEWRELIC_OTLP_ENDPOINT>" # Replace with your region's endpoint$Environment="NEWRELIC_LICENSE_KEY=YOUR_NEW_RELIC_LICENSE_KEY"$EOF
Além de métricas, você pode enviar logs de acesso e erro do NGINX para o New Relic para monitoramento e resolução de problemas abrangentes. Esses logs complementam as métricas principais do NGINX e fornecem insights detalhados em nível de requisição.
Dica
Ignore esta etapa se você só precisa de métricas básicas do NGINX e não precisa de logs de solicitação detalhados.
Para configurar o NGINX para gerar logs formatados em JSON, adicione isso à sua configuração do NGINX (
/etc/nginx/nginx.conf):http {# JSON log format for better parsinglog_format json_combined escape=json'{''"time":"$time_local",''"remote_addr":"$remote_addr",''"request":"$request",''"status":$status,''"bytes_sent":$body_bytes_sent,''"request_time":$request_time,''"referer":"$http_referer",''"user_agent":"$http_user_agent"''}';# Use the JSON format for access logsaccess_log /var/log/nginx/access.log json_combined;error_log /var/log/nginx/error.log warn;# Your existing configuration...}Recarregue o NGINX para aplicar as alterações:
bash$sudo nginx -t && sudo nginx -s reloadPara configurar o coletor para encaminhamento de logs, adicione estas seções ao seu
/etc/otelcol-contrib/config.yaml:receivers:# Your existing nginx receiver...nginx:# existing configuration...# Add log receiversfilelog/nginx_access:include:- /var/log/nginx/access.logfilelog/nginx_error:include:- /var/log/nginx/error.logprocessors:# Your existing processors...# Add log processortransform/nginx_access_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx")transform/nginx_error_logs:log_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server", attributes["nginx.deployment.name"]], ":"))- set(attributes["logtype"], "nginx-error")service:pipelines:# Your existing metrics pipeline...# Add log pipelineslogs/nginx-access:receivers: [filelog/nginx_access]processors: [resource/nginx, batch, transform/nginx_access_logs]exporters: [otlp_http]logs/nginx-error:receivers: [filelog/nginx_error]processors: [resource/nginx, batch, transform/nginx_error_logs]exporters: [otlp_http]Defina permissões e aplique a configuração. Permitir que o coletor leia os arquivos de log do NGINX:
bash$# Add collector user to adm group (has read access to logs)$sudo usermod -a -G adm otelcol-contrib$$# Ensure log files are readable$sudo chmod 644 /var/log/nginx/access.log$sudo chmod 644 /var/log/nginx/error.log
Agora que tudo está configurado, inicie o OpenTelemetry Collector e verifique se os dados estão fluindo para o New Relic.
Inicie o coletor:
- Aplique as alterações de configuração:
bash$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib.service- Verifique se o serviço está em execução:
bash$sudo systemctl status otelcol-contrib.serviceSaída esperada:
Active: active (running)sem erros recentesVerifique a coleta de dados:
- Verifique os logs de inicialização:
bash$sudo journalctl -u otelcol-contrib.service -n 20- Gere tráfego de teste (para criar métricas):
bash$# Make a few requests to your NGINX server$curl http://localhostAguarde um tempo para que os dados iniciais apareçam no New Relic e, em seguida, acesse seu dashboard do NGINX para verificar a coleta de dados.
Visualize seus dados no New Relic
Depois que sua configuração estiver concluída e os dados estiverem fluindo, você poderá acessar suas métricas NGINX nos dashboards do New Relic e criar alertas personalizados.
Para instruções completas sobre como acessar dashboards, consultar dados com NRQL e criar alertas, veja Encontre e consulte seus dados do NGINX.
Resolução de problemas
Se você encontrar problemas durante a configuração, use este guia de solução de problemas para diagnosticar e resolver problemas comuns.
Obtendo 404 Not Found:
$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_statusSoluções:
- Verifique se o caminho do local corresponde à URL da sua solicitação
- Verifique se a configuração foi adicionada ao bloco de servidor correto
- Execute
sudo nginx -T | grep -A5 nginx_statuspara confirmar se a configuração foi carregada
Obtendo 403 Proibido:
- Certifique-se de que você está testando do IP do servidor correto
<NGINX_SERVER_IP> - Verifique suas diretivas
allow/denyna configuração do NGINX - Verifique se nenhuma outra restrição de acesso está bloqueando a solicitação
Conexão recusada:
- Verifique se o NGINX está em execução:
sudo systemctl status nginx - Verifique se a sua porta configurada não está bloqueada:
sudo netstat -tlnp | grep :<YOUR_LOCAL_PORT> - Verifique as regras do firewall, se aplicável
Verifique o status do serviço:
$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro}.service -n 50Causas e correções comuns:
- Erros de sintaxe YAML - Corrija a indentação e os problemas de sintaxe
- Variáveis de ambiente ausentes - Verifique se as credenciais estão definidas no arquivo de ambiente
- Problemas de permissão de arquivo - Execute
sudo chown ${collector_distro}:${collector_distro} /etc/${collector_distro}/config.yaml - URLs de endpoint inválidas - Verifique o endpoint NGINX e o endpoint New Relic OTLP
- Configurações de componentes ausentes - Certifique-se de que todos os receivers, processors e exporters referenciados na seção de pipelines de serviço estejam realmente definidos em suas respectivas seções de configuração acima
Reinicie após as correções:
$sudo systemctl restart ${collector_distro}.serviceDiagnóstico passo a passo:
Verifique se o status stub do NGINX funciona:
bash$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_statusDeve retornar estatísticas de conexão.
Verifique se o Collector está em execução e íntegro:
bash$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro} -n 20Os logs fornecerão contexto detalhado se houver algum problema de configuração ou tempo de execução com o OpenTelemetry Collector.
Verifique se há dados com NRQL:
FROM Metric SELECT * WHERE nginx.deployment.name LIKE '%production%' LIMIT 1
Nenhum log aparecendo no New Relic:
$# Check Collector logs for file errors$sudo journalctl -u ${collector_distro} -f | grep -i "filelog\|error"Problemas comuns:
- Erros de permissão de arquivo - Adicione o coletor ao grupo adm:
sudo usermod -a -G adm ${collector_distro} - Caminhos de arquivo errados - Verifique os locais dos arquivos de log em sua configuração
Próximos passos
Saiba mais sobre seus dados:
- Encontre e consulte seus dados do NGINX - Acesse dashboards, crie consultas personalizadas e configure alertas
- Referência de métricas e atributos do NGINX OpenTelemetry - Referência completa de métricas com descrições e exemplos
- Visão geral do NGINX OpenTelemetry - Entenda as métricas coletadas, atributos e casos de uso
Explore o monitoramento relacionado:
- Monitore o NGINX Plus com OpenTelemetry - Para implantações comerciais do NGINX Plus
- Monitorar NGINX no Kubernetes - Para ambientes conteinerizados