Отслеживание шины Kafka в распределенном приложении с помощью Jaeger

Распространяю приложение, состоящее из нескольких сервисов Go. Некоторые из них используют Kafka в качестве шины данных. Я смог отследить звонки между службами, используя opentracing с Jaeger. У меня проблема с отображением интервалов Kafka на графике, они отображаются как пробелы.

Вот что я смог сделать. Первоначальные промежутки были созданы промежуточным программным обеспечением gRPC. Сторона производителя:

...    
kafkaMsg := kafka.Message{Key: []byte(key), Value: msgBytes}
headers:=make(map[string]string)
if span := opentracing.SpanFromContext(ctx); span != nil {
    opentracing.GlobalTracer().Inject(
        span.Context(),
        opentracing.TextMap,
        opentracing.TextMapCarrier(headers))
}
for headerKey, headerValue:=range headers{
    msg.Headers = append(msg.Headers, kafka.Header{
        Key: headerKey,
        Value: []byte(headerValue),
    })
}
// Write message to Kafka
...

Потребительская сторона:

...
// read headers from Kafka message
headers := make(map[string]string)
for _, header := range kafkaMessage.Headers{
    headers[header.Key]=string(header.Value)
}
spanContext, _ := opentracing.GlobalTracer().Extract(opentracing.TextMap, opentracing.TextMapCarrier(headers))
span := opentracing.StartSpan(
    "Consumer",
    opentracing.FollowsFrom(spanContext))
defer span.Finish()
...

Как мне изменить это, чтобы отобразить диапазон на графике, когда сообщение было в Kafka?


person ArkadyB    schedule 02.07.2019    source источник


Ответы (1)


Итак, отвечая на мой собственный вопрос. Jaeger не поддерживает межсистемные пролеты. Каждая подсистема отвечает за свой диапазон во всей системе. Для справки проверьте этот ответ https://github.com/opentracing/specification/issues/143 < / а>

person ArkadyB    schedule 08.07.2019
comment
Вы спасли мне жизнь этим ответом. Спасибо. - person AndreaM16; 15.02.2021