При получении данных из Google Stackdriver об ошибке сообщается с помощью Java-клиента в GAE
У нас есть приложение Java, работающее в Google App Engine, которое должно обрабатывать ошибки, собранные в Google Stackdriver.
Мы написали некоторый код, используя клиентскую библиотеку Java API API отчетов об ошибках Stackdriver, полученную в виде следующей зависимости maven
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-errorreporting</artifactId>
<version>0.9.3-alpha</version>
</dependency>
но кажется не совместимым с 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 Stackdriver от GAE, кроме получения данных из API REST через Google HTTP Client?
ОБНОВИТЬ
Ошибка возникает независимо от конфигураций serviceClient, которые использовались до сих пор.
то есть это одна из попыток конфигурации, приводящая к ошибке:
ErrorStatsServiceSettings errorStatsServiceSettings = ErrorStatsServiceSettings
.defaultBuilder()
.deleteEventsSettings()
.getRetrySettingsBuilder()
.setTotalTimeout(Duration.standardSeconds(30))
.build();
ErrorStatsServiceClient.create(errorStatsServiceSettings); //error arising here
UPDATE2
Существует проблема совместимости Java gRPC с GAE по адресу https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1490.
2 ответа
В итоге мы использовали другую библиотеку от Google, предоставляющую 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.
Клиенты Java gRPC еще не работают в стандартной среде App Engine. Это должно быть исправлено в конце концов, конечно.
Тем временем вы можете вернуться к использованию API на основе REST или, если вы не связаны с использованием Java, реализовать небольшое приложение на основе Go (в том же облачном проекте), которое извлекает отчеты об ошибках, сохраняет их прочь или, возможно, передает их в ваше приложение Java через очереди задач.