Criando Spans Manualmente
Até agora os spans (intervalo) foram criados automaticamente quando usamos o OTel SKD, mas saiba que é possível criar spans para em qualque parte do código aumentando a granularidade e nos permitindo:
- Medir operações específicas dentro de uma função.
- Isolar partes críticas do código para melhor análise melhorando o debbuging.
- Permitir ver exatamente onde o tempo maior esta sendo gasto.
- Ampliar o entendimento do fluxo da aplicação.
- Criar métricas customizadas para cada span.
Para criar spans na nossa aplicação NodeJS vamos precisar instalar o pacote opentelemetry/api
.
No nosso código temos uma parte que insere dados no redis e podemos agora colocar dentre de um span novo.
import opentelemetry from '@opentelemetry/api'
async function init() {
redis.set('todo:1', JSON.stringify({ name: 'Configurar OpenTelemetry' })),
redis.set('todo:2', JSON.stringify({ name: 'Implementar tracing' })),
redis.set('todo:3', JSON.stringify({ name: 'Adicionar métricas' })),
redis.set('todo:4', JSON.stringify({ name: 'Configurar exporters' }))
]);
}
async function init() {
//Criar span e chamar a função init
opentelemetry.trace.getTracer('init redis').startActiveSpan('Set Default Items', async (span) => {
//Nossa função de init
await Promise.all([
redis.set('todo:1', JSON.stringify({ name: 'Configurar OpenTelemetry' })),
redis.set('todo:2', JSON.stringify({ name: 'Implementar tracing' })),
redis.set('todo:3', JSON.stringify({ name: 'Adicionar métricas' })),
redis.set('todo:4', JSON.stringify({ name: 'Configurar exporters' }))
]);//
span.end(); // Fim do spam
})
}
init().catch(console.error);
Então se fizermos o curl para fazer uma chamada e verificar o que temos no tracing.
curl http://localhost:8081/todos
{"todos":[{"name":"Implementar tracing"},{"name":"Configurar OpenTelemetry"},{"name":"Adicionar métricas"},{"name":"Configurar exporters"}],"user":{"username":"David Prata"}}
Teremos 4 filhos, ou seja as 4 chamadas redis.set que fizemos acima dentro desse span.