Habilite distributed tracing para seu aplicativo Go
O rastreamento distribuído permite que você visualize toda a jornada das suas requisições em um sistema distribuído. Para o agente Go, oferecemos dois tipos de rastreamento distribuído (para mais detalhes, consulte Como funciona a amostragem de span):
Padrão (amostragem baseada no início): Antes de qualquer trace chegar, determinamos uma porcentagem definida de traces para aceitar e analisar. Isso oferece um ponto de partida sólido para ver como o rastreamento pode ajudar você. Está ativado por padrão nos agentes Go 3.16.0 e superiores. Por padrão, o agente Go amostra 10 traces por minuto, com um limite máximo de 2000 spans por minuto.
Infinite Tracing (amostragem baseada em cauda): Nosso serviço baseado em nuvem aceita todos os seus traces e, em seguida, os examina para encontrar os mais importantes. O Infinite Tracing analisa todos os seus traces e oferece opções de configuração para amostrar os traces que mais importam 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.
Com o Infinite Tracing (amostragem baseada em cauda), podemos analisar todos os seus dados e determinar quais traces são os mais relevantes.
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 .