Задачи трассировки в сельдерее 4.1.1 с использованием примера кода. Каждый рабочий запускает:
import logging
from jaeger_client import Config
import opentracing
def get_tracer(service="Vienna"):
config = Config(
config={
'sampler': {
'type': 'const',
'param': 1,
},
'logging': True,
},
service_name=service,
)
return config.initialize_tracer() or opentracing.global_tracer()
Когда я впервые запускаю сельдерей и выполняю задачи, каждый рабочий получает рабочий трассировщик, и для каждого из них есть вывод журнала:
[2019-07-04 19:17:00,527: INFO/ForkPoolWorker-2] Initializing Jaeger Tracer with UDP reporter
[2019-07-04 19:17:00,546: INFO/ForkPoolWorker-2] opentracing.tracer initialized to <jaeger_client.tracer.Tracer object at 0x7f804d079c10>[app_name=SocketIOTask]
Любая задача, которая выполняется после начальной, получает глобальный трассировщик от Config.initialze_tracer
(который возвращает None
) и предупреждение журнала Jaeger tracer already initialized, skipping
.
Наблюдение за tcpdump на консоли показывает, что пакеты UDP не отправляются, я думаю, что получаю неинициализированный трассировщик по умолчанию, и он использует репортер noop.
Я изучал код в opentracing и jaeger_client, и я не могу найти канонический способ обойти это.