【发布时间】:2020-04-20 06:42:51
【问题描述】:
我最近一直致力于在我们的 GraphQL 网关中添加监控指标。
我们正在为网关使用graphql-spring-boot starter。
阅读以下文档后,我设法将基本的 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
}
}
我会看到带有标签operationName=HelloWorldQuery 的指标graphql.timer.query.count / graphql.timer.query.sum
在我想测试有错误的查询之前,它工作得非常好。我意识到没有与失败查询相关的指标/标签。例如,如果我上面的查询返回空数据和一些 GraphQL 错误,我仍然会收集 graphql.timer.query.count (operationName=HelloWorldQuery),但没有额外的标签告诉我该查询有错误。
在网关中,我实现了自定义GraphQLErrorHandler,所以我想也许我应该在该类中添加错误计数器(通过 MeterRegistry),但我无法仅从 GraphQLError 类型中获取operationName。我能得到的最好的是 error.getPath() 它给出了方法名称(例如greeting)而不是自定义查询名称(HelloWorldQuery - 与graphql.timer.query.* 提供的一致)。
我的问题是,如何解决上述问题? 通常收集 GraphQL 查询指标(包括错误)的最佳方式是什么?
------------------- 更新 -------------------
2019-12-31 我阅读了更多关于 GraphQL Instrumentation here 并检查了 graphql-spring-boot repo 中的 MetricsInstrumentation 实现,我有一个想法,通过在其中添加错误指标来扩展 MetricsInstrumentation 类。
2020-01-02 我试图摄取我的 CustomMetricsInstrumentation 类,但没有运气。有内部自动配置接线,我不能在中间插入我的自动配置。
【问题讨论】:
标签: spring-boot graphql spring-boot-actuator datadog spring-micrometer