Как получить журнал с помощью Stackdriver Logging API

Я разрабатываю чат-бота с помощью Dialogflow, и мне нужно получить от него полный журнал разговоров.

Я проверил эту страницу и предположил, что он может достичь этого с помощью API Stackdriver Logging.

Я сослался на страницу ниже, и я попытался, однако, используя этот api, возникает ошибка 403. https://cloud.google.com/logging/docs/reference/v2/rest/v2/logs/list

Я использовал это неправильно?

Как я могу решить эту проблему?

Это сообщение об ошибке.

{
  "error": {
    "code": 403,
    "message": "The request is missing a valid API key.",
    "status": "PERMISSION_DENIED"
  }
}

Это мой код, в котором вызывается api. Я использовал скрипт Google Apps.

function getLogs() {
  //XXXXXXXX is my project_id
  var output = UrlFetchApp.fetch('https://logging.googleapis.com/v2/projects/XXXXXXXX/logs');
  Logger.log(output)
}

person SasuraiNoTsuba    schedule 15.02.2020    source источник
comment
На текущем этапе для достижения вашей цели необходимо создать проект скрипта Google Apps и проект облачной платформы, а затем связать их. Таким образом можно включить Stackdriver API и использовать его. В качестве значения результата метод Method: logs.list, который вы пытаетесь использовать, равен Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.. Это значение результата то, что вы хотите? Могу я спросить вас, смогли ли вы, протестировав этот API по указанной ссылке, получить желаемый результат?   -  person Tanaike    schedule 15.02.2020
comment
Спасибо за совет. Я предполагаю, что мой скрипт Google Apps и платформа Google Cloud были связаны, потому что отображается связанный проект платформы could. Я проверил способ ниже. Меню сценариев приложений ›ресурсы› может быть проект платформы. Я расскажу о результатах использования этого API в следующем комментарии.   -  person SasuraiNoTsuba    schedule 15.02.2020
comment
но при снятии флажка Google OAuth2.0 отображается та же ошибка 403.   -  person SasuraiNoTsuba    schedule 15.02.2020
comment
Вы должны отправить заголовок авторизации с токеном на предъявителя (можно получить из класса ScriptApp)   -  person TheMaster    schedule 15.02.2020
comment
Спасибо за ответ. Что касается полученного logNames в вашем ответе, выяснилось, что попробуйте этот API. Насчет when uncheck "Google OAuth2.0" the same 403 error displayed, я не могу понять. Особо не могу понять про same 403. Вы можете объяснить детали этого?   -  person Tanaike    schedule 15.02.2020
comment
Если ваш проект GAS уже связан с Cloud Platform Project и задана необходимая область, вы можете получить значение из метода logs.list, который вы хотите использовать, используя скрипт var res = UrlFetchApp.fetch('https://logging.googleapis.com/v2/projects/XXXXXXXX/logs', {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}});. Об этом уже упоминалось в комментарии @TheMaster.   -  person Tanaike    schedule 15.02.2020
comment
Извините за мой плохой английский. but when uncheck "Google OAuth2.0" the same 403 error displayed. это означает, что у этого API есть учетные данные, при проверке Google OAuth2.0 возвращает 200, но при снятии флажка возвращает ошибку 403. { "error": { "code": 403, "message": "The caller does not have permission", "status": "PERMISSION_DENIED" } } Поэтому мне интересно, что у меня неверная настройка OAuth.   -  person SasuraiNoTsuba    schedule 15.02.2020
comment
@TheMaster san, @Tanaike san Спасибо за ответ. Я добавил заголовок и выполнил. А потом отобразилась эта ошибка. { "error": { "code": 403, "message": "Request had insufficient authentication scopes.", "status": "PERMISSION_DENIED" } }   -  person SasuraiNoTsuba    schedule 15.02.2020
comment
Отвечает ли это на ваш вопрос? Stackdriver Logging API возвращает код ответа 200, но ответ пусто   -  person TheMaster    schedule 15.02.2020
comment
@TheMaster сан, Танаике сан, я решил это. Я добавил ключ API в httprequest и добавил области oauth в appsscript.json. Я вставлю фиксированный код в столбец ответов. Благодарю за сотрудничество !!   -  person SasuraiNoTsuba    schedule 17.02.2020


Ответы (1)


Я решил так.

  1. Добавьте мой ключ api в HTTP-запрос.
var options = {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}};
var logs = UrlFetchApp.fetch("https://logging.googleapis.com/v2/projects/XXXXXXXX/logs?key=my_api_key", options)
  1. Добавьте область в appscript.json.
"oauthScopes": ["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/script.external_request"]

Затем я обнаружил, что метод logs.list не подходит для моей цели, поэтому мне нужно перейти на метод v2.entries.

function getLogs(){
var options = {
    method: "post",
    contentType: "application/json",
    headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()},
    payload: JSON.stringify({
      resourceNames: ['projects/XXXXXXX'],
      filter: "timestamp >= searchdate",
      orderBy: "timestamp desc",
      pageSize: 1,
    }),
  }

  var logs = UrlFetchApp.fetch("https://logging.googleapis.com/v2/entries:list?key=my_api_key", options);
  Logger.log(logs);

}
person SasuraiNoTsuba    schedule 17.02.2020