如何通过程序从GCP日志中筛选日志条目



我很难弄清楚如何用程序获取特定的GCP日志条目。

我的项目中有多个云功能。他们都将日志写入名为cloudfunctions.googleapis.com%2Fcloud-functions的日志中(也许每个云功能都可以有单独的日志,但这是我应该问的另一个问题,我想:-(

通过使用客户端库进行日志记录,我可以执行以下操作来检索一些日志条目,这很好:

const log = logging.log('cloudfunctions.googleapis.com%2Fcloud-functions');
const [entries] = await log.getEntries({
autoPaginate: false, 
pageSize: 5
});

但是,我现在想从我的一个云函数(function-x(中检索仅条目,并尝试查找有关在log.getEntries(query)调用的查询对象中放入内容的任何详细信息。正如大多数GCP用户所知,在GCP中查找API信息有时有点麻烦。。。关于上面API方法,我得到的最接近的是这个页面。它列出了我试图使用的public resourceNames: string[]属性,但显然我做错了什么,需要帮助。

我尝试了,例如

const [entries] = await log.getEntries({
autoPaginate: false, 
pageSize: 5, 
resourceNames: ['projects/my-project-id/function-x']
});

但无法使其发挥作用。我刚拿到

Error: 3 INVALID_ARGUMENT: Received unexpected value parsing name "projects/my-project-id/logs/cloudfunctions.googleapis.com%2Fcloud-functions/function-x": my-project-id. Expected the form projects/[PROJECT_ID]

因此,我的问题是:如何仅从函数-x获取日志条目?

正如定义resourceNames的页面中所指定的,查询对象也有filter属性,但没有关于如何使用它的详细信息。因此,第二个问题是如何使用此筛选器属性?它需要什么格式?(例如,一旦我可以从我的函数中检索日志,我就想根据标签和严重性对它们进行过滤(。

终于找到了这个(我的(问题的答案。如果我使用以下方法,它会起作用:

const [entries] = await log.getEntries({
autoPaginate: false, 
pageSize: 5,
filter: 'resource.labels.function_name=function-x',
resourceNames: ['projects/my-project-id']
});

事实证明,如本文所述,resourceNames应该是之一

projects/[PROJECT_ID]
organizations/[ORGANIZATION_ID]
billingAccounts/[BILLING_ACCOUNT_ID]
folders/[FOLDER_ID]

而函数名称应该放在过滤器中。

最新更新