O que é distributed tracing?
Quando cada serviço reporta por conta própria, você vê que uma web action está lenta, mas não que um serviço de estoque mais adiante na cadeia de chamadas causou isso. No AppSignal, cada um desses serviços é um app ou namespace separado. Para seguir uma requisição por eles, você precisa abrir cada um e alinhar os timestamps. O distributed tracing remove essas fronteiras. Conforme uma requisição se move de um serviço para o próximo, cada serviço marca seu trabalho com o mesmo ID de trace e registra qual trabalho o chamou. O AppSignal usa esses IDs para reconstruir o caminho completo da requisição, por todos os serviços que participaram. Com um trace distribuído, você pode:- Seguir uma requisição do seu ponto de entrada por todos os serviços alcançados.
- Ver para onde o tempo foi, mesmo quando a parte lenta roda em um serviço ou aplicação diferente.
- Descobrir em qual serviço um erro começou, não apenas onde ele apareceu.
Spans, traces e serviços
O AppSignal descreve um trace com três blocos de construção.- Span: uma única unidade de trabalho, como uma requisição HTTP recebida, uma query de banco de dados, uma chamada a outro serviço, ou um bloco de código que você mesmo instrumenta. Um span tem um nome, uma duração e atributos, e registra o span que o iniciou. Spans são a menor coisa da qual um trace é feito.
- Trace: todos os spans que pertencem a uma operação de ponta a ponta. Como cada span conhece seu span pai, os spans em um trace formam uma árvore que descreve a requisição do início ao fim.
- Serviço: um componente nomeado que participa de um trace, como uma
aplicação web, um worker em background ou uma API interna. Você nomeia um
serviço com a opção
service_name(ou a variável de ambienteAPPSIGNAL_SERVICE_NAME), e o AppSignal usa esse nome para diferenciar serviços dentro de um trace. Um único trace geralmente atravessa vários serviços, e esses serviços podem reportar para aplicações AppSignal diferentes.

Os spans de um trace formam uma árvore. Cada span registra o span que o iniciou, a partir do span raiz.
Dentro do AppSignal, um trace é um tipo de
sample: o registro detalhado de uma
requisição, armazenado para que você possa abri-lo e lê-lo span por span. O
AppSignal deriva suas métricas de performance, como tempo de resposta e
throughput, a partir desses traces, então um gráfico de performance e um
único trace são duas visões dos mesmos dados.
Disponibilidade e configuração
O distributed tracing está disponível primeiro para Python, Ruby e PHP. Outras linguagens, como Elixir e JavaScript, ainda não são suportadas.Distributed tracing é um recurso experimental disponível apenas ao usar
o collector hospedado do AppSignal.
- Python e Ruby: defina a opção
collector_endpointpara a URL de um collector hospedado em vez de um self-hosted. Veja configuração do collector para Python, configuração do collector para Ruby, e collectors hospedados vs self-hosted para a diferença entre os dois. - PHP: nada para configurar. O pacote PHP já reporta por um collector, então o distributed tracing funciona assim que seu app reporta ao AppSignal.
- Uma configuração personalizada do OpenTelemetry: nada para configurar. Exportar para um collector é a única forma como essas configurações reportam, então os traces se conectam sozinhos.
Como isso funciona no AppSignal?
O AppSignal constrói traces distribuídos sobre o OpenTelemetry, que cuida da parte que torna o distributed tracing possível: a propagação de contexto. Quando um serviço instrumentado chama outro serviço, o OpenTelemetry anexa o ID de trace e o span de origem à chamada de saída. Ele viaja como headers em uma requisição HTTP, ou como metadados em um job enfileirado, e o serviço que o recebe o lê e continua o mesmo trace. Cada serviço reporta a porção do trace pela qual é responsável, chamada de seu subtrace. O AppSignal recebe esses subtraces de forma independente, muitas vezes de processos ou hosts diferentes, e os remonta em um único trace usando o ID de trace compartilhado e os vínculos pai e filho entre os spans. Você nunca configura a conexão entre serviços manualmente. Se uma biblioteca está instrumentada, suas chamadas se juntam ao trace automaticamente.
Um trace abrange vários serviços. Cada serviço reporta um subtrace, e o AppSignal monta os subtraces em um único trace.
Suporte entre aplicações
Um serviço no AppSignal não é a mesma coisa que uma aplicação. Vários serviços podem reportar para uma aplicação AppSignal, e um único trace também pode atravessar serviços que pertencem a aplicações totalmente separadas. Por exemplo, uma aplicação web, um serviço de estoque e um serviço de auditoria podem todos reportar para uma aplicação AppSignal, cada um com seu próprio nome de serviço, enquanto um serviço separado reporta como sua própria aplicação. Uma única ação do usuário, como um checkout, pode produzir um trace que inclui serviços de ambas as aplicações. O service map do AppSignal trata isso como um único trace, independentemente de onde cada subtrace foi reportado. Ele identifica a aplicação dona de cada serviço e vincula cada cartão à visão dessa aplicação sobre o mesmo trace. Para seguir uma requisição por uma fronteira entre aplicações, selecione o cartão do próximo serviço. Você passa de uma aplicação para a próxima ao longo do mesmo trace, sem perder o fio. Isso funciona porque o contexto se propaga por fronteiras de processo e de aplicação da mesma forma que entre serviços, e o AppSignal corresponde subtraces pelo seu ID de trace compartilhado, não pela aplicação ou host de onde vieram.Veja também
Página do trace
Leia um trace: sua linha do tempo, detalhes dos spans, tags, logs
relacionados e triggers.
Performance / tracing
Inspecione os spans e eventos dentro de um único trace.
Instrumentação personalizada
Adicione seus próprios spans ao trace quando os padrões não forem
suficientes.
Namespaces
Como o AppSignal agrupa traces por endpoint, job e task.
Labs
Experimente distributed tracing e outros recursos experimentais.