Я использую 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) делает недействительным другой экспортер (который был создан в другом потоке)?