O Linkerd 2.19 e versões posteriores podem exportar um span para cada solicitação com proxy diretamente do sidecar da malha, sem a necessidade de configuração extra de backend de rastreamento ou cert-manager. Combinados com pods de aplicativo instrumentados, esses spans de proxy se conectam em traces de ponta a ponta que mostram exatamente como uma solicitação se moveu pela sua malha.
Como funciona
A ativação do tracing tem duas partes:
Exportação de trace no nível da malha: os proxies do Linkerd exportam um span por solicitação para o seu OTel Collector. Isso por si só fornece traces no nível do proxy (novas tentativas, handshakes mTLS, latência por salto) sem tocar no seu aplicativo.
Instrumentação do aplicativo: os pods do seu aplicativo propagam o mesmo W3C Trace Context que os proxies usam e exportam seus próprios spans. A combinação de ambos oferece uma cascata completa no mesmo trace: do aplicativo cliente, passando pelo proxy do Linkerd, até o aplicativo de backend.
Antes de você começar
Certifique-se de ter:
Linkerd edge-26.7.0 ou posterior (2.19+). O tracing de proxy em versões anteriores exigia um serviço de coletor separado e uma integração com o cert-manager, o que este guia não aborda. Consulte o guia de introdução do Linkerd se precisar atualizar.
NRDOT ou OTel Collector Contrib em execução para sua instância do Linkerd:
transform/linkerd_service_name torna o nome de cada implantação na malha o seu service.name do APM. Use nomes de implantação exclusivos em cada cluster que se reporta à mesma conta. Um nome que também existe em outro cluster é resolvido para a mesma entidade lá, de modo que seus dados são mesclados em vez de aparecerem como dois serviços separados.
2. Marque a porta OTLP do coletor como gRPC. O serviço nr-k8s-otel-collector-gateway do chart não declara appProtocol em sua porta gRPC. Sem isso, a própria detecção de protocolo do Linkerd pode identificar incorretamente o tráfego para o coletor e descartar silenciosamente as exportações de trace dos proxies:
transform/linkerd_service_name torna o nome de cada implantação na malha o seu service.name do APM. Use nomes de implantação exclusivos em cada cluster que se reporta à mesma conta. Um nome que também existe em outro cluster é resolvido para a mesma entidade lá, de modo que seus dados são mesclados em vez de aparecerem como dois serviços separados.
Reaplique o ConfigMap acima e, em seguida, conclua estas etapas únicas:
1. Adicione o coletor à malha. Os proxies do Linkerd só podem exportar trace para um coletor que esteja dentro da malha:
2. Marque a porta OTLP do coletor como gRPC. O serviço nr-k8s-otel-collector-gateway renderizado não declara appProtocol em sua porta gRPC. Sem isso, a própria detecção de protocolo do Linkerd pode identificar incorretamente o tráfego para o coletor e descartar silenciosamente as exportações de trace dos proxies:
A partir do Linkerd 2.19, a exportação de trace de proxy é configurada diretamente no plano de controle, sem a necessidade de cert-manager ou porta separada. Duas etapas são necessárias: tornar o coletor capaz de receber trace e, em seguida, ativar a exportação de trace dos proxies.
Etapa 1: adicione a ingestão de trace ao coletor
Ao contrário do chart do NRDOT, o chart open-telemetry/opentelemetry-collector da comunidade não inclui um receptor otlp por padrão. Adicione-o explicitamente, junto com os mesmos processadores usados na guia NRDOT.
Adicione os mesmos três blocos acima (Receivers, Processors, Pipelines) à chave config do ConfigMap no seu otel-collector.yaml de OTel Collector Contrib with manifest. O Service nesse manifesto já expõe a porta 4317 (grpc) e 4318 (http), portanto, nenhuma alteração de porta é necessária. Reaplique e reinicie. Reaplicar apenas o ConfigMap não reinicia o pod do coletor em execução, portanto, ele não adotará a nova configuração sem o segundo comando:
1. Adicione o coletor à malha. Os proxies do Linkerd só podem exportar traces para um coletor que esteja dentro da malha. Ao contrário do nr-k8s-otel-collector-gateway do chart do NRDOT, nada no manifesto do OTel Collector Contrib ou no chart do Helm injeta o pod do coletor na malha por padrão:
A seção meshIdentity abaixo é obrigatória. O Linkerd só pode exportar trace para um coletor que esteja dentro da malha, que é o que o comando acima acabou de fazer.
Adicione o agente Java do OTel (ou o agente para sua linguagem) para propagar os cabeçalhos de contexto do trace. O Linkerd suporta os formatos W3C Trace Context e B3. O agente OTel trata isso automaticamente.
Dica
spec.exporter.endpoint abaixo aponta para o Service da página OTel Collector Contrib with manifest. Se você implantou o coletor NRDOT, use http://nr-k8s-otel-collector-gateway.newrelic.svc.cluster.local:4317 em vez disso.
Correlacionar métricas do aplicativo com o APM (opcional)
Se o seu aplicativo também exporta métrica do OTel SDK (não apenas trace) para o coletor, adicione o seguinte para roteá-la para um pipeline de métrica compatível com APM.