Usa la API de informes personalizados asíncronos

Estás viendo la documentación de Apigee Edge.
Ve a la documentación de Apigee X.
info

Edge Analytics proporciona un amplio conjunto de paneles interactivos, generadores de informes personalizados y las funciones que están relacionadas. Sin embargo, el propósito de estas funciones es que sean interactivas: debes enviar una solicitud a la API o a la IU y la solicitud se bloqueará hasta que el servidor de análisis proporcione una respuesta.

Sin embargo, es posible que se agote el tiempo de espera de las solicitudes de estadísticas si tardan demasiado en completarse. Si una solicitud de consulta necesita procesar una gran cantidad de datos (por ejemplo, 100 s de GB), puede fallar debido a que se agota el tiempo de espera.

El procesamiento de consultas asíncronas te permite consultar conjuntos de datos muy grandes y recuperar los resultados más adelante. Puedes considerar el uso de una consulta sin conexión cuando descubras que tus consultas interactivas agotan el tiempo de espera. Algunos casos en los que el procesamiento de consultas asíncronas puede ser una buena alternativa incluyen los siguientes:

  • Análisis y creación de informes que abarquen intervalos grandes
  • Análisis de datos con una variedad de dimensiones de agrupación y otras restricciones que agregan complejidad a la consulta.
  • Administración de consultas cuando se descubre que los volúmenes de datos aumentaron de forma significativa para algunos usuarios u organizaciones.

En este documento, se describe cómo iniciar una consulta asíncrona mediante la API. También puedes usar la IU, como se describe en Ejecuta un informe personalizado.

Compara la API de informes con la IU

En Crea y administra informes personalizados, se describe cómo usar la IU de Edge para crear y ejecutar informes personalizados. Puedes ejecutar esos informes de forma síncrona o asíncrona.

La mayoría de los conceptos para generar informes personalizados con la IU se aplican al uso de la API. Es decir, cuando creas informes personalizados con la API, especificas métricas, dimensiones y filtros integrados en Edge, así como las métricas personalizadas que creaste con la política StatisticsCollector.

Las diferencias principales entre los informes generados en la IU y en la API son que los informes generados con la API se escriben en archivos CSV o JSON (delimitados por saltos de línea) en lugar de un informe visual en la IU.

Límites en Apigee Hybrid

Apigee Hybrid aplica un límite de tamaño de 30 MB para el conjunto de datos resultante.

Cómo realizar una consulta de estadísticas asíncrona

Haz consultas de estadísticas asíncronas en tres pasos:

  1. Envía la consulta

  2. Obtén el estado de la consulta

  3. Recupera los resultados de la consulta

Paso 1: Envía la consulta

Debes enviar una solicitud POST a la API de /queries. Esta API le indica a Edge que procese tu solicitud en segundo plano. Si el envío de la consulta se realiza correctamente, la API muestra un estado 201 y un ID que usarás para hacer referencia a la consulta en pasos posteriores.

Por ejemplo:

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

El cuerpo de la solicitud es una descripción JSON de la consulta. En el cuerpo JSON, especifica las métricas, las dimensiones y los filtros que definen el informe.

A continuación, se muestra un ejemplo de archivo json-query-file:

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

Consulta Información del cuerpo de la solicitud a continuación para obtener una descripción completa de la sintaxis del cuerpo de la solicitud.

Respuesta de muestra:

Ten en cuenta que el ID de la consulta 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd se incluye en la respuesta. Además del estado HTTP 201, el state de enqueued significa que la solicitud se realizó de forma correcta.

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",
}

Paso 2. Obtén el estado de la consulta

Realiza una llamada GET para solicitar el estado de la consulta. Proporciona el ID de consulta que se mostró en la llamada POST. Por ejemplo:

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

Ejemplos de respuesta:

Si la consulta aún está en curso, obtendrás una respuesta como esta, en la que el state está en 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"
}

Una vez que la consulta se complete de forma correcta, verás una respuesta como esta, en la que state está configurado como 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"
}

Paso 3: Recupera los resultados de la consulta

Una vez que el estado de la consulta sea completed, puedes usar la API de obtener resultados para recuperar los resultados, en los que el ID de consulta vuelve a ser 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

Con el fin de recuperar el archivo descargado, debes configurar la herramienta que usas para que guarde un archivo descargado en tu sistema. Por ejemplo:

  • Si usas cURL, puedes usar las opciones de -O -J, como se muestra arriba.

  • Si usas Postman, debes seleccionar el botón Guardar y descargar. En este caso, se descarga un archivo ZIP llamado response.

  • Si usas el navegador Chrome, la descarga se acepta automáticamente.

Si la solicitud se realiza correctamente y hay un conjunto de resultados que no es cero, el resultado se descarga al cliente como un archivo JSON comprimido (delimitado por saltos de línea). El nombre del archivo descargado será el siguiente:

OfflineQueryResult-<query-id>.zip

Por ejemplo:

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

El archivo ZIP contiene un archivo .gz de los resultados de JSON. Para acceder al archivo JSON, descomprime el archivo y, luego, usa el comando gzip a fin de extraerlo:

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

Información del cuerpo de la solicitud

En esta sección, se describe cada uno de los parámetros que puedes usar en el cuerpo de la solicitud JSON para una consulta. Para obtener más detalles sobre las métricas y dimensiones que puedes usar en tu consulta, consulta la Referencia de Analytics.

{  
   "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"
}
Property Descripción ¿Es obligatorio?
metrics

Array de métricas. Puedes especificar una o más métricas para una consulta en la que se incluya cada una. Solo se requiere el nombre de la métrica:

  • name: Es el nombre de la métrica tal como lo define la tabla en métricas (obligatorio).
  • function: Es la función de agregación como avg, min, max o sum (opcional).

    No todas las métricas admiten todas las funciones de agregación. La documentación sobre métricas contiene una tabla que especifica el nombre de la métrica y la función (avg, min, max y sum) compatible. por la métrica.

  • alias: El nombre de la propiedad que contiene los datos de métrica en el resultado (opcional). Si se omite, el valor predeterminado es el nombre de la métrica combinado con el nombre de la función de agregación.
  • operator: Una operación que se realiza en la métrica después de que se calcula su valor (opcional). Funciona con la propiedad value. Las operaciones admitidas incluyen lo siguiente: + - / % *.
  • value: El valor aplicado a la métrica calculada según el operator especificado (opcional).

Las propiedades operator y value definen una operación de procesamiento posterior realizada en la métrica. Por ejemplo, si especificas la métrica response_processing_latency, la métrica muestra la latencia de procesamiento de respuesta promedio con una unidad de milisegundos. Para convertir las unidades en segundos, establece operator en "/" y value en ”1000.0“:

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

Para obtener más información, consulta Referencia de métricas, dimensiones y filtros de Analytics.

No
dimensions Array de dimensiones para agrupar las métricas. Para obtener más información, consulta la lista de dimensiones compatibles. Puede especificar varias dimensiones. No
timeRange Intervalo para la consulta.

Puedes usar las siguientes strings predefinidas para especificar el intervalo:

  • last60minutes
  • last24hours
  • last7days

También puedes especificar el timeRange como una estructura que describe las marcas de tiempo de inicio y de finalización en el formato ISO: yyyy-mm-ddThh:mm:ssZ. Por ejemplo:

"timeRange": {
    "start": "2018-07-29T00:13:00Z",
    "end": "2018-08-01T00:18:00Z"
}
limit Cantidad máxima de filas que se pueden mostrar en el resultado. No
filter Expresión booleana que se puede usar para filtrar datos Las expresiones de filtro se pueden combinar con términos AND y OR y deben estar entre paréntesis para evitar la ambigüedad. Consulta la referencia de métricas, dimensiones y filtros de Analytics si deseas obtener más información sobre los campos disponibles para filtrar. Si deseas obtener más información sobre los tokens que usas para compilar expresiones de filtro, consulta Sintaxis de expresión de filtro. No
groupByTimeUnit Es la unidad de tiempo que se usa para agrupar el conjunto de resultados. Entre los valores válidos, se incluyen: second, minute, hour, day, week o month.

Si una consulta incluye groupByTimeUnit, el resultado es una agregación basada en la unidad de tiempo especificada y la marca de tiempo resultante no incluye una precisión de milisegundos. Si una consulta omite groupByTimeUnit, la marca de tiempo resultante incluye una precisión de milisegundos.

No
outputFormat Formato de salida. Entre los valores válidos, se incluyen csv o json. La configuración predeterminada es json, que corresponde al formato JSON delimitado por saltos de línea.

Nota: Configura el delimitador para la salida de CSV mediante la propiedad csvDelimiter.

No
csvDelimiter El delimitador que se usa en el archivo CSV, si outputFormat se configura como csv. El valor predeterminado es el carácter , (coma). Los caracteres delimitadores admitidos incluyen coma (,), barra vertical (|) y tabulación (\t). No

Sintaxis de la expresión de filtro

En esta sección de referencia, se describen los tokens que puedes usar para compilar expresiones de filtro en el cuerpo de la solicitud. Por ejemplo, la siguiente expresión usa el token “ge” (mayor o igual que):

"filter":"(message_count ge 0)"
Token Descripción Ejemplos
in Incluir en la lista
(apiproxy in 'ethorapi','weather-api')

(apiproxy in 'ethorapi')

(apiproxy in 'Search','ViewItem')

(response_status_code in 400,401,500,501)

Nota: Las strings deben estar entre comillas.

notin Excluir de la lista
(response_status_code notin 400,401,500,501)
eq Igual que ==)
(response_status_code eq 504)

(apiproxy eq 'non-prod')
ne No igual a (!=)
(response_status_code ne 500)

(apiproxy ne 'non-prod')
gt Mayor que >)
(response_status_code gt 500)
lt Menor que <)
(response_status_code lt 500)
ge Mayor que o igual que >=)
(target_response_code ge 400)
le Menor o igual que <=)
(target_response_code le 300)
like Muestra verdadero si el patrón de string coincide con el patrón proporcionado.

El ejemplo de la derecha coincide de la siguiente manera:

- cualquier valor que tenga la palabra “comprar”

- cualquier valor que finalice en “elemento”

- cualquier valor que comience con “Prod”

- cualquier valor que comience con 4, nota que response_status_code es numérico.

(apiproxy like '%buy%')

(apiproxy like '%item')

(apiproxy like 'Prod%')
not like Muestra falso si el patrón de string coincide con el patrón proporcionado.
(apiproxy not like '%buy%')

(apiproxy not like '%item')

(apiproxy not like 'Prod%')
and Te permite usar la lógica "and" para incluir más de una expresión de filtro. El filtro incluye los datos que cumplen con todas las condiciones.
(target_response_code gt 399) and (response_status_code ge 400)
or Te permite usar la lógica 'or' para evaluar diferentes expresiones de filtro posibles. El filtro incluye los datos que cumplen con al menos una de las condiciones.
(response_size ge 1000) or (response_status_code eq 500)

Restricciones y valores predeterminados

A continuación, se muestra una lista de restricciones y valores predeterminados para la función de procesamiento de consultas asíncronas.

Restricción Predeterminado Descripción
Límite de llamadas a consultas Consulta la descripción Puedes realizar hasta siete llamadas a la API de administración /queries por hora para iniciar un informe asíncrono. Si excedes la cuota de llamada, la API muestra una respuesta HTTP 429.
Límite de consulta activa 10 Puedes tener hasta 10 consultas activas para una organización o entorno.
Límite de tiempo de ejecución de la consulta 6 horas Las consultas que tarden más de 6 horas se finalizarán.
Rango de tiempo de consulta Consulta Descripción El intervalo máximo permitido para una consulta es de 365 días.
Límite de dimensiones y métricas 25 El número máximo de dimensiones y métricas que puedes especificar en la carga útil de la consulta.

Información acerca de los resultados de la consulta

El siguiente es un resultado de ejemplo en formato JSON. El resultado consiste en filas de JSON separadas por un nuevo delimitador de línea:

{"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"}    
…

Puedes recuperar los resultados de la URL hasta el vencimiento de los datos en el repositorio. Consulta Restricciones y valores predeterminados.

Ejemplos

Ejemplo 1: Suma de la cantidad de mensajes

La consulta de la suma de recuentos de mensajes de los últimos 60 minutos.

Consulta

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

Cuerpo de la solicitud de last60minutes.json

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

Ejemplo 2: Intervalo personalizado

Consulta mediante un intervalo personalizado.

Consulta

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

Cuerpo de la solicitud de last60minutes.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"
   }
}

Ejemplo 3: Transacciones por minuto

Consulta la métrica por transacciones por minuto (tpm).

Consulta

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

Cuerpo de la solicitud de tpm.json

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

Resultado de muestra

Salto del archivo de resultados:

{"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"}
...

Ejemplo 4: Usa una expresión de filtro

Consulta con una expresión de filtro que use un operador booleano.

Consulta

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

Cuerpo de la solicitud de 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"
   }
}

Ejemplo 5: Pasa una expresión en el parámetro de las métricas

Consulta con una expresión que se pasa como parte del parámetro de métricas. Solo puedes usar expresiones simples de un operador.

Consulta

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

Cuerpo de la solicitud de metricsExpression.json

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

Cómo realizar una consulta de informe de monetización asíncrona

Puedes capturar todas las transacciones de monetización exitosas dentro de un período determinado para un conjunto específico de criterios. Con ese objetivo, sigue los pasos que se describen en esta sección.

Al igual que con las consultas de estadísticas asíncronas, puedes realizar consultas de informes de monetización asíncronas en tres pasos: (1) enviar la consulta, (2) obtener el estado de la consulta y (3) recuperar los resultados de las consultas.

A continuación, se describe el Paso 1, envíar la consulta.

Los pasos 2 y 3 son exactamente los mismos que para las consultas de estadísticas asíncronas. Para obtener más información, consulta Cómo realizar una consulta de análisis asíncrono.

Para enviar una consulta de un informe de monetización asíncrona, envía una solicitud POST a /mint/organizations/org_id/async-reports.

De manera opcional, puedes especificar el entorno pasando el parámetro de consulta environment. Si no se especifica, el parámetro de consulta predeterminado es prod. Por ejemplo:

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

En el cuerpo de la solicitud, especifica los siguientes criterios de búsqueda.

Nombre Descripción Predeterminada ¿Es obligatorio?
appCriteria El ID y la organización de una aplicación específica que se incluirá en el informe Si no se especifica esta propiedad, se incluyen todas las aplicaciones en el informe. N/A No
billingMonth Mes de facturación del informe, como JULIO. N/A
billingYear Año de facturación del informe, como 2015. N/A
currencyOption Moneda para el informe. Estos son algunos de los valores válidos:
  • LOCAL: Cada línea del informe se muestra con el plan de tarifas aplicable. Esto significa que puede haber varias monedas en un informe si los desarrolladores tienen planes que usan diferentes monedas.
  • EUR: Las transacciones de moneda local se convierten y se muestran en euros.
  • GPB: Las transacciones de moneda local se convierten y se muestran en libras esterlinas.
  • USD: Las transacciones de moneda local se convierten y se muestran en dólares estadounidenses.

Si seleccionas EUR, GBP o USD, el informe muestra todas las transacciones con esa moneda única, según el tipo de cambio vigente en la fecha de la transacción.

N/A No
devCriteria

El ID de desarrollador o la dirección de correo electrónico, y el nombre de la organización de un desarrollador específico que se incluirá en el informe Si no se especifica esta propiedad, se incluyen todos los desarrolladores en el informe.

Por ejemplo:

"devCriteria":[{
    "id":"RtHAeZ6LtkSbEH56",
    "orgId":"my_org"}
]
N/A No
fromDate Es la fecha de inicio del informe en UTC. N/A
monetizationPakageIds Es el ID de uno o más paquetes de API que se incluirán en el informe. Si no se especifica esta propiedad, se incluyen todos los paquetes de API en el informe. N/A No
productIds Es el ID de uno o más productos de API que se incluirán en el informe. Si no se especifica esta propiedad, se incluyen todos los productos de la API en el informe. N/A No
ratePlanLevels

Es el tipo de plan de tarifas que se incluirá en el informe. Estos son algunos de los valores válidos:

  • DEVELOPER: Plan de tarifas de desarrolladores.
  • STANDARD: Plan de tarifas estándar.

Si no se especifica esta propiedad, se incluyen en el informe los planes de tarifas estándar y específicos del desarrollador.

N/A No
toDate Es la fecha de finalización del informe en UTC. N/A

Por ejemplo, la siguiente solicitud genera un informe de monetización asíncrono para el mes de junio de 2017 para el producto de API y el ID de desarrollador especificados. Las fechas y horas de los informes fromDate y toDate están en UTC/GMT y pueden incluir horas.

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