在阅读了以下文档之后,我设法将基本的graphql.timer.query.*指标发送到Datadog
到目前为止,我所实现的是,当我发送GraphQL查询/突变时,我会相应地收集请求计数和时间。例如,发送以下查询
query HelloWorldQuery {
greeting(
name: "Bob"
) {
message
}
}
我将看到metricsgraphql.timer.query.count
/graphql.timer.query.sum
带有标记operationname=helloworldquery
它工作得很好,直到我想测试一个有错误的查询。我意识到没有与失败查询相关的度量/标记。例如,如果上面的查询返回null数据和一些GraphQL错误,我仍然会收集GraphQL.timer.query.count(operationname=helloworldquery)
,但是没有其他标记来告诉我该查询有错误。
在网关中,我实现了一个自定义的GraphQlerrorHandler
,所以我想也许应该在该类中添加错误计数器(通过MeterRegistry),但是我无法简单地从GraphQLError类型获取OperationName
。我能得到的最好的结果是error.getpath(),它给出了方法名(例如greeting
),而不是自定义查询名(HelloWorldQuery
-与graphql.timer.query.*
提供的一致)。
我的问题是,如何解决上述问题?一般来说,收集GraphQL查询度量(包括错误)的最佳方式是什么?
----------更新------------------------------------------------------------------
2020-01-02我试图吸收我的CustomMetricsInstrumentation类,但没有成功。有内部自动配置布线,我不能在中间插入我的自动配置。
您可以使用自己的实现重写默认的TracingInstrumentation
。由于GraphQLInstrumentationAutoConfiguration类中的@ConditionalOnMissingBean注释,它将被自动选择。下面是一个简单的示例,它添加了两个自定义度量:graphql.counter.query.success和graphql.counter.query.error:
@Component
public class CustomMetricsInstrumentation extends TracingInstrumentation {
private static final String QUERY_STATUS_COUNTER_METRIC_NAME = "graphql.counter.query";
private static final String OPERATION_NAME_TAG = "operationName";
private static final String UNKNOWN_OPERATION_NAME = "unknown";
private MeterRegistry meterRegistry;
public CustomMetricsInstrumentation(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@Override
public CompletableFuture<ExecutionResult> instrumentExecutionResult(ExecutionResult executionResult,
InstrumentationExecutionParameters parameters) {
String status = CollectionUtils.isEmpty(executionResult.getErrors()) ? "success" : "error";
String operation = parameters.getOperation() != null ? parameters.getOperation() : UNKNOWN_OPERATION_NAME;
Collection<Tag> tags = Arrays.asList(Tag.of(OPERATION_NAME_TAG, operation));
meterRegistry.counter(QUERY_STATUS_COUNTER_METRIC_NAME + "." + status, tags).increment();
return super.instrumentExecutionResult(executionResult, parameters);
}
}
我的应用程序。yaml,以防万一:
graphql:
servlet:
tracing-enabled: true
actuator-metrics: true
management:
endpoint:
metrics:
enabled: true
endpoints:
web:
exposure:
include: health,metrics
我使用的是spring-boot-starter-parent:2.2.2。release,graphql-spring-boot-starter:6.0.0
注意:问题在于graphql-middleware-sentry没有转发错误。答案如下,并标记为正确答案。 我目前正在处理一个表单,在前端使用React和Apollo React钩子,在后端使用GraphQL-Yoga和Prisma的混合。变异工作很好,形式也可以。但是我不能在React中接收后端抛出的错误。 谁能给我一个指针,说明我应该如何将错误从后端传达到前端? 解析程序代码:
我想向Web服务并行发送多个请求。结果应该由成功错误收集,然后可以由调用者进一步分析。 问题:我怎样才能收集所有响应,同时也收集在方法中抛出的异常? 我的目标不是返回两个列表:一个包含所有成功的响应,另一个包含错误。
假设我的配置单元表包含以下值: 我正在使用。我在collect_list/collect_set或group_concat查询后出现此错误。 错误:org。阿帕奇。蜂箱服务cli。HiveSQLException:处理语句时出错:失败:执行错误,从组织返回代码2。阿帕奇。hadoop。蜂箱ql.exec。org的MapRedTask先生。阿帕奇。蜂箱服务cli。活动活动toSQLException
有人能建议从节点集群收集指标的最佳模式吗(每个节点都是带有Java应用程序的Tomcat Docker容器)? 我们计划使用ELK堆栈(ElasticSearch、Logstash、Kibana)作为可视化工具,但我们的问题是如何将指标交付给Kibana? 我们使用DropWizard度量库,它提供每个实例的度量(量表、计时器、直方图)。 显然,应该收集每个实例的一些指标(例如,cpu、内存等..
问题内容: 如何在视图中收集错误? 我不想使用HTML Helper验证摘要或验证消息。相反,我想检查是否有错误,是否有错误以特定格式显示。另外,在输入控件上,我想检查特定的属性错误并将类添加到输入中。 PS我正在使用Spark View Engine,但想法应该是相同的。 所以我想我可以做… 或类似的东西。 更新 我的最终解决方案如下所示: 如果此属性有错误,则仅添加错误CSS类。 问题答案:
使用REST API和Spring启动Web测试客户端,我可以轻松地从返回的JSON中取回解析的对象,如下所示: 使用graphql,json被包装在如下数据属性中: 所以它不能和 因为JSON解析器以“数据”而不是“data.person”开头。 如何实现直接解析JSON结果并返回Person对象?