bounty还有2天到期。回答此问题可获得+250声望奖励。Adam Matan希望引起更多关注这个问题:我希望这将帮助其他人了解使用GCP Logging的多桶查询的性能问题。
我的问题
我使用GCL来存储系统中项目的活动事件。每个事件都存储为单独的日志行,当我想查看特定项目的活动历史时,我使用其TS库查询GCL:
const filter = `logName="some-log-name" AND jsonPayload.itemId="${itemId}" AND timestamp >= "2023-07-01T00:00:00Z"`;
const options = {
autoPaginate: false,
filter: filter,
pageSize: 1000,
orderBy: 'timestamp desc',
};
console.log(options, itemId);
try {
const [entries] = await logging.getEntries(options);
return entries.map(entry => entry.data);
} catch (error) {
console.error('Error fetching logs:', error);
return [];
}
字符串
字段已正确编入索引:
$ gcloud logging buckets describe activity-logs-prod-us --location global --project=c-cloud-environment
createTime: '2023-06-28T07:41:16.899404569Z'
description: Activity logs prod prod us env
indexConfigs:
- createTime: '2023-07-25T11:24:05.142048279Z'
fieldPath: jsonPayload.itemId
type: INDEX_TYPE_INTEGER
- createTime: '2023-07-25T11:24:05.142048279Z'
fieldPath: jsonPayload.logType
type: INDEX_TYPE_STRING
lifecycleState: ACTIVE
name: projects/c-cloud-environment/locations/global/buckets/activity-logs-prod-us
retentionDays: 3650
updateTime: '2023-07-25T11:24:05.142048279Z'
型
**不幸的是,对于几十万项的小数据集,响应需要15-20秒。
What Have I Tried
我怀疑这个问题与索引有关,或者与我在其他GCL桶中有大量数据有关。我尝试指定要搜索的存储桶,但找不到此选项。
我的问题
如何在GCL查询中指定存储桶,以避免搜索所有存储桶?
2条答案
按热度按时间wnrlj8wa1#
要指定存储桶,您需要指定该存储桶中的LogView作为要在ListLogEntries查询中查询的资源名称。
调用
logging.getEntries(options)
时,options
是一个GetEntriesRequest
您可以在选项中设置
resourceNames
字段。这个
resourceNames
可以接受一个project-id或一个LogView名称。您可以使用如下所示的视图名称:projects/[PROJECT_ID]/regions/[REGION]/buckets/[BUCKET_ID]/views/[VIEW_ID]
个查看API here的完整文档。
v8wbuo2f2#
你可以试试include
字符串
或者是
型
如果还能用的话。