我最近一直致力于在我们的 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 查询/突变时,我会相应地收集请求计数和时间。例如发送下面的查询
query HelloWorldQuery {
greeting(
name: "Bob"
) {
message
}
}
我会看到指标graphql.timer.query.count
/graphql.timer.query.sum
带有标签operationName=HelloWorldQuery
它工作得很好,直到我想测试一个有错误的查询。我意识到没有与失败查询相关的指标/标签。例如,如果我上面的查询返回空数据和一些 GraphQL 错误,我仍然会 collect graphql.timer.query.count (operationName=HelloWorldQuery)
,但没有其他标签可以告诉我该查询存在错误。
在网关中,我已经实现了一个 custom GraphQLErrorHandler
,所以我想也许我应该在那个类中添加错误计数器(通过 MeterRegistry),但是我无法operationName
从 GraphQLError 类型中简单地获取。我能得到的最好的是 error.getPath() ,它给出了方法名称(例如greeting
)而不是自定义查询名称(HelloWorldQuery
- 与graphql.timer.query.*
提供的一致)。
我的问题是,如何解决上述问题?通常收集 GraphQL 查询指标(包括错误)的最佳方式是什么?
-------------------更新-------------------
2019-12-31我在这里 阅读了有关 GraphQL Instrumentation 的更多信息,并检查了graphql-spring-boot repo 中的MetricsInstrumentation实现,我想通过在其中添加错误度量来扩展 MetricsInstrumentation 类。
2020-01-02 我试图摄取我的 CustomMetricsInstrumentation 类,但没有运气。有内部自动配置接线,我不能在中间插入我的自动配置。