Monitoree sus servidores NGINX que se ejecutan en clúster de Kubernetes utilizando el recolector NRDOT (recomendado) o el recolector OpenTelemetry contrib para enviar métricas y telemetry data a New Relic.
Esta integración específica de Kubernetes descubre automáticamente los pods de NGINX en su clúster y recopila métricas sin configuración manual para cada instancia. Aprovecha el nginxreceiver de OpenTelemetry y el receivercreator para monitorear dinámicamente las métricas de rendimiento de NGINX, las estadísticas de conexión y el estado del servidor en su entorno en contenedores.
Configurar el monitoreo de NGINX
Seleccione su recolector preferido y siga los pasos:
Antes de que empieces
Asegúrese de tener:
Clave de licenciade New Relic válida
Habilite el módulo HTTP stub status en el pod de NGINX que necesita ser monitoreado
Agrega las etiquetas
appyrolea cada pod de NGINX que necesite ser monitoreadoPara la instalación con manifiesto: complete la instalación base del manifiesto de OpenTelemetry para Kubernetes
Para la instalación con Helm: complete la instalación base con Helm de OpenTelemetry en Kubernetes
Configurar el recolector NRDOT
Instale el recolector NRDOT utilizando manifiestos de Kubernetes o Helm.
Después de completar la instalación del manifiesto base de OpenTelemetry para Kubernetes, configure el monitoreo de NGINX siguiendo estos pasos:
Actualice la imagen del recolector para usar el recolector NRDOT.
En los archivos
deployment.yamlydaemonset.yamlde su directorio localrendered, actualice la imagen a:image: newrelic/nrdot-collector:latestActualice el
deployment-configmap.yamlpara el monitoreo de NGINX:Seleccione una de las siguientes opciones de configuración según sus requisitos de monitoreo:
Importante
Esta opción monitorea solo NGINX y elimina la recopilación de otras métricas de Kubernetes. Eliminarás recolectores adicionales más adelante para evitar la ingestión de métricas no deseadas.
Reemplace el contenido debajo de
deployment-config.yaml: |con la siguiente configuración específica de NGINX:extensions:health_check:endpoint: 0.0.0.0:13133k8s_observer:auth_type: serviceAccountobserve_pods: trueobserve_nodes: truereceivers:receiver_creator/nginx:watch_observers: [k8s_observer]receivers:nginx:rule: type == "pod" && labels["app"] == "nginx" && labels["role"] == "reverse-proxy" # Update with your labelsconfig:endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as neededmetrics:nginx.requests:enabled: truenginx.connections_accepted:enabled: truenginx.connections_handled:enabled: truenginx.connections_current:enabled: truecollection_interval: 30sresource_attributes:nginx.server.endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as needednginx.port: '<YOUR_STUB_STATUS_PORT>' # Update to match your configurationprocessors:batch:send_batch_max_size: 1000timeout: 30ssend_batch_size: 800memory_limiter:check_interval: 1slimit_percentage: 80spike_limit_percentage: 25resource/cluster:attributes:- key: k8s.cluster.namevalue: "<CLUSTER_NAME>" # Replace with your cluster nameaction: inserttransform/nginx:metric_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server","k8s",attributes["k8s.cluster.name"],attributes["k8s.namespace.name"],"pod",attributes["k8s.pod.name"],"nginx",attributes["nginx.port"]], ":"))- set(attributes["nginx.deployment.name"], attributes["k8s.pod.name"])transform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")exporters:otlp_http/newrelic:endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>"headers:api-key: ${env:NR_LICENSE_KEY}service:extensions: [health_check, k8s_observer]pipelines:metrics/nginx:receivers: [receiver_creator/nginx]processors: [batch, resource/cluster, transform/nginx, transform/metadata_nullify, memory_limiter]exporters: [otlp_http/newrelic]Parámetro de configuración
La siguiente tabla describe los parámetros de configuración clave:
Parámetro
Descripción
<YOUR_STUB_STATUS_PORT>Reemplace con su puerto de estado de stub de NGINX (por ejemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Reemplace con su ruta de estado de stub de NGINX (por ejemplo, basic_status)
<CLUSTER_NAME>Reemplace con el nombre de su clúster de Kubernetes para su identificación en New Relic
<YOUR_NEWRELIC_OTLP_ENDPOINT>Actualice con el extremo OTLP de su región. Consulte la
appy
roleetiquetas
Etiquetas de pod utilizadas para identificar los pods de NGINX (actualice la regla para que coincida con sus etiquetas)
collection_intervalIntervalo en segundos para recopilar métricas. El valor predeterminado está establecido en
30ssend_batch_max_sizeNúmero máximo de métricas a agrupar en lotes antes de enviar. El valor predeterminado está establecido en
1000timeoutTiempo de espera en segundos antes de enviar las métricas agrupadas por lotes. El valor predeterminado está establecido en
30sAgregue las siguientes secciones a su
deployment-configmap.yamlexistente:Extensiones para agregar:
extensions:health_check:endpoint: 0.0.0.0:13133k8s_observer:auth_type: serviceAccountobserve_pods: trueobserve_nodes: trueReceptores a agregar:
receivers:receiver_creator/nginx:watch_observers: [k8s_observer]receivers:nginx:rule: type == "pod" && labels["app"] == "nginx" && labels["role"] == "reverse-proxy" # Update with your labelsconfig:endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as neededmetrics:nginx.requests:enabled: truenginx.connections_accepted:enabled: truenginx.connections_handled:enabled: truenginx.connections_current:enabled: truecollection_interval: 30sresource_attributes:nginx.server.endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as needednginx.port: '<YOUR_STUB_STATUS_PORT>' # Update to match your configurationProcesadores para agregar:
processors:resource/cluster:attributes:- key: k8s.cluster.namevalue: "<CLUSTER_NAME>" # Replace with your cluster nameaction: inserttransform/nginx:metric_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server","k8s",attributes["k8s.cluster.name"],attributes["k8s.namespace.name"],"pod",attributes["k8s.pod.name"],"nginx",attributes["nginx.port"]], ":"))- set(attributes["nginx.deployment.name"], attributes["k8s.pod.name"])transform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")Pipelines de servicio para agregar:
service:extensions: [health_check, k8s_observer] # Add to existing extensionspipelines:metrics/nginx:receivers: [receiver_creator/nginx]processors: [batch, resource/cluster, transform/nginx, transform/metadata_nullify, memory_limiter]exporters: [otlphttp/newrelic]Parámetro de configuración
La siguiente tabla describe los parámetros de configuración clave:
Parámetro
Descripción
<YOUR_STUB_STATUS_PORT>Reemplace con su puerto de estado de stub de NGINX (por ejemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Reemplace con su ruta de estado de stub de NGINX (por ejemplo, basic_status)
<CLUSTER_NAME>Reemplace con el nombre de su clúster de Kubernetes para su identificación en New Relic
appy
roleetiquetas
Etiquetas de pod utilizadas para identificar los pods de NGINX (actualice la regla para que coincida con sus etiquetas)
collection_intervalIntervalo en segundos para recopilar métricas. El valor predeterminado está establecido en
30smemory_limiterProcesador utilizado en la configuración existente de Kubernetes para limitar el uso de memoria
Aplique los manifiestos actualizados y reinicie el despliegue.
- Para el monitoreo de solo NGINX, ejecute estos comandos:
bash$kubectl apply -n newrelic -R -f rendered$kubectl delete daemonset nr-k8s-otel-collector-daemonset -n newrelic$kubectl delete deployment nr-k8s-otel-collector-kube-state-metrics -n newrelic$kubectl rollout restart deployment nr-k8s-otel-collector-deployment -n newrelic- Para el monitoreo de K8s + NGINX, ejecute estos comandos:
bash$kubectl apply -n newrelic -R -f rendered$kubectl rollout restart deployment nr-k8s-otel-collector-deployment -n newrelic
Actualice su
values.yamlpara el chart de Helmnr-k8s-otel-collectorcon los siguientes cambios:a. Actualice el respositorio de la imagen del recolector y la etiqueta para usar NRDOT:
images:collector:repository: newrelic/nrdot-collectortag: latestb. Agregue las siguientes secciones bajo
deployment.extraConfig:Importante
En
deployment.extraConfig,pipelines:debe definirse en el nivel raíz —no anidado debajo deservice:. La plantilla de chart de Helm mapeaextraConfig.pipelinesenservice.pipelinesyextraConfig.service.extensionsenservice.extensions.Extensiones:
extensions:health_check:endpoint: 0.0.0.0:13133k8s_observer:auth_type: serviceAccountobserve_pods: trueobserve_nodes: trueReceptores:
receivers:receiver_creator/nginx:watch_observers: [k8s_observer]receivers:nginx:rule: type == "pod" && labels["app"] == "nginx" && labels["role"] == "reverse-proxy" # Update with your labelsresource_attributes:nginx.server.endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as needednginx.port: '<YOUR_STUB_STATUS_PORT>' # Update to match your configurationconfig:endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as neededmetrics:nginx.requests:enabled: truenginx.connections_accepted:enabled: truenginx.connections_handled:enabled: truenginx.connections_current:enabled: truecollection_interval: 30sProcesadores:
processors:resource/cluster:attributes:- key: k8s.cluster.namevalue: "<CLUSTER_NAME>" # Replace with your cluster nameaction: inserttransform/nginx:metric_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server","k8s",attributes["k8s.cluster.name"],attributes["k8s.namespace.name"],"pod",attributes["k8s.pod.name"],"nginx",attributes["nginx.port"]], ":"))- set(attributes["nginx.deployment.name"], attributes["k8s.pod.name"])transform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")Extensiones de servicio:
service:extensions: [health_check, k8s_observer]Pipelines:
pipelines:metrics/nginx:receivers: [receiver_creator/nginx]processors: [batch, resource/cluster, transform/nginx, transform/metadata_nullify, memory_limiter]exporters: [otlphttp/newrelic]Parámetro de configuración
La siguiente tabla describe los parámetros de configuración clave:
Parámetro
Descripción
<YOUR_STUB_STATUS_PORT>Reemplace con su puerto de estado de stub de NGINX (por ejemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Reemplace con su ruta de estado de stub de NGINX (por ejemplo, basic_status)
<CLUSTER_NAME>Reemplace con el nombre de su clúster de Kubernetes para su identificación en New Relic
appy
roleetiquetas
Etiquetas de pod utilizadas para identificar los pods de NGINX (actualice la regla para que coincida con sus etiquetas)
collection_intervalIntervalo en segundos para recopilar métricas. El valor predeterminado está establecido en
30ssend_batch_max_sizeNúmero máximo de métricas a agrupar en lotes antes de enviar. El valor predeterminado está establecido en
1000timeoutTiempo de espera en segundos antes de enviar las métricas agrupadas por lotes. El valor predeterminado está establecido en
30smemory_limiterProcesador utilizado para limitar el uso de memoria.
limit_percentageestablece el porcentaje máximo de memoria antes de que comience la limitación
Aplique los valores actualizados a su release de Helm en ejecución:
bash$helm upgrade nr-k8s-otel-collector newrelic/nr-k8s-otel-collector \>--namespace newrelic \>--reuse-values \>-f values.yaml
Antes de que empieces
Asegúrese de tener:
Clave de licenciade New Relic válida
Habilite el módulo HTTP stub status en el pod de NGINX que necesita ser monitoreado
Agrega las etiquetas
appyrolea cada pod de NGINX que necesite ser monitoreadoHelm instalado
Configurar el recolector OpenTelemetry
Implemente el OpenTelemetry Collector en su clúster de Kubernetes usando Helm. El recopilador descubrirá y extraerá automáticamente métricas de sus pods NGINX.
Descargue o cree un archivo
values.yamlpersonalizado basado en el values.yaml de OpenTelemetry Collector.Actualice las siguientes secciones en su archivo
values.yaml:Establecer el modo en despliegue:
mode: deploymentReemplace el repositorio de imágenes:
image:repository: otel/opentelemetry-collector-contribConfigurar rol de clúster:
clusterRole:create: truerules:- apiGroups: [""]resources: ["pods", "nodes", "nodes/stats", "nodes/proxy"]verbs: ["get", "list", "watch"]- apiGroups: ["apps"]resources: ["replicasets"]verbs: ["get", "list", "watch"]Configurar los límites de recursos:
resources:limits:cpu: 250mmemory: 512MiReemplace toda la sección de configuración con la configuración de monitoreo de NGINX:
config:extensions:health_check:endpoint: 0.0.0.0:13133k8s_observer:auth_type: serviceAccountobserve_pods: trueobserve_nodes: truereceivers:receiver_creator/nginx:watch_observers: [k8s_observer]receivers:nginx:rule: type == "pod" && labels["app"] == "nginx" && labels["role"] == "reverse-proxy" # Update with your labelsconfig:endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as neededmetrics:nginx.requests:enabled: truenginx.connections_accepted:enabled: truenginx.connections_handled:enabled: truenginx.connections_current:enabled: truecollection_interval: 30sresource_attributes:nginx.server.endpoint: 'http://`endpoint`:<YOUR_STUB_STATUS_PORT>/<YOUR_STUB_STATUS_PATH>' # Update port and path as needednginx.port: '<YOUR_STUB_STATUS_PORT>' # Update to match your configurationprocessors:batch:send_batch_size: 1024timeout: 30sresource/cluster:attributes:- key: k8s.cluster.namevalue: "<CLUSTER_NAME>" # Replace with your cluster nameaction: inserttransform/nginx:metric_statements:- context: resourcestatements:- set(attributes["nginx.display.name"], Concat(["server","k8s",attributes["k8s.cluster.name"],attributes["k8s.namespace.name"],"pod",attributes["k8s.pod.name"],"nginx",attributes["nginx.port"]], ":"))- set(attributes["nginx.deployment.name"], attributes["k8s.pod.name"])transform/metadata_nullify:metric_statements:- context: metricstatements:- set(description, "")- set(unit, "")exporters:otlp_http/newrelic:endpoint: "<YOUR_NEWRELIC_OTLP_ENDPOINT>" # Update for your regionheaders:api-key: "<YOUR_NEW_RELIC_LICENSE_KEY>" # Replace with your New Relic license keyservice:extensions: [health_check, k8s_observer]pipelines:metrics/nginx:receivers: [receiver_creator/nginx]processors: [batch, resource/cluster, transform/nginx, transform/metadata_nullify]exporters: [otlp_http/newrelic]Parámetro de configuración
La siguiente tabla describe los parámetros de configuración clave:
Parámetro
Descripción
<YOUR_STUB_STATUS_PORT>Reemplace con su puerto de estado de stub de NGINX (por ejemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Reemplace con su ruta de estado de stub de NGINX (por ejemplo, basic_status)
<CLUSTER_NAME>Reemplace con el nombre de su clúster de Kubernetes para su identificación en New Relic
<YOUR_NEWRELIC_OTLP_ENDPOINT>Actualice con el extremo OTLP de su región. Consulte la
<YOUR_NEW_RELIC_LICENSE_KEY>Reemplace con su clave de licencia de New Relic
appy
roleetiquetas
Etiquetas de pod utilizadas para identificar los pods de NGINX (actualice la regla para que coincida con sus etiquetas)
basic_statusRuta del extremo de estado de stub de NGINX (actualice si usa una ruta diferente)
collection_intervalIntervalo en segundos para recopilar métricas. 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
1024timeoutTiempo de espera en segundos antes de enviar las métricas agrupadas por lotes. El valor predeterminado está establecido en
30s
Siga la guía de instalación del chart de Helm de OpenTelemetry Collector para instalar el recolector utilizando su archivo
values.yamlpersonalizado.Comandos de ejemplo:
bash$helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts$helm repo update$helm upgrade my-opentelemetry-collector open-telemetry/opentelemetry-collector -f your-custom-values.yaml -n newrelic --create-namespace --installVerifique que los pods se estén ejecutando:
bash$kubectl get pods -n newrelic --watchDebería ver los pods del OpenTelemetry Collector en un estado
Runningen el namespacenewrelic.Ejecuta una consulta NRQL en New Relic para verificar la recopilación de datos. Reemplace el nombre del clúster con el nombre de su clúster:
FROM MetricSELECT *WHERE metricName LIKE 'nginx.%'AND instrumentation.provider = 'opentelemetry'AND k8s.cluster.name = 'your-cluster-name'SINCE 10 minutes ago
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.
Referencia de métricas y atributos
Esta integración recopila las mismas métricas principales de NGINX que la implementación en el host, con atributos de recursos específicos de Kubernetes adicionales para la identificación del clúster, el espacio de nombres y el pod.
Para una referencia completa de métricas y atributos: Consulte la referencia de métricas y atributos de NGINX OpenTelemetry para obtener descripciones detalladas de todas las métricas, tipos y atributos de recursos para los despliegues de Kubernetes.
Próximos pasos
Explore la supervisión relacionada:
- Monitorear NGINX Plus con OpenTelemetry - Para implementaciones comerciales de NGINX Plus
- Monitorear NGINX autohospedado con OpenTelemetry - Para implementaciones de servidores tradicionales
Recursos específicos de Kubernetes:
- OpenTelemetry Collector en Kubernetes - Configuraciones avanzadas del recopilador