Familiarize-se com estes tópicos trace do OpenTelemetry para garantir que seu rastreamento e extensões apareçam no New Relic.
Os campos obrigatórios
Os campos startTimeUnixNano
e endTimeUnixNano
em intervalos são obrigatórios de acordo com o protocolo OpenTelemetry para dados de rastreamento. Quando startTimeUnixNano
não está presente, o intervalo é eliminado e um NrIntegrationError
é criado. Quando endTimeUnixNano
não está presente, a duração do seu intervalo é grande e negativa.
O campo timeUnixNano
no evento span é obrigatório. Quando timeUnixNano
não está presente, o evento span é eliminado e um NrIntegrationError
é criado.
Os campos traceId
e spanId
em intervalos são obrigatórios de acordo com o protocolo OpenTelemetry para dados de rastreamento. Quando traceId
ou spanId
não estão presentes, o intervalo é eliminado e um NrIntegrationError
é criado.
Campos obsoletos e removidos
Os códigos de status de span foram descontinuados no OTLP v0.6.0 e foram removidos a partir da v0.12.0. Os clientes que configurarem e enviarem essas mensagens e campos verão o valor definido como UNRECOGNIZED
. Entre em contato com o suporte, pois isso causa problemas.
Amostragem
Dados trace são o tipo de dados OpenTelemetry mais maduro. Por causa disso, a experiência do usuário OpenTelemetry da New Relic é amplamente baseada em dados trace e, portanto, influenciada pela sua estratégia de amostragem.
Você pode configurar a amostragem em vários locais:
Service:
Use o OpenTelemetry SDK para seu idioma.
Collector:
Se você estiver executando sua própria instância do coletor OpenTelemetry, poderá configurá-lo para fazer formas mais sofisticadas de amostragem, como amostras baseadas na cauda (veja abaixo).
Confira esta documentação sobre como configurar diferentes tipos de amostragem:
Atributo de recursos e bytes armazenados
Os atributos de recurso OpenTelemetry são definidos como uma representação imutável da entidade que produz telemetria e armazenados como attributes
. É importante entender como esses atributos são aplicados ao rastreamento de dados no New Relic e como eles podem impactar os bytes armazenados. Podemos observar o impacto do atributo de recurso usando um exemplo de carga útil OTLP e inspecionando a saída da consulta NRQL resultante.
Exemplo de carga útil trace OTLP
{ "resourceSpans": [ { "resource": { "attributes": [ { "key": "service.name", "value": { "stringValue": "newrelic-otlp-service" } }, { "key": "process.command_line", "value": { "stringValue": "/opt/java/openjdk/bin/java -javaagent:agent/opentelemetry-agent.jar" } } ] }, "scopeSpans": [ { "scope": { "name": "newrelic-instrumentation-library", "version": "1.0.0" }, "spans": [ { "attributes": [ { "key": "message_id", "value": { "stringValue": "000000-aaaaaa-111111-bbbbbb" } } ], "startTimeUnixNano": "1677182057000000000", "endTimeUnixNano": "1677182059000000000", "kind": "SPAN_KIND_INTERNAL", "name": "example-span", "spanId": "c469d81892057f5f", "traceId": "aa04993b9acefbedea802f8d96e4bc58" } ] } ] } ]}
Representação de consulta NRQL
{ "duration.ms": 2000.0, "entity.guid": "OBFUSCATED", "entity.name": "newrelic-otlp-service", "entity.type": "SERVICE", "entityGuid": "OBFUSCATED", "guid": "c469d81892057f5f", "id": "c469d81892057f5f", "instrumentation.provider": "opentelemetry", "message_id": "000000-aaaaaa-111111-bbbbbb", "name": "example-span", "newRelic.ingestPoint": "api.traces", "newrelic.source": "api.traces.otlp", "nr.isPrimaryEntityData": true, "otel.library.name": "newrelic-instrumentation-library", "otel.library.version": "1.0.0", "process.command_line": "/opt/java/openjdk/bin/java -javaagent:agent/opentelemetry-agent.jar", "service.name": "newrelic-otlp-service", "span.kind": "internal", "timestamp": 1677182057000, "trace.id": "aa04993b9acefbedea802f8d96e4bc58", "traceId": "aa04993b9acefbedea802f8d96e4bc58"}
Dica
Este exemplo é uma comparação simplificada destinada a ilustrar os conceitos subjacentes. As versões do mundo real parecerão um pouco diferentes porque têm mais complexidade.
A coisa mais importante a se notar com a atribuição de recursos é a diferença potencial no tamanho da carga enviada em comparação com o que está armazenado no NRDB. Todos os valores de atributo de recurso serão aplicados a cada período na carga útil do OTLP. O exemplo acima mostra apenas um único período sendo enviado, mas se a carga contivesse 100 períodos, cada um deles teria process.command_line
e service.name
aplicados a eles.
Para alguns aplicativos baseados em Java, o atributo process.command_line
padrão pode ter milhares de caracteres, o que pode resultar em um aumento significativo e inesperado em bytes faturáveis. Se esses atributos de recursos não agregarem valor, eles poderão ser desativados seguindo as práticas recomendadas descritas em limites de atributo.