Я хочу отслеживать весь проект с помощью Opencensus и Jaeger. Я добавил HTTP-трассировку в службы ввода и добавил stratspan
в промежуточное ПО, окружающее все мои службы, и этот двухполосный вызов и показ на Jaeger. Моя проблема в том, что каждая служба содержит много функций, и я хочу видеть трассировку всех моих функций, но таким образом не показывать общую службу, не отображаемую для каждой функции. Мне не нравится добавлять по одной функции по одному stratspan
. Я использую ctx context.Context
запись для всех своих функций, но не иначе!
Могу ли я отследить суб-функцию с помощью OpenCensus?
Ответы (1)
На самом деле не так много вариантов, кроме запуска диапазона в каждой функции, которую вы хотите инструментировать:
func something(ctx context.Context) {
ctx, span := trace.StartSpan(ctx, "something")
defer span.End()
}
Если ваши функции имеют общую сигнатуру вызова или вы можете объединить свою функцию в общую сигнатуру вызова, вы можете написать оболочку. Примеры этого можно увидеть в http "промежуточном программном обеспечении".
Рассмотрим http.Handler, вы могли бы написать декоратор для ваших функций, который обрабатывает жизненный цикл span:
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))
}
}
Аналогичный шаблон можно применить с помощью встраивания структур.
person
dm03514
schedule
26.03.2020
Я использовал Gokit с тем же промежуточным программным обеспечением
opencensus.TraceEndpoint('service_name')
пакета github.com/go-kit/kit/tracing/opencensus
yo, это используется так же, как и по-вашему, используйте промежуточное программное обеспечение, окружающее все функции служб, но просто добавьте один промежуток, а не один промежуток для каждой функции!
- person Mahmoud Masih Tehrani; 28.03.2020