Использование данных из отчетов об ошибках Google Stackdriver с помощью java-клиента в GAE

У нас есть приложение Java, работающее на Google App Engine, которое должно обрабатывать ошибки, собранные в Google Stackdriver.

Мы написали код, используя API отчетов об ошибках Stackdriver, полученный Клиентская библиотека Java как следующая зависимость 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, кроме извлечения данных из REST api через HTTP-клиент Google?

ОБНОВЛЕНИЕ

Ошибка возникает независимо от того, какие конфигурации serviceClient испробованы до сих пор.

т.е. это одна из попыток настройки, приводящая к ошибке:

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

ОБНОВЛЕНИЕ2

Существует проблема совместимости Java gRPC GAE по адресу https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1490#issuecomment-283597294


person Davide Cavestro    schedule 28.02.2017    source источник
comment
Согласно этому документу cloud.google.com/error-reporting/docs вы можете используйте отчеты об ошибках Stackdriver как в стандартной среде движка приложений Google, так и в гибкой среде.   -  person Bravin Balasubramaniam    schedule 01.03.2017
comment
@BravinBalasubramaniam на самом деле я бы сказал, что он должен работать ... возможно, это просто вопрос настройки правильных исполнителей (для совместимости с GAE).   -  person Davide Cavestro    schedule 01.03.2017


Ответы (2)


Клиенты Java gRPC пока не работают в стандартной среде App Engine. Конечно, со временем это должно быть исправлено.

Тем временем вы можете вернуться к использованию API на основе REST или, если вы не привязаны к использованию Java, реализовать небольшое приложение на основе Go (в том же облачном проекте), которое извлекает отчеты об ошибках и сохраняет их. или, возможно, передает их вашему Java-приложению через очереди задач.

person Stefan Schmidt    schedule 02.03.2017
comment
Вы имеете в виду, что мобильное приложение может получать доступ к данным отчетов об ошибках? Он по-прежнему использует gRPC? (Возможно, поддержка отслеживается по адресу github.com/grpc/grpc-go/issues/216) В любом случае, можно ли получить данные об ошибках из другого проекта? - person Davide Cavestro; 06.03.2017

В итоге мы использовали другую библиотеку от Google, предоставляющую Java API для отчетов об ошибках драйвера Stack:

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

Он должен быть правильно настроен с учетными данными аутентификации. Фактически, он фактически выдает HTTP-вызовы службам REST (без gRPC), как это было бы вне GAE.

person Davide Cavestro    schedule 23.03.2017