Monitorez vos serveurs NGINX auto-hébergés avec OpenTelemetry en utilisant soit le collecteur NRDOT (recommandé), soit l'OpenTelemetry Collector Contrib pour envoyer des métriques de performance et des données télémétriques à New Relic.
Avant de commencer
Assurez-vous d'avoir :
Clé de licenceNew Relic valide
NGINX avec le module HTTP stub status activé
L'un des collecteurs suivants installés sur un hôte Linux :
Accès réseau de l'hôte Linux vers :
- Point de terminaison d'état stub HTTP NGINX
- Le point de terminaison OTLPde New Relic
Configurer le monitoring NGINX
Choisissez votre collecteur préféré et suivez les étapes :
Vous pouvez utiliser le collecteur NRDOT pour monitorer votre serveur NGINX. Le collecteur NRDOT est une distribution préconfigurée qui inclut des composants spécifiques à New Relic.
Pour installer et configurer le collecteur NRDOT, suivez ces étapes :
Conseil
Si une étape de vérification échoue, installez les composants manquants avant de poursuivre. Besoin d'aide pour installer le collecteur NRDOT ? Consultez la section d'installation du référentiel nrdot-collector-releases.
Lors de l'installation, utilisez export collector_distro="nrdot-collector"
Configurez le collecteur NRDOT pour extraire les métriques de votre point de terminaison d'état stub NGINX et les envoyer à New Relic.
Important
Choisissez votre approche de monitoring:
Monitoring NGINX uniquement (ce guide) : monitore juste les performances et les métriques de votre serveur web NGINX
Monitoring complet du serveur : monitore NGINX ainsi que tout votre serveur (utilisation du CPU, mémoire, espace disque, logs système)
Si vous souhaitez monitorer l'ensemble de votre serveur, et pas seulement NGINX, utilisez plutôt la configuration par défaut du collecteur NRDOT et ajoutez-y la configuration du récepteur NGINX.
Créez le fichier de configuration /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]Paramètres de configuration
Le tableau suivant décrit les principaux paramètres de configuration :
paramètres | Description |
|---|---|
| Remplacez par le point de terminaison de statut stub NGINX (par exemple
) |
| Remplacez par un nom de déploiement unique pour ce serveur NGINX (par exemple
,
,
) |
| Intervalle en secondes pour collecter les métriques. La valeur par défaut est définie sur
|
| Délai d'attente en secondes avant d'envoyer les métriques groupées. La valeur par défaut est définie sur
|
| Nombre de métriques à regrouper par lot avant l'envoi. La valeur par défaut est définie sur
|
Mettez à jour la configuration du collecteur NRDOT pour utiliser votre fichier de configuration NGINX et définissez le point de terminaison OTLP.
Déterminez votre point de terminaison OTLP en fonction de votre région New Relic. Consultez Configurer le point de terminaison, le port et le protocole pour la liste complète des points de terminaison et des ports pris en charge pour votre région.
Important
Votre clé de licence est déjà configurée dans /etc/nrdot-collector/nrdot-collector.conf lors de l'installation. Il vous suffit de mettre à jour le chemin du fichier de configuration et le point de terminaison OTLP.
Mettez à jour le fichier de configuration du collecteur :
$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/nullEn plus des métriques, vous pouvez envoyer les logs d'accès et d'erreurs NGINX à New Relic pour un monitoring et un dépannage complets. Ces logs complètent les métriques NGINX de base et fournissent des informations détaillées au niveau des requêtes.
Conseil
Ignorez cette étape si vous n'avez besoin que des métriques NGINX de base et que vous n'avez pas besoin de logs de requêtes détaillés.
Pour configurer NGINX afin qu'il génère des logs au format JSON, ajoutez ceci à votre configuration 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...}Rechargez NGINX pour appliquer les modifications :
bash$sudo nginx -t && sudo nginx -s reloadPour configurer le collecteur pour le transfert de logs, ajoutez ces sections à votre
/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]Définir les autorisations et appliquer la configuration. Autoriser le collecteur à lire les fichiers de log 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
Maintenant que tout est configuré, démarrez le collecteur NRDOT et vérifiez que les données sont acheminées vers New Relic.
Démarrer le collecteur :
- Appliquer les modifications de configuration :
bash$sudo systemctl daemon-reload$sudo systemctl restart nrdot-collector.service- Vérifiez que le service est en cours d'exécution :
bash$sudo systemctl status nrdot-collector.serviceSortie attendue :
Active: active (running)sans erreurs récentesVérifier la collecte de données :
- Vérifiez les logs de démarrage :
bash$sudo journalctl -u nrdot-collector.service -n 20- Générez du trafic de test (pour créer des métriques) :
bash$# Make a few requests to your NGINX server$curl http://localhostAttendez que les données initiales apparaissent dans New Relic, puis accédez à votre dashboard NGINX pour vérifier la collecte des données.
Conseil
Si une étape de vérification échoue, installez les composants manquants avant de continuer. Besoin d'aide pour installer le collecteur ? Consultez le guide d’installation d’OpenTelemetry Collector.
Configurez le collecteur OpenTelemetry pour extraire les métriques de votre point de terminaison d'état stub NGINX et les envoyer à New Relic.
Important
Avant de modifier : sauvegardez votre configuration existante : sudo cp /etc/otelcol-contrib/config.yaml /etc/otelcol-contrib/config.yaml.backup
Modifiez votre fichier de configuration du collecteur (généralement /etc/otelcol-contrib/config.yaml) et ajoutez les sections suivantes. Si vous avez déjà des sections de récepteurs, de processeurs ou d'exportateurs, fusionnez-les avec votre configuration existante :
Configurez le récepteur 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: trueConfigurez les processeurs pour les métadonnées et le traitement par lots :
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, "")Configurez l'exportateur 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}Connectez le tout avec un pipeline :
service:pipelines:metrics/nginx:receivers: [nginx]processors: [resourcedetection, resource/nginx, batch, transform/nginx_metrics, transform/metadata_nullify]exporters: [otlp_http]Paramètres de configuration
Le tableau suivant décrit les principaux paramètres de configuration :
paramètres
Description
<YOUR_STUB_STATUS_ENDPOINT>Remplacez par le point de terminaison de statut stub NGINX (par exemple
http://127.0.0.1/basic_status)
<DEPLOYMENT_NAME>Remplacez par un nom de déploiement unique pour ce serveur NGINX (par exemple
production-web-01,
staging-api,
prod-lb-01)
collection_intervalIntervalle en secondes pour collecter les métriques. La valeur par défaut est définie sur
30stimeoutDélai d'attente en secondes avant d'envoyer les métriques groupées. La valeur par défaut est définie sur
30ssend_batch_sizeNombre de métriques à regrouper par lot avant l'envoi. La valeur par défaut est définie sur
1024
Configurez l'authentification sécurisée afin que l'OpenTelemetry Collector puisse envoyer des données à votre compte New Relic. Cette étape configure les variables d'environnement pour sécuriser vos informations d'identification.
Obtenez vos identifiants New Relic :
- Clé de licence : récupérez votre clé de licence à partir de la page de l'UI des clés API
- Point de terminaison OTLP : utilisez le point de terminaison de votre région parmi les points de terminaison OTLP New Relic
Configurez les identifiants :
- Créer un répertoire de remplacement systemd :
bash$sudo mkdir -p /etc/systemd/system/otelcol-contrib.service.d- Créez le fichier de configuration de l'environnement :
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
En plus des métriques, vous pouvez envoyer les logs d’accès et d’erreurs NGINX à New Relic pour un monitoring et un dépannage complets. Ces logs complètent les métriques NGINX de base et fournissent des informations détaillées au niveau des requêtes.
Conseil
Ignorez cette étape si vous n'avez besoin que des métriques NGINX de base et que vous n'avez pas besoin de logs de requêtes détaillés.
Pour configurer NGINX afin qu'il génère des logs au format JSON, ajoutez ceci à votre configuration 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...}Rechargez NGINX pour appliquer les modifications :
bash$sudo nginx -t && sudo nginx -s reloadPour configurer le collecteur pour le transfert de logs, ajoutez ces sections à votre
/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]Définir les autorisations et appliquer la configuration. Autoriser le collecteur à lire les fichiers de log 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
Maintenant que tout est configuré, démarrez le collecteur OpenTelemetry et vérifiez que les données sont acheminées vers New Relic.
Démarrer le collecteur :
- Appliquer les modifications de configuration :
bash$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib.service- Vérifiez que le service est en cours d'exécution :
bash$sudo systemctl status otelcol-contrib.serviceSortie attendue :
Active: active (running)sans erreurs récentesVérifier la collecte de données :
- Vérifiez les logs de démarrage :
bash$sudo journalctl -u otelcol-contrib.service -n 20- Générez du trafic de test (pour créer des métriques) :
bash$# Make a few requests to your NGINX server$curl http://localhostAttendez que les données initiales apparaissent dans New Relic, puis accédez à votre dashboard NGINX pour vérifier la collecte des données.
Affichez vos données dans New Relic
Une fois votre configuration terminée et que les données circulent, vous pouvez accéder à vos métriques NGINX dans les dashboards New Relic et créer des alertes personnalisées.
Pour des instructions complètes sur l'accès aux dashboards, l'interrogation des données avec NRQL et la création d'alertes, consultez Trouver et interroger vos données NGINX.
Dépannage
Si vous rencontrez des problèmes lors de l'installation, utilisez ce guide de dépannage pour diagnostiquer et résoudre les problèmes courants.
Obtention de 404 Not Found :
$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_statusSolutions :
- Vérifiez que le chemin d'accès correspond à l'URL de votre requête
- Vérifiez que la configuration a été ajoutée au bloc serveur correct
- Exécutez
sudo nginx -T | grep -A5 nginx_statuspour confirmer que la configuration est chargée
Obtention d'une erreur 403 Interdit :
- Assurez-vous que vous testez depuis la bonne IP du serveur
<NGINX_SERVER_IP> - Vérifiez vos directives
allow/denydans la configuration NGINX - Vérifiez qu'aucune autre restriction d'accès ne bloque la requête
Connexion refusée :
- Vérifiez si NGINX est en cours d'exécution :
sudo systemctl status nginx - Vérifiez que votre port configuré n'est pas bloqué :
sudo netstat -tlnp | grep :<YOUR_LOCAL_PORT> - Vérifiez les règles de pare-feu, le cas échéant
Vérifiez l'état du service :
$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro}.service -n 50Causes et corrections courantes :
- Erreurs de syntaxe YAML - Corrigez les problèmes d'indentation et de syntaxe
- Variables d'environnement manquantes - Vérifiez que les informations d'identification sont définies dans le fichier d'environnement
- Problèmes de permissions de fichiers - Exécuter
sudo chown ${collector_distro}:${collector_distro} /etc/${collector_distro}/config.yaml - URL de point de terminaison non valides - Vérifiez le point de terminaison NGINX et le point de terminaison OTLP New Relic
- Configurations de composants manquantes - Assurez-vous que tous les récepteurs, processeurs et exportateurs référencés dans la section des pipelines de service sont réellement définis dans leurs sections de configuration respectives ci-dessus
Redémarrer après les corrections :
$sudo systemctl restart ${collector_distro}.serviceDiagnostic étape par étape :
Vérifiez que le statut stub NGINX fonctionne :
bash$curl http://<NGINX_SERVER_IP>:<YOUR_LOCAL_PORT>/nginx_statusDoit renvoyer les statistiques de connexion.
Vérifiez que le collecteur est en cours d'exécution et en bonne santé :
bash$sudo systemctl status ${collector_distro}.service$sudo journalctl -u ${collector_distro} -n 20Les logs fourniront un contexte détaillé en cas de problèmes de configuration ou d'exécution avec OpenTelemetry Collector.
Vérifiez les données avec NRQL :
FROM Metric SELECT * WHERE nginx.deployment.name LIKE '%production%' LIMIT 1
Aucun log n'apparaît dans New Relic :
$# Check Collector logs for file errors$sudo journalctl -u ${collector_distro} -f | grep -i "filelog\|error"Problèmes courants :
- Erreurs d'autorisation de fichier - Ajouter le collecteur au groupe adm :
sudo usermod -a -G adm ${collector_distro} - Chemins de fichiers incorrects - Vérifiez les emplacements des fichiers de log dans votre configuration
Prochaines étapes
En savoir plus sur vos données :
- Rechercher et interroger vos données NGINX - Accéder aux dashboards, créer des requêtes personnalisées et configurer des alertes
- Référence des métriques et attributs NGINX OpenTelemetry - Référence complète des métriques avec descriptions et exemples
- Vue d'ensemble de NGINX OpenTelemetry - Comprendre les métriques collectées, les attributs et les cas d'utilisation
Explorer le monitoring connexe :
- Monitorer NGINX Plus avec OpenTelemetry - Pour les déploiements commerciaux de NGINX Plus
- Monitorer NGINX sur Kubernetes - Pour les environnements conteneurisés