在python中使用zipkin的库。
py-zipkin的Python项目详细描述
Py_Zipkin
py_zipkin提供了一个上下文管理器/装饰器以及一些实用工具来 方便在python应用程序中使用zipkin。
安装
pip install py_zipkin
用法
py_zipkin需要一个transport_处理程序
对象来处理日志zipkin
向Kafka或Scribe等中央日志服务发送消息。
py戡zipkin.zipkin.zipkin戡u span
是启动zipkin跟踪或
日志记录跨越正在进行的跟踪。Zipkin_Span可以用作上下文
经理或装饰师。
用法1:使用给定的采样率开始跟踪
frompy_zipkin.zipkinimportzipkin_spandefsome_function(a,b):withzipkin_span(service_name='my_service',span_name='my_span_name',transport_handler=some_handler,port=42,sample_rate=0.05,# Value between 0.0 and 100.0):do_stuff(a,b)
用法2:跟踪服务呼叫
这与用法1的区别在于zipkin属性是计算出来的 单独传递,因此不需要采样率参数。
# Define a pyramid tweendeftween(request):zipkin_attrs=some_zipkin_attr_creator(request)withzipkin_span(service_name='my_service',span_name='my_span_name',zipkin_attrs=zipkin_attrs,transport_handler=some_handler,port=22,)aszipkin_context:response=handler(request)zipkin_context.update_binary_annotations(some_binary_annotations)returnresponse
用法3:在正在进行的跟踪中记录范围
这也可以在其内部用于生成连续嵌套的跨距。
@zipkin_span(service_name='my_service',span_name='some_function')defsome_function(a,b):returndo_stuff(a,b)
其他实用程序
zipkin_span.update_binary_annotations()
可以在zipkin跟踪中使用
添加到现有的二进制注释集。
defsome_function(a,b):withzipkin_span(service_name='my_service',span_name='some_function',transport_handler=some_handler,port=42,sample_rate=0.05,)aszipkin_context:result=do_stuff(a,b)zipkin_context.update_binary_annotations({'result':result})
zipkin_span.add_sa_binary_annotation()
可用于添加二进制注释
使用"sa"键指向当前范围。此函数允许用户指定
正在调用的服务的目标地址(如果目标没有
支持Zipkin)。有关
"sa"二进制注释。
注意:v2-span格式只支持1个"sa"端点(由remoteendpoint表示) 因此,如果尝试设置多个"sa",则"add_sa_binary_annotation"现在会引发"value error" 相同跨度的注释。
defsome_function():withzipkin_span(service_name='my_service',span_name='some_function',transport_handler=some_handler,port=42,sample_rate=0.05,)aszipkin_context:make_call_to_non_instrumented_service()zipkin_context.add_sa_binary_annotation(port=123,service_name='non_instrumented_service',host='12.34.56.78',)
create_http_headers_for_new_span()
创建一组可以转发的http头
在对另一项服务的请求中。
headers={}headers.update(create_http_headers_for_new_span())http_client.get(path='some_url',headers=headers,)
运输
py_zipkin(目前)节俭编码跨度。实际传输层是 可插拔。
实现新传输处理程序的推荐方法是
py_zipkin.transport.basetransporthandler
并实现send
和
获取最大负载字节
方法。
send
接收已编码的节俭列表作为参数。
get_max_payload_bytes
应返回
传输,或无
如果您可以发送任意大的消息。
最简单的方法是通过http post将跨度传递给收集器。这里有一个
使用请求
库的简单http传输示例。这个假设
Zipkin收集器正在本地主机9411上运行。
注意:py_zipkin的旧版本建议实现传输处理程序 作为一个只有一个参数的函数。这仍然是支持的,而且应该有效 使用当前的py_zipkin版本,但已弃用。
importrequestsfrompy_zipkin.transportimportBaseTransportHandlerclassHttpTransport(BaseTransportHandler):defget_max_payload_bytes(self):returnNonedefsend(self,encoded_span):# The collector expects a thrift-encoded list of spans.requests.post('http://localhost:9411/api/v1/spans',data=encoded_span,headers={'Content-Type':'application/x-thrift'},)
如果你有能力发送跨越卡夫卡(更像你可以做什么 在生产中),您可以使用 kafka-python包:
fromkafkaimportSimpleProducer,KafkaClientfrompy_zipkin.transportimportBaseTransportHandlerclassKafkaTransport(BaseTransportHandler):defget_max_payload_bytes(self):# By default Kafka rejects messages bigger than 1000012 bytes.return1000012defsend(self,message):kafka_client=KafkaClient('{}:{}'.format('localhost',9092))producer=SimpleProducer(kafka_client)producer.send_messages('kafka_topic_name',message)
在多线程环境中使用
如果要在协作多线程环境中使用py_zipkin,
例如,asyncio,您需要显式地传递py戡zipkin.storage.stack
作为参数context_stack
用于zipkin_span
和create_http_headers_for_new_span
。
默认情况下,py_zipkin对属性使用线程本地存储,即
在py-zipkin.storage.threadlocalstack中定义
此外,还需要显式传递
py_zipkin.storage.spanstorage
作为参数span_storage
到zipkin_span
pip install py_zipkin
0
消防模式[实验]
"消防模式"记录了100%的跨度,不管
采样率。如果您想处理这些跨度,这很有用
不同的,例如,将它们发送到一个不同的后端
保持力。它与正常操作同时工作,但是
额外的开销。为了使用它,您可以添加
消防处理程序
就像添加传输处理程序
此功能应视为实验性的,可在 任何时候都没有警告。如果你真的用这个,一定要把 异步以避免每个请求都有过多的开销。
许可证
版权所有(c)2018,Yelp,Inc.保留所有权利。apache v2
0.18.5(2019-08-08)
- 添加testing.mockTransportHandler模块
0.18.4(2019-08-02)
- 修复thriftpy2导入以允许cython模块
0.18.3(2019-05-15)
- 修复解码旧标记字符串时的Unicode错误
0.18.2(2019-03-26)
- 在发出跟踪并记录错误时处理了异常
- 无论发射结果的范围如何,确保清除跟踪器
0.18.1(2019-02-22)
- 修复0.18.0中引入的threadLocalStack()错误
0.18.0(2019-02-13)
- 修复多线程问题
- 添加跟踪器模块
0.17.1(2019-02-05)
- 忽略内部范围中的传输处理程序重写,因为这会导致 要下降的跨度。
0.17.0(2019-01-25)
- 支持Python3.7
- PY Zipkin现在依靠节俭而不是节俭。他们 可以在同一个代码库中共存,因此升级应该是安全的。
0.16.1(2018-11-16)
- 在解码旧记录道时处理空时间戳
0.16.0(2018-11-13)
- Py_Zipkin现在能够将v1节俭跨度转换为v2 JSON
0.15.1(2018-10-31)
- 已将deprecationwarnings更改为logging.warning
0.15.0(2018-10-22)
- 增加了对v2 json编码的支持。
- 修正了影响v1 json的transporthandler错误。
0.14.1(2018-10-09)
- 修正了0.13.0中引入的内存泄漏。
0.14.0(2018-10-01)
- 支持v1跨域的json编码。
- 允许在创建后覆盖跨度名称。
0.13.0(2018-06-25)
- 删除了不推荐使用的
zipkin_logger.debug()
接口。 py_zipkin.stack
被重命名为py_zipkin.storage
。如果你是 导入此模块后,您需要更新代码。
0.12.0(2018-05-29)
- 支持传输处理程序的最大有效负载大小。
- 传输处理程序现在应该作为类实现扩展py_zipkin.transport.basetransporthandler。
0.11.2(2018-05-23)
- 不要覆盖传入的批注
0.11.1(2018-05-23)
- 即使请求不是 采样。这将修复消防管跨度的二进制注释。
0.11.0(2018-02-08)
- 添加对"消防模式"的支持,该模式记录100%的跨度 不考虑采样率。
0.10.1(2018-02-05)
- 上下文堆栈现在默认为
threadlocalstack()
如果作为无
0.10.0(2018-02-05)
- 添加对使用显式进程内上下文存储而不是 使用线程本地。这允许您在协作中使用py_zipkin 多任务环境,如异步
py_zipkin.thread_local
现在不推荐使用。代替使用py_zipkin.stack.threadlocalstack()
- traceid和spanid生成性能改进。
- 128位traceid现在以epoch时间戳开始,以支持easy 与AWS X射线互操作
0.9.0(2017-07-31)
- 添加批量范围发送。请注意,跨距现在以列表形式发送。
0.8.3(2017-07-10)
- 在配置日志处理程序以避免引发 nullhandler属性错误
0.8.2(2017-06-30)
- 在客户端范围上下文中时,不要记录ss和sr注释
- 如果发生异常,则添加错误二进制注释
0.8.1(2017-06-16)
- 固定服务器发送时间,以更准确地反映服务器发送 实际发生。
- 用logging结束替换logging开始注释
0.8.0(2017-06-01)
- 添加了128位跟踪ID支持
- 增加了为一个span显式指定主机的功能
- 如果无法自动确定主机,则添加了异常处理
- 可以将服务器地址('sa')二进制注释添加到跨度
- PY36支持
0.7.1(2017-05-01)
- 修正了一个错误,在该错误中,
更新二进制注释
对于子级来说将失败 未采样的记录道中的跨度
0.7.0(2017-03-06)
- 简化根跨度和非根跨度的二进制注释
0.6.0(2017-02-03)
- 增加了对强制
zipkin_span
报告时间戳/持续时间的支持。 更改Zipkin的API,但默认返回到现有行为。
0.5.0(2017-02-01)
- 在服务器和本地范围上正确设置时间戳/持续时间
- 更新了旧规格,以包括这些新字段
- Zipkin_SPAN入口点应该向后兼容
0.4.4(2016-11-29)
- 为Zipkin日志记录开始时添加可选注释
0.4.3(2016-11-04)
- 修复zipkin_span decorator中的错误
0.4.2(2016-11-01)
- 当记录跨度时,对传输处理器要有防御性。
0.4.1(2016-10-24)
- 添加在创建新Zipkinattrs时覆盖span\u id的功能。
0.4.0(2016-10-20)
- 添加了
start
和stop
作为 输入和退出功能。
0.3.1(2016-09-30)
- 向thrift.create_端点添加新参数,允许创建 代理计算机上表示另一个 宿主:
0.2.1(2016-09-30)
- 正式"发布"v0.2.0。不小心推了一个v0.2.0版本 正确的版本bump,所以v0.2.1是新的真实版本。拜托 用这个代替v0.2.0。
0.2.0(2016-09-30)
- 修复Zipkin属性和采样率是否通过的问题,但是 zipkin_attrs.is_sampled=true,正在生成新的zipkin_attrs。
0.1.2(2016-09-29)
- 固定始终按比率采样的采样算法>;50%
0.1.1(2016-07-05)
- 第一个py_zipkin版本,具有上下文管理器/装饰器功能。