Se você concluiu a instalação da integração do Elasticsearch com OpenTelemetry ou a instalação no Kubernetes mas não vê dados no New Relic, encontre seu problema abaixo e siga as etapas de solução.
Implantações baseadas em host
Como verificar
$sudo systemctl status otelcol-contribResolução
- Se o serviço estiver inativo, inicie-o:
sudo systemctl start otelcol-contrib - Se o serviço falhou, corrija os erros de configuração e reinicie:
sudo systemctl restart otelcol-contrib
Como verificar
$sudo journalctl -u otelcol-contrib.service -fResolução
Analise a saída do log e resolva a causa raiz (por exemplo, problemas de conexão, falhas de autenticação ou problemas de permissão).
Amostra de erro:
dial tcp [::1]:9200: connect: connection refused
Resolução
- Certifique-se de que o
endpointemconfig.yamlcorresponda ao host e à porta do Elasticsearch. - Confirme se o Elasticsearch está em execução e acessível a partir do host do coletor.
Amostra de erro:
permanent error: 403 Forbidden
Resolução
Verifique
NEWRELIC_LICENSE_KEYem/etc/systemd/system/otelcol-contrib.service.d/environment.conf.Recarregue o systemd e reinicie o coletor:
bash$sudo systemctl daemon-reload$sudo systemctl restart otelcol-contrib
Amostra de erro:
permission denied
ou
cannot open file
Resolução
- Adicione o usuário do coletor ao grupo Elasticsearch:bash$sudo usermod -a -G elasticsearch otelcol-contrib
- Reinicie o coletor:
sudo systemctl restart otelcol-contrib
Como verificar
$# Unsecured cluster$curl -I http://localhost:9200$
$# With authentication$curl -u username:password -k https://localhost:9200Resolução
Verifique se o cluster está íntegro, se as credenciais são válidas e se as configurações de firewall ou segurança permitem o acesso.
Resolução
- Garanta que o processador
resourcedetectionesteja incluído em todos os pipelines de métricas. - Verifique se
elasticsearch.cluster.nameestá definido via processadorresource/cluster_name_override.
Resolução
- Confirme se os caminhos do receptor
filelogestão corretos e absolutos. - Verifique se o pipeline de logs inclui tanto o receptor
filelogquanto o exportadorotlphttp.
Implantações do Kubernetes
Como verificar
$# Verify your Elasticsearch pods have the required label$kubectl get pods -n <namespace> -l app=elasticsearch --show-labelsResolução
Se nenhum pod for retornado, seus pods do Elasticsearch não possuem o rótulo
app=elasticsearch
obrigatório. O receiver_creator não consegue descobrir pods sem rótulos correspondentes.
- Para StatefulSet/Implantação, adicione o rótulo no modelo do pod:spec:template:metadata:labels:app: elasticsearch
- Para pods existentes, adicione o rótulo e reinicie:bash$kubectl label pods -l <your-selector> app=elasticsearch -n <namespace>$kubectl rollout restart statefulset/elasticsearch -n <namespace>
- Se estiver usando rótulos personalizados, atualize a regra do receiver no values.yaml para corresponder aos seus rótulos:rule: type == "pod" && labels["app"] == "your-custom-label"
Como verificar
$kubectl get pods -n newrelic$kubectl describe pod <collector-pod-name> -n newrelicResolução
Verifique os eventos do pod para erros:
kubectl describe podRevise os logs do coletor:
bash$kubectl logs -n newrelic -l app.kubernetes.io/name=opentelemetry-collectorVerifique se o segredo existe:
bash$kubectl get secret newrelic-licenses -n newrelicVerifique se os limites de recursos não estão muito baixos
Como verificar
$# Check collector logs for discovery errors$kubectl logs -n newrelic -l app.kubernetes.io/name=opentelemetry-collector | grep "receiver_creator"Resolução
Verifique se as permissões RBAC estão definidas corretamente:
bash$kubectl get clusterrole | grep opentelemetry$kubectl describe clusterrole <role-name>Certifique-se de que o coletor tenha permissões para monitorar pods, nós e endpoints
Verifique se a extensão k8s_observer está ativada na configuração
Como verificar
$# Check network policies$kubectl get networkpolicies -n <namespace>$
$# Test connectivity from collector to Elasticsearch$kubectl exec -n newrelic <collector-pod> -- curl http://<es-pod-ip>:9200Resolução
- Verifique se as políticas de rede permitem o tráfego do namespace newrelic para o seu namespace Elasticsearch
- Verifique se os pods do Elasticsearch estão expondo a porta correta (padrão: 9200)
- Certifique-se de que nenhuma regra de firewall bloqueie a comunicação entre pods
Amostra de erro:
permanent error: 403 Forbidden
Resolução
Verifique se o segredo contém a chave de licença correta:
bash$kubectl get secret newrelic-licenses -n newrelic -o jsonpath='{.data.NEWRELIC_LICENSE_KEY}' | base64 -dCertifique-se de que o endpoint OTLP esteja correto para sua região
Verifique se o segredo está montado no pod do coletor:
bash$kubectl describe pod <collector-pod> -n newrelic | grep -A5 "Environment"
Resolução
Verifique se você está usando
mode: daemonset(o modo de implantação não pode acessar os logs do nó)Verifique se as montagens de volume estão configuradas corretamente:
bash$kubectl describe pod <collector-pod> -n newrelic | grep -A10 "Mounts"Verifique se o caminho do receptor filelog corresponde aos logs do seu pod do Elasticsearch:
bash$kubectl exec -n newrelic <collector-pod> -- ls /var/log/pods/*/elasticsearch*/*.logCertifique-se de que o coletor tenha permissões de leitura nos diretórios de log do host
Resolução
Verifique se a variável de ambiente
K8S_CLUSTER_NAMEestá definida no values.yamlVerifique se o processador
resource/clusterestá no pipeline de métricasConsulta para verificar:
FROM Metric SELECT * WHERE metricName LIKE 'elasticsearch.%' LIMIT 1Verifique se o atributo
k8s.cluster.nameestá presente
Correlação de APM e distributed tracing
Esses problemas se aplicam quando você configurou a correlação do APM com o distributed tracing.
Como verificar
FROM Span SELECT count(*) WHERE es.cluster.name = '<elasticsearch-cluster-name>' SINCE 30 minutes agoResolução
- A exportação nativa de trace OTLP requer o Elasticsearch 9.4 ou posterior. Confirme sua versão com
curl http://localhost:9200. - Verifique se todas as três configurações estão presentes em
elasticsearch.yml:telemetry.tracing.enabled: true,telemetry.export.endpointetelemetry.tracing.sample_rate. - Confirme se a propriedade de sistema da JVM
-Dtelemetry.otel.traces.enabled=trueestá definida (emjvm.optionsouES_JAVA_OPTS) e, em seguida, reinicie o Elasticsearch. - O
telemetry.tracing.sample_ratepadrão é0.001(0,1%). Aumente-o durante a validação para que os spans apareçam rapidamente.
Resolução
- Confirme se o coletor tem um receptor
otlpcom o protocolo gRPC habilitado em0.0.0.0:4317e se o endpoint está acessível a partir dos nós do Elasticsearch. - Confirme se existe um pipeline
tracese se ele inclui o receptorotlpe o exportadorotlphttp. - Verifique os logs do coletor em busca de erros do receptor OTLP ou de exportação.
Causa
Um self-loop aparece quando os spans do Elasticsearch que chegam ao New Relic não podem ser atribuídos a um aplicativo chamador. Existem duas origens comuns:
Spans do Elasticsearch sem pai (raiz) — spans sem um span de aplicativo pai, como sondas de integridade do Kubernetes ou as próprias chamadas de coleta do receptor de métricas do Elasticsearch (
_nodes/stats,_cluster/healthe similares). Como eles não fazem parte do trace de um aplicativo, o New Relic não tem um serviço de chamada e desenha o relacionamento no próprio cluster.O próprio endereço do nó — os spans do servidor Elasticsearch carregam
http.request.headers.host(eserver.address), que o New Relic resolve de volta para o cluster.Resolução
Adicione ambos os processadores ao pipeline
tracese, em seguida, reinicie o coletor.filter/drop_rootless_esdescarta os spans do Elasticsearch sem pai (os spans orientados por aplicativo sempre têm um pai, portanto, são mantidos) etransform/strip_es_hostremove os atributos de endereço:processors:filter/drop_rootless_es:error_mode: ignoretraces:span:- 'instrumentation_scope.name == "elasticsearch" and IsRootSpan()'transform/strip_es_host:error_mode: ignoretrace_statements:- context: spanstatements:- delete_key(attributes, "http.request.headers.host") where instrumentation_scope.name == "elasticsearch"- delete_key(attributes, "server.address") where instrumentation_scope.name == "elasticsearch"# traces pipeline: processors: [filter/drop_rootless_es, transform/strip_es_host, batch]Os auto-loops existentes são limpos automaticamente assim que os spans corrigidos chegam e o relacionamento anterior expira (isso pode levar até cerca de 75 minutos).
Resolução
- Certifique-se de que seus aplicativos estejam instrumentados e propaguem o cabeçalho W3C
traceparentem suas chamadas do Elasticsearch. A maioria dos clientes modernos do Elasticsearch faz isso automaticamente quando o aplicativo é instrumentado com o OpenTelemetry. - Abra um distributed trace que inclua uma chamada do Elasticsearch e confirme se os spans do aplicativo e os spans do Elasticsearch compartilham o mesmo trace.
- Aguarde alguns minutos para que o relacionamento seja estabelecido. O New Relic reavalia os relacionamentos de entidade periodicamente.
Resolução
- O caminho dos traces usa
es.cluster.namecomo chave (marcado pelo Elasticsearch em seus spans) e o caminho das métricas usaelasticsearch.cluster.name. Oelasticsearchreceiverrelataelasticsearch.cluster.nameautomaticamente a partir do valor que o Elasticsearch retorna, portanto, ambos derivam do mesmocluster.namee são resolvidos em uma entidade — nenhuma configuração extra do coletor é necessária. - Não force o nome do cluster de métricas para um valor fixo. Se a configuração do seu coletor o definir com um processador
resource(por exemplo, umresource/cluster_name_overrideque define o nome de forma fixa), remova essa substituição — caso contrário, as métricas e os traces serão resolvidos em duas entidades diferentes e a entidade correlacionada não mostrará dados de métricas. - Certifique-se de que o
cluster.namedo Elasticsearch seja exclusivo em sua conta do New Relic para que seja mapeado para uma única entidade não ambígua.