Monitoree sus servidores NGINX autohospedados con OpenTelemetry utilizando el recolector NRDOT (recomendado) u OpenTelemetry Collector Contrib para enviar métricas de rendimiento y telemetry data a New Relic.
Antes de que empieces
Asegúrese de tener:
Clave de licenciade New Relic válida
NGINX con el módulo HTTP stub status habilitado
Uno de los siguientes recopiladores instalados en un host Linux:
Acceso a la red desde el host de Linux a:
- Punto final de estado de stub HTTP de NGINX
- El extremo OTLPde New Relic
Configurar el monitoreo de NGINX
Seleccione su recolector preferido y siga los pasos:
Puede utilizar el recolector NRDOT para monitorear su servidor NGINX. El recolector NRDOT es una distribución preconfigurada que incluye componentes específicos de New Relic.
Para instalar y configurar el recolector NRDOT, siga estos pasos:
Sugerencia
Si algún paso de verificación falla, instale los componentes faltantes antes de continuar. ¿Necesitas ayuda para instalar el recolector NRDOT? Consulte la sección de instalación del respositorio nrdot-collector-releases.
Durante la instalación use export collector_distro="nrdot-collector"
Configure el recolector NRDOT para extraer métricas de su extremo de estado stub de NGINX y enviarlas a New Relic.
Importante
Elija su enfoque de monitoreo:
Monitoreo solo de NGINX (esta guía): monitorea solo el rendimiento y las métricas de su servidor web NGINX
Monitoreo completo del servidor: monitorea NGINX además de todo su servidor (uso de CPU, memoria, espacio en disco, logs del sistema)
Si desea monitorear todo su servidor, no solo NGINX, use en su lugar la configuración predeterminada del recolector NRDOT y agréguele la configuración del receptor de NGINX.
Cree el archivo de configuración /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 configuración
La siguiente tabla describe los parámetros de configuración clave:
Parámetro | Descripción |
|---|---|
| Reemplace con el extremo de estado stub de NGINX (por ejemplo,
) |
| Reemplace con un nombre de despliegue único para este servidor NGINX (por ejemplo,
,
,
) |
| Intervalo en segundos para recopilar métricas. El valor predeterminado está establecido en
|
| Tiempo de espera en segundos antes de enviar las métricas agrupadas por lotes. El valor predeterminado está establecido en
|
| Número de métricas a agrupar en lotes antes de enviarlas. El valor predeterminado está establecido en
|
Actualice la configuración del recolector NRDOT para utilizar su archivo de configuración de NGINX y establezca el extremo OTLP.
Determine su extremo OTLP según su región de New Relic. Consulte Configurar extremo, puerto y protocolo para obtener la lista completa de extremos y puertos admitidos para su región.
Importante
Su clave de licencia ya está configurada en /etc/nrdot-collector/nrdot-collector.conf durante la instalación. Solo necesita actualizar la ruta del archivo de configuración y el extremo OTLP.
Actualice el archivo de configuración del recolector:
$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/nullAdemás de las métricas, puede enviar logs de acceso y error de NGINX a New Relic para una monitorización y solución de problemas integrales. Estos logs complementan las métricas principales de NGINX y proporcionan información detallada a nivel de solicitud.
Sugerencia
Omita este paso si solo necesita métricas básicas de NGINX y no requiere logs de solicitud detallados.
Para configurar NGINX para generar logs con formato JSON, agregue esto a su configuración de 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...}Recargue NGINX para aplicar los cambios:
bash$sudo nginx -t && sudo nginx -s reloadPara configurar el recolector para el reenvío de logs, agregue estas secciones a su
/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]Establecer permisos y aplicar la configuración. Permita que el recolector lea los archivos de log de 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
Ahora que todo está configurado, inicie el recolector NRDOT y verifique que los datos fluyan a New Relic.
Inicie el recolector:
- Aplique los cambios de configuración:
bash$sudo systemctl daemon-reload$sudo systemctl restart nrdot-collector.service- Verifique que el servicio se esté ejecutando:
bash$sudo systemctl status nrdot-collector.serviceSalida esperada:
Active: active (running)sin errores recientesVerifique la recopilación de datos:
- Verifique los logs de inicio:
bash$sudo journalctl -u nrdot-collector.service -n 20- Generar tráfico de prueba (para crear métricas):
bash$# Make a few requests to your NGINX server$curl http://localhostEspere a que aparezcan los datos iniciales en New Relic; luego, acceda a su dashboard de NGINX para verificar la recolección de datos.
Sugerencia
Si algún paso de verificación falla, instale los componentes faltantes antes de continuar. ¿Necesita ayuda para instalar el recolector? Consulte la guía de instalación de OpenTelemetry Collector.
Configure el OpenTelemetry Collector para extraer métricas de su punto final de estado stub de NGINX y enviarlas a New Relic.
Importante
Antes de editar: respalde su configuración existente: sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backup
Edite su archivo de configuración del recolector (normalmente /etc/otelcol-contrib/config.yaml) y agregue las siguientes secciones. Si ya tiene secciones de receptores, procesadores o exportadores, combínelas con su configuración existente:
Configurar el 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 los procesadores para metadatos y agrupación por lotes:
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 el exportador de 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 todo con un pipeline:
service:pipelines:metrics/nginx:receivers: [nginx]processors: [resourcedetection, resource/nginx, batch, transform/nginx_metrics, transform/metadata_nullify]exporters: [otlp_http]Parámetro de configuración
La siguiente tabla describe los parámetros de configuración clave:
Parámetro
Descripción
<YOUR_STUB_STATUS_ENDPOINT>Reemplace con el extremo de estado stub de NGINX (por ejemplo,
http://127.0.0.1/basic_status)
<DEPLOYMENT_NAME>Reemplace con un nombre de despliegue único para este servidor NGINX (por ejemplo,
production-web-01,
staging-api,
prod-lb-01)
collection_intervalIntervalo en segundos para recopilar métricas. El valor predeterminado está establecido en
30stimeoutTiempo de espera en segundos antes de enviar las métricas agrupadas por lotes. El valor predeterminado está establecido en
30ssend_batch_sizeNúmero de métricas a agrupar en lotes antes de enviarlas. El valor predeterminado está establecido en
1024
Configure la autenticación segura para que el OpenTelemetry Collector pueda enviar datos a su cuenta de New Relic. Este paso configura variables de entorno para mantener seguras sus credenciales.
Obtenga sus credenciales de New Relic:
- Clave de licencia: obtenga su clave de licencia de la página de la UI de claves de API
- Extremo OTLP: use el extremo de su región de los extremos OTLP de New Relic
Configurar las credenciales:
- Crea un directorio de anulación de systemd:
bash$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.d- Cree el archivo de configuración del entorno:
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
Además de las métricas, puede enviar los logs de acceso y errores de NGINX a New Relic para un monitoreo y resolución de problemas integrales. Estos logs complementan las métricas principales de NGINX y proporcionan información valiosa y detallada a nivel de solicitud.
Sugerencia
Omita este paso si solo necesita métricas básicas de NGINX y no requiere logs de solicitud detallados.
Para configurar NGINX para generar logs con formato JSON, agregue esto a su configuración de 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...}Recargue NGINX para aplicar los cambios:
bash$sudo nginx -t && sudo nginx -s reloadPara configurar el recolector para el reenvío de logs, agregue estas secciones a su
/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]Establecer permisos y aplicar la configuración. Permita que el recolector lea los archivos de log de 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
Ahora que todo está configurado, inicie el recopilador de OpenTelemetry y verifique que los datos fluyan a New Relic.
Inicie el recolector:
- Aplique los cambios de configuración:
bash$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib.service- Verifique que el servicio se esté ejecutando:
bash$sudo systemctl status otelcol-contrib.serviceSalida esperada:
Active: active (running)sin errores recientesVerifique la recopilación de datos:
- Verifique los logs de inicio:
bash$sudo journalctl -u otelcol-contrib.service -n 20- Generar tráfico de prueba (para crear métricas):
bash$# Make a few requests to your NGINX server$curl http://localhostEspere a que aparezcan los datos iniciales en New Relic; luego, acceda a su dashboard de NGINX para verificar la recolección de datos.
Ver tus datos en New Relic
Una vez que su configuración esté completa y los datos fluyan, puede acceder a sus métricas de NGINX en los dashboards de New Relic y crear alertas personalizadas.
Para obtener instrucciones completas sobre cómo acceder a los dashboards, consultar datos con NRQL y crear alertas, consulte Buscar y consultar sus datos de NGINX.
Resolución de problemas
Si encuentra problemas durante la configuración, utilice esta guía de solución de problemas para diagnosticar y resolver los problemas comunes.
Obteniendo 404 No encontrado:
$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_statusSoluciones:
- Verifique que la ruta de la ubicación coincida con la URL de su solicitud
- Verifique que la configuración se haya agregado al bloque de servidor correcto
- Ejecute
sudo nginx -T | grep -A5 nginx_statuspara confirmar que la configuración está cargada
Obteniendo 403 Prohibido:
- Asegúrese de que está probando desde la IP correcta del servidor
<NGINX_SERVER_IP> - Verifique sus directivas
allow/denyen la configuración de NGINX - Verifique que no haya otras restricciones de acceso que bloqueen la solicitud
Conexión rechazada:
- Verifique si NGINX se está ejecutando:
sudo systemctl status nginx - Verifique que el puerto configurado no esté bloqueado:
sudo netstat -tlnp | grep :<YOUR_LOCAL_PORT> - Verifique las reglas del firewall si corresponde
Verifique el estado del servicio:
$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro}.service -n 50Causas y soluciones comunes:
- Errores de sintaxis YAML - Corrija la sangría y los problemas de sintaxis
- Variables de entorno faltantes - Verifique que las credenciales estén configuradas en el archivo de entorno
- Problemas de permisos de archivos - Ejecutar
sudo chown ${collector_distro}:${collector_distro} /etc/${collector_distro}/config.yaml - URLs de extremo no válidas - Verifique el extremo de NGINX y el extremo OTLP de New Relic
- Configuración de componentes faltante - Asegúrese de que todos los receptores, procesadores y exportadores a los que se hace referencia en la sección de canalizaciones de servicio estén realmente definidos en sus respectivas secciones de configuración anteriores
Reinicie después de las correcciones:
$sudo systemctl restart ${collector_distro}.serviceDiagnóstico paso a paso:
Verifique que el estado de la stub de NGINX funcione:
bash$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_statusDebería devolver las estadísticas de conexión.
Verifique que Collector se esté ejecutando y esté en buen estado:
bash$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro} -n 20Los logs proporcionarán contexto detallado si hay algún problema de configuración o tiempo de ejecución con el OpenTelemetry Collector.
Compruebe los datos con NRQL:
FROM Metric SELECT * WHERE nginx.deployment.name LIKE '%production%' LIMIT 1
No aparecen logs en New Relic:
$# Check Collector logs for file errors$sudo journalctl -u ${collector_distro} -f | grep -i "filelog\|error"Problemas comunes:
- Errores de permisos de archivo - Agregar el recolector al grupo adm:
sudo usermod -a -G adm ${collector_distro} - Rutas de archivo incorrectas - Verifique las ubicaciones de los archivos de log en su configuración
Próximos pasos
Obtén más información sobre tus datos:
- Busque y consulte sus datos de NGINX - Acceda a paneles, cree consultas personalizadas y configure alertas
- Referencia de métricas y atributos de NGINX OpenTelemetry - Referencia completa de métricas con descripciones y ejemplos
- Visión general de NGINX OpenTelemetry - Comprenda las métricas recopiladas, los atributos y los casos de uso
Explore la supervisión relacionada:
- Monitorear NGINX Plus con OpenTelemetry - Para implementaciones comerciales de NGINX Plus
- Monitorear NGINX en Kubernetes - Para entornos en contenedores