Um trace registra o caminho completo de uma requisição em um sistema distribuído — desde a entrada no primeiro service até a resposta final. O ARMS coleta esses dados para que você visualize cada chamada de service, o tempo de execução e o status de sucesso.
Benefícios
Em um sistema distribuído, uma única requisição geralmente passa por vários services. Quando uma requisição esgota o tempo limite, falha ou lança uma exceção, identificar a causa raiz requer visibilidade de toda a cadeia de chamadas. Os traces oferecem essa visibilidade:
Solução de problemas: Os traces expõem o caminho completo da requisição e o status de execução de cada service envolvido, o que permite isolar falhas rapidamente.
Otimização de desempenho: A duração de cada span revela gargalos de execução e indica um alvo preciso para otimização.
Monitoramento do sistema: Os traces proporcionam visibilidade em tempo real do comportamento do sistema e ajudam os engenheiros de O&M a avaliar a integridade dos services e a utilização de recursos.
Conceitos principais
Trace
Um trace captura a execução completa de uma requisição, desde o momento em que ela entra no sistema até a resposta final. Por exemplo, uma ação do usuário que aciona chamadas em três microsserviços gera um único trace que cobre toda a jornada, incluindo todas as chamadas de procedimento remoto (RPC) e consultas ao banco de dados.
Cada trace é uma árvore de spans. O ARMS atribui a cada trace um trace ID exclusivo que persiste em todos os services ao longo da requisição. Todos os spans pertencentes à mesma requisição compartilham esse trace ID, o que permite consultar todos os spans relacionados em um único local durante a depuração.
O span na raiz da árvore — o root span — não possui span pai. Ele marca o início do trace. Os demais spans possuem um parent span ID que os vincula ao span que os acionou e formam a hierarquia de chamadas.
Span
Um span é a unidade básica de um trace. Ele representa uma única operação lógica, como uma chamada de método, a invocação de um bloco de programa, uma RPC ou uma consulta ao banco de dados.
Cada span registra:
Um span ID exclusivo
Timestamps de início e fim
Um parent span ID (ausente no root span)
Os spans se aninham entre si para formar a árvore de traces e espelham a hierarquia real de chamadas de service.