在python中使用zipkin的库。

py-zipkin的Python项目详细描述


构建状态coverage statuspypi version支持的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"二进制注释。

< Buff行情>

注意: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上运行。

<封锁】T>

注意: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_spancreate_http_headers_for_new_span。 默认情况下,py_zipkin对属性使用线程本地存储,即 在py-zipkin.storage.threadlocalstack中定义

此外,还需要显式传递 py_zipkin.storage.spanstorage作为参数span_storagezipkin_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)

  • 添加了startstop作为 输入和退出功能。

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版本,具有上下文管理器/装饰器功能。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何修复尝试将用户签名到服务器主机时出现的“字符串无法转换为json对象”错误?   控制台Java:不使用新行更新命令行中的文本   java servlet接收xml数据时,出现错误   使用REST API在Bitbucket中复制或复制存储库   java如何在JavaFX中对齐一行?   java如何在活动中显示通过服务获得的数据?   返回BigDecimal作为字符串:返回int   java组织。openqa。硒。InvalidSelectorException:尝试查找元素时选择器无效   java仅在阻塞状态下通知和通知所有影响线程   java JBOSS无法启动部署   java方法的返回值能保证类型安全吗?   JavaeShadoop序列化组织。阿帕奇。hadoop。木卫一。短写失败   java如果我在同一个类上同步了两个方法,它们能同时运行吗?   不使用java数据库的spring分页实现   java如何将字符串切碎成这样的数组?