1

我们有一个在Google App Engine上运行的Java应用程序,需要处理收集在Google Stackdriver上的错误。在GAE上使用Google Stackdriver错误报告与java客户端的数据

我们写使用的Stackdriver错误报告为以下Maven依赖

<dependency> 
    <groupId>com.google.cloud</groupId> 
    <artifactId>google-cloud-errorreporting</artifactId> 
    <version>0.9.3-alpha</version> 
</dependency> 

获得API Java Client Library一些代码,但它似乎不兼容GAE,因为它抱怨的

Caused by: java.lang.SecurityException: Google App Engine does not support Runtime.addShutdownHook 
    at com.google.appengine.runtime.Request.process-d6bb19ff7906421f(Request.java) 
    at java.lang.Runtime.addShutdownHook(Runtime.java:45) 
    at com.google.common.util.concurrent.MoreExecutors$Application.addShutdownHook(MoreExecutors.java:223) 
    at com.google.common.util.concurrent.MoreExecutors$Application.addDelayedShutdownHook(MoreExecutors.java:195) 
    at com.google.common.util.concurrent.MoreExecutors$Application.getExitingScheduledExecutorService(MoreExecutors.java:187) 
    at com.google.common.util.concurrent.MoreExecutors$Application.getExitingScheduledExecutorService(MoreExecutors.java:219) 
    at com.google.common.util.concurrent.MoreExecutors.getExitingScheduledExecutorService(MoreExecutors.java:169) 
    at com.google.api.gax.grpc.InstantiatingExecutorProvider.getExecutor(InstantiatingExecutorProvider.java:51) 
    at com.google.api.gax.grpc.ChannelAndExecutor.create(ChannelAndExecutor.java:62) 
    at com.google.api.gax.grpc.ClientSettings.getChannelAndExecutor(ClientSettings.java:81) 
    at com.google.cloud.errorreporting.spi.v1beta1.ErrorStatsServiceClient.<init>(ErrorStatsServiceClient.java:133) 
    at com.google.cloud.errorreporting.spi.v1beta1.ErrorStatsServiceClient.create(ErrorStatsServiceClient.java:123) 
    at com.google.cloud.errorreporting.spi.v1beta1.ErrorStatsServiceClient.create(ErrorStatsServiceClient.java:114) 
    at com.acme.gcp.errors.App.processErrorStats(App.java:39) 

所以问题是:除了通过Google HTTP客户端从REST API获取数据之外,是否有任何方法可以消除来自GAE的Google Stackdriver错误?

UPDATE

错误出现,而不管serviceClient配置尝试到目前为止的。

即如此配置的尝试导致错误之一:

ErrorStatsServiceSettings errorStatsServiceSettings = ErrorStatsServiceSettings 
    .defaultBuilder() 
    .deleteEventsSettings() 
    .getRetrySettingsBuilder() 
    .setTotalTimeout(Duration.standardSeconds(30)) 
    .build(); 
ErrorStatsServiceClient.create(errorStatsServiceSettings); //error arising here 

UPDATE2

有一个在https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1490#issuecomment-283597294

+0

根据此文档https://cloud.google.com/error-reporting/docs/,您可以在Google应用引擎标准环境和灵活环境中使用Stackdriver错误报告。 –

+0

@BravinBalasubramaniam事实上我会说它应该工作......也许这只是设置适当的执行者(对于GAE兼容性)的问题。 –

回答

0

我们结束了使用谷歌从提供协议栈驱动程序错误报告的一个Java API另一个库:

<dependency> 
    <groupId>com.google.apis</groupId> 
    <artifactId>google-api-services-clouderrorreporting</artifactId> 
    <version>v1beta1-rev260-1.22.0</version> 
</dependency> 

它必须与身份验证凭据正确配置。 事实上,它实际上会发出HTTP呼叫到REST服务(没有gRPC),就像在GAE之外完成一样。

0

的Java GRPC客户端的Java GRPC GAE的兼容性问题做尚未在App Engine标准环境中工作。当然,这应该最终得到解决。与此同时,您可以重新使用基于REST的API,或者,如果您不想使用Java,则实现一个小型的基于Go的应用程序(在同一个云计划中),它会提取错误报告,将它们存储或者通过任务队列传递给您的Java应用程序。

+0

您的意思是基于回合的应用能够访问错误报告数据吗?它仍然使用gRPC吗? (也许支持被追踪在https://github.com/grpc/grpc-go/issues/216) 无论如何,是否有可能从另一个项目获取错误报告数据? –

相关问题