如何使用 Java 客户端库将分类和分组的日志发送到 Stackdriver?

How do I send categorized and grouped logs into Stackdriver using the Java Client Library?

我想将多个 log.info log.warninglog.error 调用以及可能的堆栈跟踪聚合到服务器与我的应用程序代码交互生成的单个 Stackdriver 日志行中.目标是总结由我的 Scala 服务器处理的请求,然后将执行期间发生的尽可能多的日志语句分组,并包含任何错误。

这是 GAE 日志记录的默认行为,但由于我是阅读新手 Java API's,我无法弄清楚如何:

1/ 创建一个自定义 MonitoredResource (?) 表示,例如 "API server",然后在其中指定类别(例如 "production")。具体来说,我是否必须通过 REST API 创建这些,即使我只为我的部署创建一次?我可以使用 Troposphere 之类的东西在代码中定义它们并将它们提交到 repo 中吗?

2/ 名词 MonitoredResourceMonitoredResourceDescriptorLogEntryLogEntryOperationlogName 如何组合在一起,类别 "API Server" 和 "production" 得到定义,并且可以添加像 GET /foobar -> 200 response + 1834 bytes 这样的日志语句组(那些是 logNames 吗?)。

当然,无需为我编写代码,但如果能提供指导和高级概述以帮助我避免反复试验,我将不胜感激。

1) MonitoredResource monitors what you configure in MonitoredResourceDescriptor

我假设您可以随心所欲地创建它(REST API 或使用客户端库)。

2) 我不确定你想在哪里描述 "API Server" 或 "Production",MonitoredResourceDescriptor 是如何设置要监视的内容。 LogEntry is the actual logs and the LogName 只是您给这个特定日志的标签。您描述的应该是 logEntry returns(200 代码 + 其他内容)。

我可能对你的问题有点困惑。最好的办法是创建一个示例 MonitoredResource 并查看它是如何工作的。

您可以使用 LogEntry (https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogEntryOperation) 中的 LogEntryOperation 字段将同一操作的多个日志条目组合在一起。

在日志查看器中,您可以使用高级过滤器对 operation.id 字段进行过滤,从而对日志条目进行分组。

在 Java 客户端库中,您可以使用 https://googlecloudplatform.github.io/google-cloud-java/0.33.0/apidocs/com/google/cloud/logging/LogEntry.Builder.html#setOperation-com.google.cloud.logging.Operation-

设置操作 ID

1) 您可以使用的受监控资源是由 Google 定义的精选集。您不能定义自己的类型。 https://cloud.google.com/logging/docs/api/v2/resource-list.

中列出了支持的资源

2) https://cloud.google.com/logging/docs/basic-concepts.

中描述了基本概念