Используйте API асинхронных пользовательских отчетов

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Edge Analytics предоставляет богатый набор интерактивных панелей мониторинга, генераторов настраиваемых отчетов и сопутствующих возможностей. Однако эти функции предназначены для интерактивного использования: вы отправляете запрос API или пользовательского интерфейса, и запрос блокируется до тех пор, пока сервер аналитики не предоставит ответ.

Однако запросы аналитики могут истечь по времени, если их выполнение занимает слишком много времени. Если запрос запроса должен обработать большой объем данных (например, сотни ГБ), он может завершиться неудачно из-за тайм-аута.

Асинхронная обработка запросов позволяет запрашивать очень большие наборы данных и получать результаты позже. Вы можете рассмотреть возможность использования автономного запроса, если обнаружите, что время ожидания интерактивных запросов истекло. Некоторые ситуации, когда асинхронная обработка запросов может быть хорошей альтернативой, включают:

  • Анализ и создание отчетов, охватывающих большие временные интервалы.
  • Анализ данных с различными размерностями группировки и другими ограничениями, которые усложняют запрос.
  • Управление запросами, когда вы обнаружите, что объемы данных для некоторых пользователей или организаций значительно увеличились.

В этом документе описывается, как инициировать асинхронные запросы с помощью API. Вы также можете использовать пользовательский интерфейс, как описано в разделе «Выполнение пользовательского отчета» .

Сравнение API отчетов с пользовательским интерфейсом

Создание пользовательских отчетов и управление ими описывает, как использовать пользовательский интерфейс Edge для создания и запуска пользовательских отчетов. Вы можете запускать эти отчеты синхронно или асинхронно.

Большинство концепций создания пользовательских отчетов с помощью пользовательского интерфейса применимы к использованию API. То есть при создании пользовательских отчетов с помощью API вы указываете метрики , измерения и фильтры , встроенные в Edge, а также любые пользовательские метрики, созданные вами с помощью политики СтатистикаКоллектор .

Основные различия между отчетами, созданными в пользовательском интерфейсе и API, заключаются в том, что отчеты, созданные с помощью API, записываются в файлы CSV или JSON (с разделителями новой строки), а не в визуальный отчет, отображаемый в пользовательском интерфейсе.

Ограничения гибрида Apigee

Гибрид Apigee устанавливает ограничение размера результирующего набора данных в 30 МБ.

Как сделать асинхронный аналитический запрос

Вы выполняете асинхронные аналитические запросы в три этапа :

  1. Отправьте запрос.

  2. Получите статус запроса.

  3. Получите результаты запроса.

Шаг 1. Отправьте запрос

Вы должны отправить запрос POST к API /queries . Этот API сообщает Edge обработать ваш запрос в фоновом режиме. Если отправка запроса прошла успешно, API возвращает статус 201 и идентификатор, который вы будете использовать для ссылки на запрос на последующих шагах.

Например:

curl -X POST -H "Content-Type:application/json"
https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/queries -d @json-query-file
-u orgAdminEmail:password

Тело запроса представляет собой JSON-описание запроса. В теле JSON укажите метрики , параметры и фильтры , определяющие отчет.

Ниже показан пример файла json-query-file :

{ 
   "metrics":  [
     {
         "name": "message_count",
         "function": "sum",
         "alias": "sum_txn"
    }
        ],
    "dimensions": ["apiproxy"],
    "timeRange": "last24hours",
    "limit": 14400,
    "filter":"(message_count ge 0)"         
}

См. раздел «О теле запроса» ниже для получения полного описания синтаксиса тела запроса.

Пример ответа:

Обратите внимание, что в ответ включен идентификатор запроса 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd . Помимо статуса HTTP 201, state enqueued означает, что запрос выполнен успешно.

HTTP/1.1 201 Created

{  
  "self":"/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd",
  "created":"2018-05-10T07:11:10Z",
  "state":"enqueued",
  "error":"false",
}

Шаг 2. Получите статус запроса

Выполните вызов GET , чтобы запросить статус запроса. Вы предоставляете идентификатор запроса, который был возвращен в результате вызова POST. Например:

curl -X GET -H "Content-Type:application/json"
https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd
-u email:password

Примеры ответов:

Если запрос все еще выполняется, вы получите такой ответ, в котором state running :

{
    "self": "/organizations/myorg/environments/myenv/queries/1577884c-4f48-4735-9728-5da4b05876ab",
    "state": "running",
    "created": "2018-02-23T14:07:27Z",
    "updated": "2018-02-23T14:07:54Z"
}

После успешного завершения запроса вы увидите такой ответ, где state установлено как completed :

{
      "self": "/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd",
      "state": "completed",
      "result": {
        "self": "/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd/result",
        "expires": "2017-05-22T14:56:31Z"
      },
      "resultRows": 1,
      "resultFileSize": "922KB",
      "executionTime": "11 sec",
      "created": "2018-05-10T07:11:10Z",
      "updated": "2018-05-10T07:13:22Z"
}

Шаг 3. Получите результаты запроса

После completed статуса запроса вы можете использовать API получения результатов для получения результатов, где идентификатор запроса снова равен 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd .

curl -X GET -H "Content-Type:application/json" -O -J https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/queries/9cfc0d85-0f30-46d6-ae6f-318d0cb961bd/result
-u email:password

Чтобы получить загруженный файл, вам необходимо настроить используемый вами инструмент так, чтобы он сохранял загруженный файл в вашей системе. Например:

  • Если вы используете cURL, вы можете использовать параметры -O -J , как показано выше.

  • Если вы используете Postman, вам нужно нажать кнопку «Сохранить и загрузить» . В этом случае загружается zip-файл с названием response .

  • Если вы используете браузер Chrome, загрузка принимается автоматически.

Если запрос успешен и имеется ненулевой набор результатов, результат загружается клиенту в виде сжатого файла JSON (с разделителями новой строки). Имя загруженного файла будет:

OfflineQueryResult-<query-id>.zip

Например:

OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip

ZIP-файл содержит архивный файл .gz с результатами JSON. Чтобы получить доступ к файлу JSON, разархивируйте загруженный файл, затем используйте команду gzip чтобы извлечь файл JSON:

unzip OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
gzip -d QueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd-000000000000.json.gz

О теле запроса

В этом разделе описываются все параметры, которые можно использовать в теле запроса JSON. Подробную информацию о метриках и параметрах, которые вы можете использовать в своем запросе, см. в Справочнике по аналитике .

{  
   "metrics":[  
      {  
        "name":"metric_name",
        "function":"aggregation_function",
        "alias":"metric_dispaly_name_in_results",
        "operator":"post_processing_operator",
        "value":"post_processing_operand"
      },
   ...
   ],
   "dimensions":[  
      "dimension_name",
      ...
   ],
   "timeRange":"time_range",
   "limit":results_limit,
   "filter":"filter",
   "groupByTimeUnit": "grouping",
   "outputFormat": "format",
   "csvDelimiter": "delimiter"
}
Свойство Описание Необходимый?
metrics

Массив метрик. Вы можете указать одну или несколько метрик для запроса, включающего каждую метрику. Требуется только имя метрики:

  • name : (Обязательно) Имя метрики, определенное в таблице metrics .
  • function : (Необязательно) Функция агрегирования в виде avg , min , max или sum .

    Не все метрики поддерживают все функции агрегирования. Документация по метрикам содержит таблицу, в которой указано имя метрики и функция ( avg , min , max , sum ), поддерживаемая метрикой.

  • alias : (необязательно) Имя свойства, содержащего данные метрики в выходных данных. Если этот параметр опущен, по умолчанию используется имя метрики в сочетании с именем функции агрегирования.
  • operator : (Необязательно) Операция, выполняемая с метрикой после вычисления ее значения. Работает со свойством value . Поддерживаемые операции: + - / % * .
  • value : (Необязательно) Значение, примененное к вычисляемой метрике указанным operator .

Свойства operator и value определяют операцию постобработки, выполняемую над метрикой. Например, если вы укажете метрику response_processing_latency , эта метрика вернет среднюю задержку обработки ответа с единицей измерения в миллисекундах. Чтобы преобразовать единицы измерения в секунды, установите operator "/" и value ”1000.0“ :

"metrics":[  
  {  
    "name":"response_processing_latency",
    "function":"avg",
    "alias":"average_response_time_in_seconds",
    "operator":"/",
    "value":"1000"
  }
]

Дополнительную информацию см. в разделе Справочник по метрикам, параметрам и фильтрам Google Analytics .

Нет
dimensions Массив измерений для группировки показателей. Дополнительную информацию см. в списке поддерживаемых измерений . Вы можете указать несколько размеров. Нет
timeRange Диапазон времени для запроса.

Для указания диапазона времени можно использовать следующие предопределенные строки:

  • last60minutes
  • last24hours
  • last7days

Или вы можете указать timeRange как структуру, описывающую временные метки начала и окончания в формате ISO: yyyy-mm-dd T hh:mm:ss Z . Например:

"timeRange": {
    "start": "2018-07-29T00:13:00Z",
    "end": "2018-08-01T00:18:00Z"
}
Да
limit Максимальное количество строк, которые могут быть возвращены в результате. Нет
filter Логическое выражение, которое можно использовать для фильтрации данных. Выражения фильтра можно комбинировать с помощью терминов И/ИЛИ, и их следует заключать в круглые скобки во избежание двусмысленности. Дополнительную информацию о полях, доступных для фильтрации, см. в справочнике по показателям, параметрам и фильтрам Google Analytics . Дополнительные сведения о токенах, которые вы используете для создания выражений фильтра, см. в разделе Синтаксис выражений фильтров . Нет
groupByTimeUnit Единица времени, используемая для группировки набора результатов. Допустимые значения: second , minute , hour , day , week или month .

Если запрос включает groupByTimeUnit , то результатом является агрегирование на основе указанной единицы времени, а результирующая метка времени не включает точность в миллисекундах. Если в запросе отсутствует groupByTimeUnit , результирующая временная метка включает точность в миллисекундах.

Нет
outputFormat Выходной формат. Допустимые значения: csv или json . По умолчанию используется json соответствующий JSON с разделителями новой строки.

Примечание . Настройте разделитель для вывода CSV с помощью свойства csvDelimiter .

Нет
csvDelimiter Разделитель, используемый в файле CSV, если для outputFormat установлено значение csv . По умолчанию , символ (запятая). Поддерживаемые символы-разделители включают запятую ( , ), вертикальную черту ( | ) и табуляцию ( \t ). Нет

Синтаксис выражения фильтра

В этом справочном разделе описаны токены, которые можно использовать для создания выражений фильтра в теле запроса. Например, в следующем выражении используется токен «ge» (больше или равно):

"filter":"(message_count ge 0)"
Токен Описание Примеры
in Включить в список
(apiproxy in 'ethorapi','weather-api')

(apiproxy in 'ethorapi')

(apiproxy in 'Search','ViewItem')

(response_status_code in 400,401,500,501)

Примечание. Строки должны быть заключены в кавычки.

notin Исключить из списка
(response_status_code notin 400,401,500,501)
eq Равно ( ==)
(response_status_code eq 504)

(apiproxy eq 'non-prod')
ne Не равно (!=)
(response_status_code ne 500)

(apiproxy ne 'non-prod')
gt Больше, чем ( >)
(response_status_code gt 500)
lt Меньше ( <)
(response_status_code lt 500)
ge Больше или равно ( >=)
(target_response_code ge 400)
le Меньше или равно ( <=)
(target_response_code le 300)
like Возвращает true, если шаблон строки соответствует предоставленному шаблону.

Пример справа соответствует следующему:

- любое значение, содержащее слово «купить»

- любое значение, заканчивающееся на «item»

- любое значение, начинающееся с «Prod»

- любое значение, начинающееся с 4, обратите внимание, что код_статуса_ответа является числовым.

(apiproxy like '%buy%')

(apiproxy like '%item')

(apiproxy like 'Prod%')
not like Возвращает false, если шаблон строки соответствует предоставленному шаблону.
(apiproxy not like '%buy%')

(apiproxy not like '%item')

(apiproxy not like 'Prod%')
and Позволяет использовать логику «и» для включения более одного выражения фильтра. В фильтр включены данные, соответствующие всем условиям.
(target_response_code gt 399) and (response_status_code ge 400)
or Позволяет использовать логику «или» для оценки различных возможных выражений фильтра. Фильтр включает данные, соответствующие хотя бы одному из условий.
(response_size ge 1000) or (response_status_code eq 500)

Ограничения и значения по умолчанию

Ниже приведен список ограничений и значений по умолчанию для функции асинхронной обработки запросов.

Ограничение По умолчанию Описание
Лимит вызовов для запроса См. описание Вы можете совершать до семи вызовов в час к API управления /queries для создания асинхронного отчета. Если вы превысите квоту вызовов, API вернет ответ HTTP 429.
Лимит активных запросов 10 Вы можете иметь до 10 активных запросов для организации/среды.
Порог времени выполнения запроса 6 часов Запросы, которые занимают более 6 часов, будут прекращены.
Диапазон времени запроса См. описание Максимально допустимый диапазон времени для запроса — 365 дней.
Ограничение размеров и показателей 25 Максимальное количество параметров и показателей, которые можно указать в полезных данных запроса.

О результатах запроса

Ниже приведен пример результата в формате JSON. Вывод состоит из строк JSON, разделенных новым разделителем строк:

{"message_count":"10209","apiproxy":"guest-auth-v3","hour":"2018-08-07 19:26:00 UTC"}
{"message_count":"2462","apiproxy":"carts-v2","hour":"2018-08-06 13:16:00 UTC"}    
…

Вы можете получать результаты по URL-адресу до истечения срока действия данных в репозитории. См. Ограничения и значения по умолчанию .

Примеры

Пример 1: Сумма количества сообщений

Запрос суммы сообщений за последние 60 минут.

Запрос

curl -X POST -H "Content-Type: application/json" -H "Accept: application/json"
https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries"
-d @last60minutes.json
-u orgAdminEmail:password

Тело запроса из Last60MINUT.JSON

{  
   "metrics":[  
      {  
         "name":"message_count",
         "function":"sum"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":1000,
   "timeRange":"last60minutes"
}

Пример 2: Пользовательский диапазон времени

Запрос с использованием пользовательского диапазона времени.

Запрос

curl -X POST -H "Content-Type: application/json" -H "Accept: application/json"
https://api.enterprise.apigee.com/v1 /organizations/myorg/environments/test/queries"
-d @last60minutes.json
-u orgAdminEmail:password

Тело запроса из Last60MINUT.JSON

{  
   "metrics":[  
      {  
         "name":"message_count",
         "function":"sum"
      },
      {  
         "name":"total_response_time",
         "function":"avg",
         "alias":"average_response_time"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":1000,
   "timeRange":{  
      "start":"2018-11-01T11:00:00Z",
      "end":"2018-11-30T11:00:00Z"
   }
}

Пример 3: Транзакций в минуту

Запрос по метрике транзакций в минуту (tpm).

Запрос

curl -X POST -H "Content-Type: application/json" -H "Accept: application/json"
https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries"
-d @tpm.json
-u orgAdminEmail:password

Тело запроса из tpm.json

{  
   "metrics":[  
      {  
         "name":"tpm"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":1000,
   "timeRange":{  
      "start":"2018-07-01T11:00:00Z",
      "end":"2018-07-30T11:00:00Z"
   }
}

Пример результата

Выдержка из файла результатов:

{"tpm":149995.0,"apiproxy":"proxy_1","minute":"2018-07-06 12:16:00 UTC"}
{"tpm":149998.0,"apiproxy":"proxy_1","minute":"2018-07-09 15:12:00 UTC"}
{"tpm":3.0,"apiproxy":"proxy_2","minute":"2018-07-11 16:18:00 UTC"}
{"tpm":148916.0,"apiproxy":"proxy_1","minute":"2018-07-15 17:14:00 UTC"}
{"tpm":150002.0,"apiproxy":"proxy_1","minute":"2018-07-18 18:11:00 UTC"}
...

Пример 4. Использование выражения фильтра

Запрос с выражением фильтра, использующим логический оператор.

Запрос

curl -X POST -H "Content-Type:application/json"
https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries"
-d @filterCombo.json
-u orgAdminEmail:password

Тело запроса из filterCombo.json

{  
   "metrics":[  
      {  
         "name":"message_count",
         "function":"sum"
      },
      {  
         "name":"total_response_time",
         "function":"avg",
         "alias":"average_response_time"
      }
   ],
   "filter":"(apiproxy ne \u0027proxy_1\u0027) and (apiproxy ne \u0027proxy_2\u0027)",
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":1000,
   "timeRange":{  
      "start":"2018-11-01T11:00:00Z",
      "end":"2018-11-30T11:00:00Z"
   }
}

Пример 5. Передача выражения в параметре метрики

Запрос с выражением, которое передается как часть параметра метрики. Вы можете использовать только простые выражения с одним оператором.

Запрос

curl -X POST -H "Content-Type:application/json"
https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/queries" 
-d @metricsExpression.json
-u orgAdminEmail:password

Тело запроса из metricsExpression.json

{  
   "metrics":[  
      {  
         "name":"message_count",
         "function":"sum",
         "operator":"/",
         "value":"7"
      }
   ],
   "dimensions":[  
      "apiproxy"
   ],
   "groupByTimeUnit":"minute",
   "limit":10,
   "timeRange":"last60minutes"
}

Как сделать запрос отчета об асинхронной монетизации

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

Как и в случае с асинхронными аналитическими запросами, вы выполняете асинхронные запросы к отчету о монетизации в три этапа : (1) отправляете запрос, (2) получаете статус запроса и (3) получаете результаты запроса.

Шаг 1 (отправка запроса) описан ниже.

Шаги 2 и 3 точно такие же, как и для запросов асинхронной аналитики. Дополнительные сведения см. в разделе Как выполнить асинхронный аналитический запрос .

Чтобы отправить запрос на отчет об асинхронной монетизации, отправьте запрос POST на адрес /mint/organizations/ org_id /async-reports .

При желании вы можете указать среду, передав параметр запроса environment . Если не указано, параметр запроса по умолчанию имеет значение prod . Например:

/mint/organizations/org_id/async-reports?environment=prod

В теле запроса укажите следующие критерии поиска.

Имя Описание По умолчанию Необходимый?
appCriteria Идентификатор и организация конкретного приложения, которые будут включены в отчет. Если это свойство не указано, в отчет включаются все приложения. Н/Д Нет
billingMonth Месяц выставления счета для отчета, например ИЮЛЬ. Н/Д Да
billingYear Год выставления счета для отчета, например 2015. Н/Д Да
currencyOption Валюта отчета. Допустимые значения включают в себя:
  • LOCAL – Каждая строка отчета отображается с использованием действующего тарифного плана. Это означает, что в одном отчете может быть несколько валют, если у разработчиков есть планы, в которых используются разные валюты.
  • EUR — транзакции в местной валюте конвертируются и отображаются в евро.
  • GPB — транзакции в местной валюте конвертируются и отображаются в фунтах Соединенного Королевства.
  • USD — транзакции в местной валюте конвертируются и отображаются в долларах США.

Если вы выберете евро, фунты стерлингов или доллары США, в отчете будут отображены все транзакции с использованием этой единой валюты на основе обменного курса, действовавшего на дату транзакции.

Н/Д Нет
devCriteria

Идентификатор разработчика или адрес электронной почты, а также название организации для конкретного разработчика, который будет включен в отчет. Если это свойство не указано, в отчет включаются все разработчики.

Например:

"devCriteria":[{
    "id":"RtHAeZ6LtkSbEH56",
    "orgId":"my_org"}
]
Н/Д Нет
fromDate Дата начала отчета в формате UTC. Н/Д Да
monetizationPakageIds Идентификатор одного или нескольких пакетов API для включения в отчет. Если это свойство не указано, в отчет включаются все пакеты API. Н/Д Нет
productIds Идентификатор одного или нескольких продуктов API, которые необходимо включить в отчет. Если это свойство не указано, в отчет включаются все продукты API. Н/Д Нет
ratePlanLevels

Тип тарифного плана, который будет включен в отчет. Допустимые значения включают в себя:

  • DEVELOPER - Тарифный план для разработчиков.
  • STANDARD – Стандартный тарифный план.

Если это свойство не указано, в отчет включаются как специфичные для разработчика, так и стандартные тарифные планы.

Н/Д Нет
toDate Дата окончания отчета в формате UTC. Н/Д Да

Например, следующий запрос создает отчет об асинхронной монетизации за июнь 2017 года для указанного продукта API и идентификатора разработчика. Даты и время в отчетах fromDate и toDate указаны в формате UTC/GMT и могут включать время.

curl -H "Content-Type:application/json" -X POST -d \
'{
      "fromDate":"2017-06-01 00:00:00",
      "toDate":"2017-06-30 00:00:00",    
     "productIds": [
        "a_product"
    ],
    "devCriteria": [{
        "id": "AbstTzpnZZMEDwjc",
        "orgId": "myorg"
    }]

 }' \
"https://api.enterprise.apigee.com/v1/mint/organizations/myorg/async-reports?environment=prod" \
-u orgAdminEmail:password