用datadog跟踪graphql调用的python库

ddtrace-graphql的Python项目详细描述


https://travis-ci.org/beezz/ddtrace-graphql.svg?branch=masterhttps://codecov.io/gh/beezz/ddtrace-graphql/branch/master/graph/badge.svghttps://pyup.io/repos/github/beezz/ddtrace-graphql/shield.svghttps://badge.fury.io/py/ddtrace-graphql.svg

用datadog跟踪graphql调用的python库。

兼容性

ddtrace-graphql使用:

  • python版本:3.5、3.6、夜间
  • GraphQL核心:2.0、1.1.0、最新
  • ddtrace:0.11.1,0.10.1,最新

pyramid应用程序的屏幕截图,提供启用跟踪的graphql:

screenshots/service.png

GraphQL服务详细信息。

screenshots/query.png

GraphQL查询详细信息。

安装

使用pip

$ pip install ddtrace-graphql

来源

$ git clone https://github.com/beezz/ddtrace-graphql.git
$ cd ddtrace-graphql && python setup.py install

使用量

要跟踪所有graphql请求,请修补库。把这个片段放到 应用程序主入口点。

__import__('ddtrace_graphql').patch()# ORfromddtrace_graphqlimportpatchpatch()

查看datadog trace client 对于所有受支持的库和框架。

注意

要使修补程序正常工作,需要调用patch。 在导入graphql函数之前。

# app/__init__.py__import__('ddtrace_graphql').patch()# from that point all calls to graphql are tracedfromgraphqlimportgraphqlresult=graphql(schema,query)

仅使用traced_graphql函数跟踪某些调用

fromddtrace_graphqlimporttraced_graphqltraced_graphql(schema,query)

配置

环境变量

DDTRACE_GRAPHQL_SERVICE:
Define service name under which traces are shown in Datadog. Default value is ^{tt3}$
$ exportDDTRACE_GRAPHQL_SERVICE=foobar.graphql

斯潘夸格斯

传递给跟踪上下文管理器的默认参数可以使用 span_kwargs参数的ddtrace_graphql.patchddtrace_graphql.traced_graphql函数。

默认值:

name:Wrapped resource name. Default ^{tt9}$.
span_type:Span type. Default ^{tt3}$.
service:Service name. Defaults to ^{tt11}$ environment variable if present, else ^{tt3}$.
resource:Processed resource. Defaults to query / mutation signature.

有关更多信息,请访问ddtrace.Tracer.trace文档。

fromddtrace_graphqlimportpatchpatch(span_kwargs=dict(service='foo.graphql'))
fromddtrace_graphqlimporttraced_graphqltraced_graphql(schema,query,span_kwargs=dict(resource='bar.resource'))

回拨

如果要对跟踪范围进行后处理,可以使用span_callback 争论。span_callback必须是带有签名的函数def callback(result=result, span=span) 其中result是graphql执行结果,或者None是致命错误,SPAN是跟踪SPAN对象 (ddtrace.span.Span)。

有什么好处?不幸的是,不能根据量程指标过滤/报警。 即使这些是数字的元信息(为什么是数据狗?)所以你可以用它 基于范围、结果属性发送度量。

fromdatadogimportstatsdfromddtrace_graphqlimportpatch,CLIENT_ERROR,INVALIDdefcallback(result,span):tags=['resource:{}'.format(span.resource.replace(' ','_'))]statsd.increment('{}.request'.format(span.service),tags=tags)ifspan.error:statsd.increment('{}.error'.format(span.service),tags=tags)elifspan.get_metric(CLIENT_ERROR):statsd.increment('{}.{}'.format(span.service,CLIENT_ERROR),tags=tags)ifspan.get_metric(INVALID):statsd.increment('{}.{}'.format(span.service,INVALID),tags=tags)patch(span_callback=callback)

忽略例外

有些框架使用异常处理404等。您可能希望忽略一些 例外责任不考虑服务器错误。为此你可以提供 忽略异常参数作为要忽略的异常类列表。 ignore_exceptions将在python的isinstance中使用,因此您可以忽略 也使用基类。

fromddtrace_graphqlimportpatchpatch(ignore_exceptions=(ObjectNotFound,PermissionsDenied))
fromddtrace_graphqlimporttraced_graphqltraced_graphql(schema,query,ignore_exceptions=(ObjectNotFound,PermissionsDenied))

发展

在开发模式下从源安装

$ git clone https://github.com/beezz/ddtrace-graphql.git
$ pip install --editable ddtrace-graphql[test]

运行测试

$ cd ddtrace-graphql
$ tox

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

推荐PyPI第三方库


热门话题
未安装java Android应用程序   编译运行java程序错误“线程中异常”main“java.lang.NoClassDefFoundError:驱动程序”   java通过Azure Devops管道中的Appcenter任务执行Appium测试用例   java文本视图的值被切换   java tinylog2不创建日志文件   如何在Java中连接字符串?   java如何将imageView放置在另一个imageView的屏幕上,无论屏幕大小或纵横比如何,都始终位于同一位置?   java有一种方法可以根据另一个字符串列表过滤出包含字符串元素的对象列表中的元素   Java优先级队列和可比接口   java如何在安卓中以编程方式添加或删除意图过滤器?   块Blob的java Azure存储服务REST API:内容长度问题   java既没有BindingResult,也没有bean名称“matrix[0][0]”的普通目标对象可用作请求属性   同步方法中的java线程锁定   JavaSpringAOP不使用MVC结构