用datadog跟踪graphql调用的python库
ddtrace-graphql的Python项目详细描述
用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:
GraphQL服务详细信息。
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.patch或 ddtrace_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