экспортер opencensus - один глобальный или на поток? - PullRequest
0 голосов
/ 30 октября 2018

Я использую Opencensus для некоторого мониторинга на сервере grpc с 10 работниками. Мой вопрос заключается в том, должен ли экспортер для трассировщика при создании Tracer быть локальным или глобальным. IE

это сервер:

server = grpc.server (futures.ThreadPoolExecutor (max_workers = 10)) *

Должен ли я:

tracer_module.Tracer (sampler = always_on.AlwaysOnSampler (), экспортер = GLOBAL_EXPORTER) где: GLOBAL_EXPORTER = stackdriver_exporter.StackdriverExporter (transport = BackgroundThreadTransport)) ИЛИ я делаю: tracer_module.Tracer (sampler = always_on.AlwaysOnSampler (), exporter = stackdriver_exporter.StackdriverExporter (transport = BackgroundThreadTransport)))

Я пробовал оба, и они работают. Первый будет использовать глобальный экспортер, который должен быть более эффективным (я бы подумал), но агрегирование кажется немного странным (один вызов «агрегируется с другим»). С другой стороны, второй способ делает второго экспортера (который недолговечен, поскольку он будет существовать только для этого вызова) и, по-видимому, экспортирует правильно. Вопрос в том, что правильнее с точки зрения системы. В IE для второго варианта создание stackdriver_exporter.StackdriverExporter (transport = BackgroundThreadTransport) делает недействительным другой экспортер (который был создан в другом потоке)?

1 Ответ

0 голосов
/ 31 октября 2018

Вы должны использовать глобальный экспортер. Он не предназначен для создания нового потока экспорта для каждого Tracer. Должен быть запущен один фоновый поток, который обрабатывает весь экспорт в StackDriver.

Что касается агрегации, она не должна агрегировать все промежутки вместе. Это может быть ошибка в пользовательском интерфейсе StackDriver (существует ряд известных проблем).

...