Habilite distributed tracing para seu aplicativo Go
Distributed tracing permite que você veja toda a jornada de suas solicitações em sistemas distribuídos. Para o agente Go, oferecemos dois tipos de distributed tracing (para obter mais detalhes, consulte Como funciona a amostragem por extensão):
Padrão (Amostragem head-based): Antes de qualquer rastreamento chegar, determinamos uma porcentagem definida de rastreamento para aceitar e analisar. Isso fornece um ponto de partida sólido para ver como o rastreamento pode ajudá-lo. Ele está ativado por padrão no Go agente 3.16.0 e superior.
Rastreamento Infinito (amostragem tail-based): Nosso serviço baseado em nuvem aceita todos os seus rastreamentos e depois os classifica para encontrar o mais importante. O rastreamento infinito analisa todo o seu rastreamento e oferece opções de configuração para obter amostras do rastreamento mais importante para você.
Se você deseja apenas experimentar distributed tracing padrão (Amostragem head-based) ou também configurar o Rastreamento Infinito (amostragem tail-based), você precisa começar configurando o rastreamento padrão.
Distributed tracing padrão
Esta é a melhor abordagem para configurar distributed tracingpadrão se você ainda não tiver instalado nenhum agente APM para seus serviços.
Dica
Ao instalar o agente New Relic Go, distributed tracing padrão é ativado por padrão. Se preferir desligá-lo, consulte nosso guia de configuração.
Identificar serviços
Descubra quais serviços atendem à sua solicitação para que você possa instrumentar cada um deles para enviar dados trace para o New Relic.
Instrumentar cada serviço com um agente APM
Para cada serviço envolvido em sua transação, você realizará a instalação separada do agente. Se alguns dos seus serviços usarem outros idiomas, basta repetir as etapas de instalação para esses idiomas.
Dica
O agente Go exige que você instrumente manualmente seus serviços Go, ao contrário da instrumentação automática do outro agente New Relic . Isso significa que você precisa adicionar algumas linhas ao seu código para usar o agente Go. Você aprenderá sobre isso quando iniciar a instalação abaixo.
Para iniciar a rotina de instalação, clique no bloco abaixo. Quando terminar de instalar cada agente, volte aqui para ver dicas para visualizar seu rastreamento.
Depois de instrumentar cada um de seus serviços com o agente APM, gere algum tráfego em sua aplicação para que possamos capturar algum rastro. Aqui estão algumas maneiras de visualizar seu rastreamento na interface:
Esta é uma maneira de ver o rastreamento de um serviço específico:
Na seção Monitor do painel esquerdo, clique em Distributed tracing.
Para obter detalhes, clique em um trace individual. Se Group similar traces estiver ativado no menu superior, clique em um grupo trace e, em seguida, clique em um trace individual.
Se você não encontrar o rastreamento desejado, poderá filtrar por trace.id.
Selecione sua entidade (serviço) no painel esquerdo.
Para obter detalhes, clique em um trace individual. Se Group similar traces estiver ativado no menu superior, clique em um grupo trace e, em seguida, clique em um trace individual.
Se você não encontrar o rastreamento desejado, poderá filtrar por trace.id.
Você pode reunir seus detalhes de registro e rastreamento para tornar a resolução de problemas mais fácil e rápida. Com logs contextualizados, você pode ver a mensagem do log junto com o trace na interface do New Relic.
Distributed tracing padrão para o agente APM captura até 10% do seu rastreamento, mas se você quiser que analisemos todos os seus dados e encontremos o rastreamento mais relevante, você pode configurar o Rastreamento Infinito.
Antes de começar, primeiro certifique-se de atender aos requisitos.
Conclua a configuração do distributed tracingpadrão
A configuração do Infinite Tracing baseia-se no distributed tracing padrão. Portanto, certifique-se de ter concluído as etapas acima e continue com a configuração do observador trace .
Configurar o observador trace
O observador trace é um serviço New Relic baseado em AWS que coleta e analisa todos os seus rastreamentos. Siga as instruções em Configurar o observador de rastreamento. Quando terminar, retorne aqui com as informações do observador trace e continue com a próxima etapa para configurar o agente.
Configurar o agente para rastreamento infinito
As definições de configuração do Infinite Tracing incluem o distributed tracing padrão, além de informações sobre o observador trace :
Se precisar de ajuda com a configuração do proxy, consulte Suporte ao proxy.
(Opcional) Personalizar rastreamento infinito
Depois de adicionar as definições de configuração do agente, você deverá começar a ver os dados na interface do New Relic. Depois de passar algum tempo analisando seus dados, você pode querer ajustar alguns recursos do Infinite Tracing:
Toda instalação do agente Go e distributed tracing requerem alguma instrumentação manual usando as configurações listadas em Configurações de configuração do agente Go. Ainda assim, pode ser necessário fazer algumas configurações adicionais para otimizar sua configuração. Aqui estão algumas diretrizes para transações instrumentadas e solicitações HTTP.
Se você estiver usando http.ServeMux do Go e quiser ativar distributed tracing do New Relic, seu aplicativo Go deverá ser instrumentado com os wrappers WrapHandle e WrapHandleFunc do New Relic. Esses wrappers iniciam e encerram automaticamente a transação com o gravador de solicitação e resposta, que adicionará automaticamente os cabeçalhos distributed tracing corretos. Para obter mais informações sobre como funciona a propagação de cabeçalho, consulte Como funciona distributed tracing .
Aqui está um exemplo de código antes da instrumentação:
http.HandleFunc("/users", usersHandler)
E aqui está um exemplo desse mesmo código após a instrumentação:
Para que suas solicitações HTTP de saída sejam elegíveis para distributed tracing, crie um segmento externo.
A maneira mais fácil de criar um segmento externo para sua solicitação HTTP de saída é usar o método newrelic.NewRoundTripper . Aqui está um exemplo de como fazer uma solicitação para http://api.example.com que inclui os cabeçalhos distributed tracing de saída:
Se você tiver uma solicitação mais complexa que usa o http.Request da biblioteca padrão Go, use o método newrelic.StartExternalSegment para garantir que sua solicitação de saída esteja qualificada para distributed tracing:
// Distributed tracing headers are not added to the outgoing request.
// Use newrelic.NewRoundTripper or newrelicc.StartExternalSegment instead.
defer newrelic.ExternalSegment{
StartTime: txn.StartSegmentNow(),
URL: url,
}.End()
return http.Get(url)
}
A carga útil distributed trace contém informações que permitem à New Relic unir as transações que ocorrem em vários serviços em um rastreamento de transação completo. Se os serviços do monitor New Relic não estiverem enviando contexto do trace entre si, isso resultará em detalhes trace incompletos.
Para obter instruções gerais sobre como usar a chamada de API abaixo para implementar distributed tracing, consulte primeiro Usar APIs distributed tracing .