【发布时间】:2021-07-23 14:54:31
【问题描述】:
我们将跟踪信息注入到我们基于 urllib3 实现的 API 客户端库中所有 http 请求调用的请求标头中
def _init_jaeger_tracer():
'''Jaeger tracer initialization'''
config = Config(
config={
'sampler': {
'type': 'const',
'param': 1,
},
},
service_name="session"
)
return config.new_tracer()
class APIObject(rest.APIObject):
'''Class for injecting traces into urllib3 request headers'''
def __init__(self, configuration):
print("RESTClientObject child class called####")
self._tracer = None
super().__init__(configuration)
self._tracer = _init_jaeger_tracer()
# pylint: disable=W0221
def request(self, method, url, *args, **kwargs):
lower_method = method.lower()
with self._tracer.start_active_span('requests.{}'.format(lower_method)) as scope:
span = scope.span
span.set_tag(tags.SPAN_KIND, tags.SPAN_KIND_RPC_CLIENT)
span.set_tag(tags.COMPONENT, 'request')
span.set_tag(tags.HTTP_METHOD, lower_method)
span.set_tag(tags.HTTP_URL, url)
headers = kwargs.setdefault('headers', {})
self._tracer.inject(span.context, Format.HTTP_HEADERS, headers)
return r
这样实现后,urllib3请求头是这样的,
headers = {
'Content-Type': 'application/json',
'User-Agent': 'API-Generator/1.0.0/python',
# **
'uber-trace-id': '30cef3e816482516:1a4fed2c4863b2f6:0:1'
# **
}
现在我们必须从注入的请求头中获取trace-id。
在python“requests”库中,我们有“response.request.headers”属性来返回请求标头
在 urllib3 中我找不到返回请求标头以进行进一步处理的方法
大家有什么想法吗
现在从这个请求标头中,我们需要获取 'uber-trace-id' 及其值以进一步构建 URL。
【问题讨论】:
标签: python urllib3 jaeger opentracing