Monitore seus servidores NGINX em execução em cluster do Kubernetes usando o coletor NRDOT (recomendado) ou o coletor OpenTelemetry contrib para enviar métricas e dados de telemetria para o New Relic.
Esta integração específica do Kubernetes descobre automaticamente os pods NGINX em seu cluster e coleta métricas sem configuração manual para cada instância. Ele utiliza o nginxreceiver e o receivercreator OpenTelemetry para monitorar dinamicamente as métricas de desempenho do NGINX, estatísticas de conexão e integridade do servidor em seu ambiente em contêineres.
Configurar o monitoramento do NGINX
Escolha seu coletor preferido e siga as etapas:
Antes de você começar
Certifique-se de ter:
Chave de licençada New Relic válida
Habilite o módulo HTTP stub status no pod do NGINX que precisa ser monitorado
Adicione os rótulos
apperolea cada pod NGINX que precisa ser monitoradoPara instalação via manifesto: conclua a instalação base do manifesto do OpenTelemetry para Kubernetes
Para instalação via Helm: conclua a instalação base do OpenTelemetry no Kubernetes via Helm
Configure o coletor NRDOT
Instale o coletor NRDOT usando manifestos do Kubernetes ou Helm.
Após concluir a instalação do manifesto base do OpenTelemetry no Kubernetes, configure o monitoramento do NGINX seguindo estes passos:
Atualize a imagem do coletor para usar o coletor NRDOT.
Em ambos os arquivos
deployment.yamledaemonset.yamlno seu diretório localrendered, atualize a imagem para:image: newrelic/nrdot-collector:latestAtualize o
deployment-configmap.yamlpara o monitoramento do NGINX:Escolha uma das seguintes opções de configuração com base nos seus requisitos de monitoramento:
Importante
Esta opção monitora apenas o NGINX e remove a coleta de outras métricas do Kubernetes. Você excluirá coletores adicionais mais tarde para evitar a ingestão indesejada de métricas.
Substitua o conteúdo em
deployment-config.yaml: |pela configuração específica do NGINX abaixo: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 configuração
A tabela a seguir descreve os principais parâmetros de configuração:
Parâmetro
Descrição
<YOUR_STUB_STATUS_PORT>Substitua pela sua porta de status stub do NGINX (por exemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Substitua pelo seu caminho de status stub do NGINX (por exemplo, basic_status)
<CLUSTER_NAME>Substitua pelo nome do seu cluster do Kubernetes para identificação no New Relic
<YOUR_NEWRELIC_OTLP_ENDPOINT>Atualize com o endpoint OTLP da sua região. Consulte a
appe
rolerótulos
Rótulos de pod usados para identificar pods NGINX (atualize a regra para corresponder aos seus rótulos)
collection_intervalIntervalo em segundos para coletar métricas. O valor padrão é definido como
30ssend_batch_max_sizeNúmero máximo de métricas a serem agrupadas em lote antes de enviar. O valor padrão é definido como
1000timeoutTempo limite em segundos para aguardar antes de enviar métricas em lote. O valor padrão é definido como
30sAdicione as seguintes seções ao seu
deployment-configmap.yamlexistente:Extensões a adicionar:
extensions:health_check:endpoint: 0.0.0.0:13133k8s_observer:auth_type: serviceAccountobserve_pods: trueobserve_nodes: trueReceptores a adicionar:
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 configurationProcessadores a adicionar:
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 serviço a adicionar:
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 configuração
A tabela a seguir descreve os principais parâmetros de configuração:
Parâmetro
Descrição
<YOUR_STUB_STATUS_PORT>Substitua pela sua porta de status stub do NGINX (por exemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Substitua pelo seu caminho de status stub do NGINX (por exemplo, basic_status)
<CLUSTER_NAME>Substitua pelo nome do seu cluster do Kubernetes para identificação no New Relic
appe
rolerótulos
Rótulos de pod usados para identificar pods NGINX (atualize a regra para corresponder aos seus rótulos)
collection_intervalIntervalo em segundos para coletar métricas. O valor padrão é definido como
30smemory_limiterProcessador usado na configuração existente do Kubernetes para limitar o uso de memória
Aplique os manifestos atualizados e reinicie a implantação.
- Para monitoramento apenas do NGINX, execute estes 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 o monitoramento do K8s + NGINX, execute estes comandos:
bash$kubectl apply -n newrelic -R -f rendered$kubectl rollout restart deployment nr-k8s-otel-collector-deployment -n newrelic
Atualize seu
values.yamlpara o Helm chartnr-k8s-otel-collectorcom as seguintes alterações:a. Atualize o repositório da imagem do coletor e a tag para usar o NRDOT:
images:collector:repository: newrelic/nrdot-collectortag: latestb. Adicione as seguintes seções sob
deployment.extraConfig:Importante
Em
deployment.extraConfig,pipelines:deve ser definido no nível raiz — não aninhado sobservice:. O template de chart do Helm mapeiaextraConfig.pipelinesemservice.pipelines, eextraConfig.service.extensionsemservice.extensions.Extensões:
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: 30sProcessadores:
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, "")Extensões de serviço:
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 configuração
A tabela a seguir descreve os principais parâmetros de configuração:
Parâmetro
Descrição
<YOUR_STUB_STATUS_PORT>Substitua pela sua porta de status stub do NGINX (por exemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Substitua pelo seu caminho de status stub do NGINX (por exemplo, basic_status)
<CLUSTER_NAME>Substitua pelo nome do seu cluster do Kubernetes para identificação no New Relic
appe
rolerótulos
Rótulos de pod usados para identificar pods NGINX (atualize a regra para corresponder aos seus rótulos)
collection_intervalIntervalo em segundos para coletar métricas. O valor padrão é definido como
30ssend_batch_max_sizeNúmero máximo de métricas a serem agrupadas em lote antes de enviar. O valor padrão é definido como
1000timeoutTempo limite em segundos para aguardar antes de enviar métricas em lote. O valor padrão é definido como
30smemory_limiterProcessador usado para limitar o uso de memória.
limit_percentagedefine a porcentagem máxima de memória antes do início da limitação
Aplique os valores atualizados à sua release do Helm em execução:
bash$helm upgrade nr-k8s-otel-collector newrelic/nr-k8s-otel-collector \>--namespace newrelic \>--reuse-values \>-f values.yaml
Antes de você começar
Certifique-se de ter:
Chave de licençada New Relic válida
Habilite o módulo HTTP stub status no pod do NGINX que precisa ser monitorado
Adicione os rótulos
apperolea cada pod NGINX que precisa ser monitoradoHelm instalado
Configurar o coletor OpenTelemetry
Implante o OpenTelemetry Collector em seu cluster Kubernetes usando Helm. O coletor descobrirá e coletará automaticamente métricas de seus pods NGINX.
Baixe ou crie um arquivo
values.yamlpersonalizado com base no values.yaml do OpenTelemetry Collector.Atualize as seguintes seções no seu arquivo
values.yaml:Definir modo para implantação:
mode: deploymentSubstitua o repositório de imagens:
image:repository: otel/opentelemetry-collector-contribConfigurar a função do cluster:
clusterRole:create: truerules:- apiGroups: [""]resources: ["pods", "nodes", "nodes/stats", "nodes/proxy"]verbs: ["get", "list", "watch"]- apiGroups: ["apps"]resources: ["replicasets"]verbs: ["get", "list", "watch"]Configure os limites de recursos:
resources:limits:cpu: 250mmemory: 512MiSubstitua toda a seção de configuração pela configuração de monitoramento do 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 configuração
A tabela a seguir descreve os principais parâmetros de configuração:
Parâmetro
Descrição
<YOUR_STUB_STATUS_PORT>Substitua pela sua porta de status stub do NGINX (por exemplo, 80, 8080)
<YOUR_STUB_STATUS_PATH>Substitua pelo seu caminho de status stub do NGINX (por exemplo, basic_status)
<CLUSTER_NAME>Substitua pelo nome do seu cluster do Kubernetes para identificação no New Relic
<YOUR_NEWRELIC_OTLP_ENDPOINT>Atualize com o endpoint OTLP da sua região. Consulte a
<YOUR_NEW_RELIC_LICENSE_KEY>Substitua por sua chave de licença New Relic
appe
rolerótulos
Rótulos de pod usados para identificar pods NGINX (atualize a regra para corresponder aos seus rótulos)
basic_statusCaminho do endpoint de status stub do NGINX (atualize se estiver usando um caminho diferente)
collection_intervalIntervalo em segundos para coletar métricas. 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
1024timeoutTempo limite em segundos para aguardar antes de enviar métricas em lote. O valor padrão é definido como
30s
Siga o guia de instalação do chart do Helm do OpenTelemetry Collector para instalar o coletor usando seu arquivo
values.yamlpersonalizado.Exemplos de comandos:
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 se os pods estão em execução:
bash$kubectl get pods -n newrelic --watchVocê deve ver os pods do OpenTelemetry Collector em um estado
Runningno namespacenewrelic.Execute uma consulta NRQL no New Relic para verificar a coleta de dados. Substitua o nome do cluster pelo nome real do seu cluster:
FROM MetricSELECT *WHERE metricName LIKE 'nginx.%'AND instrumentation.provider = 'opentelemetry'AND k8s.cluster.name = 'your-cluster-name'SINCE 10 minutes ago
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.
Referência de métricas e atributos
Esta integração coleta as mesmas métricas principais do NGINX que a implantação no host, com atributos de recursos específicos do Kubernetes adicionais para identificação de cluster, namespace e pod.
Para referência completa de métricas e atributos: Consulte a referência de métricas e atributos do NGINX OpenTelemetry para descrições detalhadas de todas as métricas, tipos e atributos de recurso para implantações do Kubernetes.
Próximos passos
Explore o monitoramento relacionado:
- Monitore o NGINX Plus com OpenTelemetry - Para implantações comerciais do NGINX Plus
- Monitore o NGINX auto-hospedado com OpenTelemetry - Para implantações de servidor tradicionais
Recursos específicos do Kubernetes:
- OpenTelemetry Collector no Kubernetes - Configurações avançadas do coletor