0

我在从google-cloud-logging ruby​​ gem查找日志时遇到问题。

我可以通过我的谷歌云控制台使用高级搜索找到这些日志:jsonPayload.requestId=875325619

它返回多个结果,一个基本示例:

{ insertId: "epfh5dffj67k5" jsonPayload: { requestId: 875325619 request: {…} timeSeconds: 5.296060973778367 } resource: { type: "gce_instance" labels: {…} } timestamp: "2017-05-08T19:31:20.145488859Z" severity: "WARNING" logName: "projects/myproject/logs/mylog" }

然而,通过 ruby​​ 代理,这将返回一个空数组:

logging = Google::Cloud::Logging.new logging.entries filter: "jsonPayload.requestId=875325619" => []

但是,寻找我发送的不同日志消息有效:

logging.entries filter: 'jsonPayload.uploadKey="example"' [#<Google::Cloud::Logging::Entry:0x00000008e6ea30 (data here)>]

该数据如下所示:

{ insertId: "8w81fbg2a077zl" jsonPayload: { processingTime: 0.79228602 uploadType: "type" uploadKey: "example" } resource: { type: "gce_instance" labels: {…} } timestamp: "2017-05-08T18:58:11Z" labels: {…} logName: "projects/myproject/logs/otherapp" }

为什么我可以找到一组日志消息而找不到另一组?

4

1 回答 1

1

编辑:

Stackdriver Logging 可能需要更长的时间来搜索仅包含未索引字段的条目,例如jsonPayload.FIELD. 服务可能会在一定的时间限制后返回结果的第一页,即使第一页是空的。您将能够通过调用来查询所有页面: logging.entries(filter: "jsonPayload.requestId=875325619").all.to_a

请注意,这可能会触发多个请求并花费更长的时间。

我发现有帮助的一件事是始终filter通过包含索引字段来限制 。即resource.type领域。

如果您将查询代码更改为:

logging.entries filter: "resource.type=gce_instance AND jsonPayload.requestId=875325619"

它应该返回正确的条目并运行得更快。

于 2017-05-10T00:41:12.150 回答