为asyncio应用程序提供zipkin分布式跟踪的仪器
项目描述
aiozipkin
aiozipkin 是一个Python 3.6+模块,它通过zipkin (http://zipkin.io) 服务器仪器,为asyncio应用程序添加了分布式跟踪功能。
zipkin 是一个分布式追踪系统。它有助于收集解决微服务架构中延迟问题的所需时间数据。它管理这些数据的收集和查找。Zipkin 的设计基于 Google Dapper 论文。
应用程序通过 aiozipkin 进行了仪表化,并将时间数据报告给 zipkin。Zipkin UI 还展示了依赖关系图,显示了有多少追踪请求通过了每个应用程序。如果您正在解决延迟问题或错误,可以根据应用程序、追踪长度、注释或时间戳对所有追踪进行筛选或排序。
功能
- 为 asyncio 应用程序提供分布式追踪功能。 
- 支持 zipkin v2 协议。 
- 易于使用的 API。 
- 显式上下文处理,无线程局部变量。 
- 可以通过与 zipkin 兼容的 API 与 jaeger 和 stackdriver 一起使用。 
zipkin 词汇
在代码之前,让我们学习重要的 zipkin 词汇,有关更详细的信息,请访问 https://zipkin.io/pages/instrumenting
- Span 代表一个特定的方法(RPC)调用 
- Annotation 与 span 中的特定时间戳相关联的字符串数据 
- Tag - 与给定 span 关联的键和值 
- Trace - 与特定请求服务相关的 span 集合 
简单示例
import asyncio
import aiozipkin as az
async def run():
    # setup zipkin client
    zipkin_address = 'http://127.0.0.1:9411/api/v2/spans'
    endpoint = az.create_endpoint(
        "simple_service", ipv4="127.0.0.1", port=8080)
    tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0)
    # create and setup new trace
    with tracer.new_trace(sampled=True) as span:
        # give a name for the span
        span.name("Slow SQL")
        # tag with relevant information
        span.tag("span_type", "root")
        # indicate that this is client span
        span.kind(az.CLIENT)
        # make timestamp and name it with START SQL query
        span.annotate("START SQL SELECT * FROM")
        # imitate long SQL query
        await asyncio.sleep(0.1)
        # make other timestamp and name it "END SQL"
        span.annotate("END SQL")
    await tracer.close()
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())aiohttp 示例
aiozipkin 包含 aiohttp 服务器仪表化,为此,像往常一样创建 web.Application() 并安装 aiozipkin 插件
import aiozipkin as az
def init_app():
    host, port = "127.0.0.1", 8080
    app = web.Application()
    endpoint = az.create_endpoint("AIOHTTP_SERVER", ipv4=host, port=port)
    tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0)
    az.setup(app, tracer)就这样,插件添加了中间件,该中间件尝试从头部获取上下文,并创建/加入新的追踪。可选地,在客户端,您可以在请求中添加传播头部,以强制进行追踪并查看客户端和服务器之间的网络延迟。
import aiozipkin as az
endpoint = az.create_endpoint("AIOHTTP_CLIENT")
tracer = await az.create(zipkin_address, endpoint)
with tracer.new_trace() as span:
    span.kind(az.CLIENT)
    headers = span.context.make_headers()
    host = "http://127.0.0.1:8080/api/v1/posts/{}".format(i)
    resp = await session.get(host, headers=headers)
    await resp.text()文档
安装
安装过程很简单,只需
$ pip install aiozipkin
其他收集器的支持
aiozipkin 可以与任何其他 zipkin 兼容的服务一起工作,目前我们已经测试了它与 jaeger 和 stackdriver 一起工作。
Jaeger 支持
jaeger 支持 zipkin span 格式,因此可以使用 aiozipkin 与 jaeger 服务器一起使用。您只需指定 jaeger 服务器地址,它应该可以开箱即用。无需运行本地 zipkin 服务器。有关更多信息,请参阅测试和 jaeger 文档。
Stackdriver 支持
Google stackdriver 支持 zipkin span 格式,因此可以使用 aiozipkin 与此 google 服务一起使用。为了使此功能正常工作,您需要设置本地 zipkin 服务,该服务将发送追踪到云端。请参阅 google 云文档,了解如何设置 zipkin 收集器。
要求
CHANGES
1.1.1 (2021-10-23)
错误修复
1.1.0 (2021-05-17)
错误修复
- 期望追踪请求上下文是 SimpleNamespace 类型。 #385 
1.0.0 (2020-11-06)
错误修复
- 支持 Python 3.8 和 Python 3.9 #259 
0.7.1 (2020-09-20)
错误修复
- 修复了 Manifest.in 文件;将 CHANGES.rst 添加到源存档。 
0.7.0 (2020-07-17)
功能
- 添加对AWS X-Ray跟踪ID格式的支持。 #273 
0.6.0 (2019-10-12)
- 为python3.7 aiohttp配置添加上下文变量支持 #187 
- 单头部跟踪支持 #189 
- 向传输添加重试和批量操作(感谢 @konstantin-stepanov) 
- 弃用python3.5支持 #238 
- 在代码库中使用新的类型语法 #237 
0.5.0 (2018-12-25)
- 使用更严格的类型配置 #147 
- 修复代码和文档中的大量错误 #151 #153(感谢 @deejay1) 
- 添加了Transport的接口 #155(感谢 @deejay1) 
- 添加了create_custom辅助器以简化跟踪器配置 #160(感谢 @deejay1) 
- 添加了Sampler的接口 #160(感谢 @deejay1) 
- 添加了py.typed标记 
0.4.0 (2018-07-11)
- 使用类型添加更多覆盖率 #147 
- 重大更改:send_inteval => send_interval #144(感谢 @gugu) 
- 重大更改:不要将api/v2/spans附加到zipkin dress #150 
0.3.0 (2018-06-13)
- 为aiohttp添加http.route标签支持 #138 
- 使zipkin地址生成器更加宽容 #141(感谢 @dsantosfff) 
0.2.0 (2018-03-03)
- 重大更改:az.create现在是协程 #114 
- 为跟踪器对象添加了上下文管理器 #114 
- 添加了更多mypy类型 #117 
0.1.1 (2018-01-26)
- 添加了new_child辅助方法 #83 
0.1.0 (2018-01-21)
经过几个月的工作和beta版本,以下是基本功能
- 初始发布。 
- 实现了使用HTTP传输的zipkin v2协议 
- 添加了Jaeger支持 
- 添加了Stackdriver支持 
- 添加了aiohttp服务器支持 
- 添加了aiohttp 3.0.0客户端跟踪支持 
- 添加了示例和演示 
项目详情
下载文件
下载适合您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。