Google Cloud Logging API со скриптом приложений - удалить журналы - запрошенный URL-адрес не найден на этом сервере - PullRequest
1 голос
/ 19 июня 2020

Используя скрипт приложений, мне нужно удалить журналы Stackdriver определенного проекта Google Cloud. Это должно быть возможно сделать с помощью скрипта приложений и REST API облачного журналирования, используя запрос DELETE. Скрипт приложений UrlFetchApp.fetch(url,options) может использовать метод DELETE. Приведенный ниже код возвращает код ответа: 404. Раньше я получал код ответа: 400, но теперь он принимает структуру URL-адреса, но не может найти URL-адрес. Если для URL-адреса требуется идентификатор журнала, я не уверен, где его взять. Я хочу удалить все журналы в проекте, а не только один.

Сообщение об ошибке:

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-адреса.

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

В документации указано, что идентификатор журнала должен быть закодирован в URL. Но я не уверен, что использовать для идентификатора журнала.

1 Ответ

1 голос
/ 19 июня 2020

Я считаю, что ваша цель следующая.

  • Вы хотите удалить журналы драйвера стека с помощью Google Apps Script.

Для этого как насчет этого ответа?

Точки модификации:

  • В этом случае, пожалуйста, получите имя журнала для удаления журналов.
    • Вы можете получить logName с помощью метода logs.list в Could Logging API v2.
  • Используйте 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())

}

Примечание:

  • Это простая модификация вашего скрипта. Поэтому, пожалуйста, измените это для вашей реальной ситуации.
  • Этот измененный сценарий предполагает, что вы уже могли использовать Could Logging API v2.
  • В этом случае используйте этот сценарий с V8.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...