带有应用脚本的 Google 云日志记录 API - 删除日志 - 在此服务器上找不到请求的网址



使用Apps Script,我需要删除特定Google Cloud Project的Stackdriver日志。 这应该可以通过应用程序脚本和云日志记录 REST API 使用DELETE请求来完成。 应用脚本UrlFetchApp.fetch(url,options)可以使用DELETE方法。 下面的代码返回响应代码:404。 我之前收到响应代码:400,但现在它接受 URL 结构,但它只是找不到 URL。 如果 URL 需要日志 ID,那么我不确定从哪里获取日志 ID。 我想删除项目中的所有日志,而不仅仅是一个特定的日志。

错误信息:

The requested URL was not found on this server. 

法典:

function deleteStackDriverLogs(po) {
var httpRz,options,url;
/*
po.id = GCP project ID - https://console.cloud.google.com/home/dashboard
*/
options = {};
options.method = "delete";
options.muteHttpExceptions = true;
options.headers = {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()};
options.contentType = "application/json";
url = 'https://logging.googleapis.com/v2/';
options.payload = JSON.stringify({
logName: 'projects/' + po.id + "/logs/*"
});
httpRz = UrlFetchApp.fetch(url,options);
Logger.log('response code: ' + httpRz.getResponseCode());
//Logger.log('httpRz.getAllHeaders(): ' + JSON.stringify(httpRz.getAllHeaders()))
//Logger.log(httpRz.getContentText())
}
function testDlet() {
deleteStackDriverLogs({"id":"project-id-your-GCP-id-here"});

}

文档: https://cloud.google.com/logging/docs/reference/v2/rest/v2/logs/delete

如果只使用没有有效负载的 URL,那么我得到的响应代码 404 没有任何解释。

我已经尝试了网址的许多变体。

url = 'https://logging.googleapis.com/v2/logName={projects/' + po.id + '}';//404
url = 'https://logging.googleapis.com/v2/logName=projects/' + po.id + '/';//404
url = 'https://logging.googleapis.com/v2/logName=projects/' + po.id;//404
url = 'https://logging.googleapis.com/v2/logName=projects/' + po.id + '/logs/*/';//400
url = 'https://logging.googleapis.com/v2/logName=projects/' + po.id + '/logs/';//404

文档指出日志 ID 必须进行 URL 编码。但是,我不确定日志ID使用什么。

我相信你的目标如下。

  • 您希望使用 Google Apps 脚本删除堆栈驱动程序的日志。

为此,这个答案怎么样?

修改点:

  • 在这种情况下,请检索日志名称以删除日志。
    • 您可以使用可以日志记录 API v2 中的"logs.list"方法检索logName
  • 请使用logName作为终结点的路径。

当上述几点反映到您的脚本中时,它将变为如下。

修改后的脚本:

function deleteStackDriverLogs(po) {
// --- I added below script.
const endpoint = `https://logging.googleapis.com/v2/projects/${po.id}/logs`;
const res = UrlFetchApp.fetch(endpoint, {headers: {authorization: `Bearer ${ScriptApp.getOAuthToken()}`}});
const obj = JSON.parse(res.getContentText());
const logName = obj.logNames.filter(e => e.includes("console_logs"))[0];
/// ---
var httpRz,options,url;
/*
po.id = GCP project ID - https://console.cloud.google.com/home/dashboard
*/
options = {};
options.method = "delete";
options.muteHttpExceptions = true;
options.headers = {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()};
url = 'https://logging.googleapis.com/v2/' + logName;  // Modified
httpRz = UrlFetchApp.fetch(url,options);
Logger.log('response code: ' + httpRz.getResponseCode());
//Logger.log('httpRz.getAllHeaders(): ' + JSON.stringify(httpRz.getAllHeaders()))
//Logger.log(httpRz.getContentText())
}

注意:

  • 这是对脚本的简单修改。因此,请根据您的实际情况进行修改。
  • 此修改后的脚本假定你已经能够使用可以记录 API v2。
  • 在这种情况下,请将此脚本与 V8 一起使用。

引用:

  • 方法:日志列表
  • 方法:日志.删除

最新更新