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) 無論如何,是否有可能從另一個項目獲取錯誤報告數據? –

相關問題