最近我一直在努力在GraphQL网关中添加监视指标。
我们正在使用graphql-spring-boot入门作为网关。
阅读以下文档后,我设法将基本graphql.timer.query。*指标发送到Datadog
- https://www.baeldung.com/spring-boot-actuators
- https://docs.spring.io/spring-boot/docs/2.0.x/actuator-api/html/#metrics
- https://github.com/graphql-java-kickstart/graphql-spring-boot#tracing-and-metrics
到目前为止,我已经实现的是,当我发送GraphQL查询/突变时,我将相应地收集请求计数和时间。例如在下面发送查询
C:\Users\iivoo\PycharmProjects\TEST\venv\Scripts>pip install auto-py-to-exe
Collecting auto-py-to-exe...
distutils.errors.DistutilsError: Setup script exited with error: command 'C:\\Program Files (x86)\\microsoft Visual Studio 14.0\\VC\\BIN\\cl.exe' failed with exit status 2
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\iivoo\AppData\Local\Temp\pip-install-gf4x4k83\gevent\
我将看到带有标签query HelloWorldQuery {
greeting(
name: "Bob"
) {
message
}
}
的指标graphql.timer.query.count
/ graphql.timer.query.sum
它工作得非常完美,直到我想测试一个有错误的查询。我意识到没有与失败查询相关的指标/标签。例如,如果上面的查询返回空数据和一些GraphQL错误,我仍然会收集operationName=HelloWorldQuery
,但是没有其他标签可以告诉我该查询有错误。
在网关中,我实现了一个自定义graphql.timer.query.count (operationName=HelloWorldQuery)
,所以我在想也许应该在该类中添加错误计数器(通过MeterRegistry),但是我无法从中获取GraphQLErrorHandler
GraphQLError类型。我能得到的最好的结果是error.getPath(),它给出方法名称(例如operationName
)而不是自定义查询名称(greeting
-与HelloWorldQuery
提供的名称一致)。
我的问题是,如何解决以上问题? 通常,收集GraphQL查询指标(包括错误)的最佳方法是什么?
------------------- 更新 -------------------
2019-12-31 我阅读了有关GraphQL Instrumentation here的更多信息,并检查了graphql-spring-boot回购中的MetricsInstrumentation实现,我有一个想法,可以通过在其中添加错误度量来扩展MetricsInstrumentation类。
2020-01-02 我试图摄取CustomMetricsInstrumentation类,但是没有运气。内部有自动配置布线,我无法在中间插入自动配置。