я могу отследить функцию sub с помощью OpenCensus? - PullRequest
1 голос
/ 25 марта 2020

Я хочу проследить весь проект с Opencensus и Jaeger. Я добавил трассировку HTTP в сервисах ввода и добавил stratspan в промежуточное ПО, окружающее все мои сервисы, и этот двухпролетный вызов и показ на Jaeger. Моя проблема в том, что каждый сервис содержит много функций, и я хочу видеть след всех своих функций, но при этом не показывать общий сервис, а не показывать каждую функцию. Мне не нравится добавить за функцию добавить один stratspan. Я использую ctx context.Context ввод всех своих функций, но не отличается!

1 Ответ

0 голосов
/ 26 марта 2020

На самом деле не так много вариантов, кроме запуска диапазона в каждой функции, которую вы хотите использовать:

func something(ctx context.Context) {
  ctx, span := trace.StartSpan(ctx, "something")
  defer span.End()
}

Если ваши функции имеют общую сигнатуру вызова или вы можете объединить свою функцию в подпись общего вызова, вы можете написать обертку. Примеры этого можно увидеть в http «middleware» .

. Рассмотрим http.Handler. Вы можете написать декоратор для ваших функций, который обрабатывает жизненный цикл диапазона:

func WithTraced(handler http.Handler, opName string) http.Handler {
    return func(w http.ResponseWriter, r *http.Request) {
        ctx, span := trace.StartSpan(ctx, opName)
        defer span.End()
        handler.ServeHTTP(w, r.WithContext(ctx))

    }

}

Аналогичный шаблон можно применить с помощью встраивания структур.

...