Отслеживание шины Кафки в распределенном приложении с использованием Jaeger - PullRequest
0 голосов
/ 02 июля 2019

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

Вот что я смог сделать. Начальные промежутки были созданы промежуточным ПО 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()
...

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

1 Ответ

0 голосов
/ 08 июля 2019

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

...