Creación de Spans Manualmente
Hasta ahora los spans (intervalo) se crearon automáticamente cuando usamos el OpenTelemetry SDK, pero debes saber que es posible crear spans en cualquier parte del código aumentando la granularidad y permitiéndonos:
- Medir operaciones específicas dentro de una función.
- Aislar partes críticas del código para un mejor análisis mejorando la depuración.
- Permitir ver exactamente dónde se está gastando más tiempo.
- Ampliar la comprensión del flujo de la aplicación.
- Crear métricas personalizadas para cada span.
Para crear spans en nuestra aplicación NodeJS vamos a necesitar instalar el paquete opentelemetry/api.
En nuestro código tenemos una parte que inserta datos en redis y podemos ahora colocarla dentro de un span nuevo.
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: 'Añadir métricas' })),
redis.set('todo:4', JSON.stringify({ name: 'Configurar exporters' }))
]);
}
async function init() {
// Crear span y llamar a la función init
opentelemetry.trace.getTracer('init redis').startActiveSpan('Set Default Items', async (span) => {
// Nuestra función 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: 'Añadir métricas' })),
redis.set('todo:4', JSON.stringify({ name: 'Configurar exporters' }))
]);//
span.end(); // Fin del span
})
}
init().catch(console.error);
Entonces si hacemos el curl para hacer una llamada y verificar lo que tenemos en el tracing.
curl http://localhost:8081/todos
{"todos":[{"name":"Implementar tracing"},{"name":"Configurar OpenTelemetry"},{"name":"Añadir métricas"},{"name":"Configurar exporters"}],"user":{"username":"David Prata"}}
Tendremos 4 hijos, es decir, las 4 llamadas redis.set que hicimos anteriormente dentro de este span.
