我在查找google-cloud-logging ruby gem的日志时遇到问题。
我可以使用高级搜索功能通过我的Google云控制台找到这些日志: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"
}
为什么我可以找到一组日志消息而不是另一组?
答案 0 :(得分:1)
编辑:
堆栈驱动程序日志记录可能需要更长的时间来搜索只有未编入索引的字段的条目,例如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"
它应该返回正确的条目并运行得更快。