es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El ajustador personalizado de SpanAdjuster no está funcionando en Sleuth 1.3.X.

Estoy usando Sleuth 1.3.X para agregar una función de trazado distribuido a un microservicio, estoy intentando cambiar el nombre del Span y me encontré con este enlace: https://cloud.spring.io/spring-cloud-sleuth/1.3.x/multi/multi__customizations.html#_customization_of_reported_spans

Dice que el SpanReporter debe inyectar el SpanAdjuster y permitir la manipulación del Span antes de que se realice la presentación real.

¿Cómo puedo hacer eso?

Aquí está mi SpanAdjuster:

@Bean
SpanAdjuster mySpanAdjuster(){
return (SpanAdjuster) span -> {
if (“/rest/XYZ/message”.equals(span.tags().get(“http.path”))){
Span.builder().from(span).name(“Rest API”).build();
}
return span;
};
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para usar el SpanAdjuster y manipular el nombre del Span antes de informar, es necesario inyectar el SpanAdjuster en el SpanReporter. Aquí te mostramos cómo hacerlo:

    1. Define tu SpanAdjuster como un bean:
    @Bean
    SpanAdjuster mySpanAdjuster() {
        return span -> {
            if ("/rest/XYZ/message".equals(span.tags().get("http.path"))) {
                return span.toBuilder().name("API Rest").build();
            }
            return span;
        };
    }
    

    Nota: Asegúrate de agregar la instrucción return span; en tu bloque if, de lo contrario el Span será desechado.

    1. Configura tu SpanReporter para usar tu SpanAdjuster inyectándolo en el constructor:
    public class CustomSpanReporter implements SpanReporter {
        private SpanAdjuster spanAdjuster;
    
        public CustomSpanReporter(SpanAdjuster spanAdjuster) {
            this.spanAdjuster = spanAdjuster;
        }
    
        @Override
        public void report(Span span) {
            Span adjustedSpan = spanAdjuster.adjust(span);
            // Informa el adjustedSpan
        }
    }
    
    1. Registra tu SpanReporter personalizado en lugar del predeterminado:
    @Bean
    Reporter<span> customReporter(SpanAdjuster spanAdjuster) {
        return new CustomSpanReporter(spanAdjuster);
    }
    

    Nota: Asegúrate también de registrar el bean SpanAdjuster en el contexto de tu aplicación.

    ¡Y listo! Ahora, cuando Sleuth informe un Span, lo pasará primero por el SpanAdjuster, que puede manipular su nombre antes de que se informe realmente.

Comments are closed.