Cette page s'applique à Apigee et à Apigee hybrid.
Consultez la documentation d'Apigee Edge.
Apigee Analytics fournit un ensemble complet de tableaux de bord interactifs, de générateurs de rapports personnalisés et de fonctionnalités associées. Toutefois, ces fonctionnalités sont conçues pour être interactives : vous envoyez une requête d'API ou d'interface utilisateur, laquelle est bloquée jusqu'à ce que le serveur d'analyse fournisse une réponse.
Toutefois, les requêtes d'analyse peuvent expirer si leur traitement prend trop de temps. Si une requête doit traiter une grande quantité de données (par exemple, des centaines de Go), elle peut échouer à cause d'un délai avant expiration.
Le traitement des requêtes asynchrones vous permet de lancer des requêtes sur des ensembles de données très volumineux et de récupérer les résultats ultérieurement. Vous pouvez envisager d'utiliser une requête hors connexion lorsque vous constatez que vos requêtes interactives ont expiré. Le traitement des requêtes asynchrones peut constituer une bonne alternative dans certains cas, par exemple :
- Analyse et création de rapports couvrant de grands intervalles de temps
- Analyse des données avec diverses dimensions de regroupement et d'autres contraintes qui ajoutent de la complexité à la requête
- Gestion des requêtes lorsque vous constatez que les volumes de données ont considérablement augmenté pour certains utilisateurs ou organisations
Ce document explique comment lancer une requête asynchrone à l'aide de l'API. Vous pouvez également utiliser l'interface utilisateur, comme décrit dans la section Exécuter un rapport personnalisé.
Comparer l'API de création de rapports à l'interface utilisateur
La page Créer et gérer des rapports personnalisés décrit comment utiliser l'interface utilisateur Apigee pour créer et exécuter des rapports personnalisés. Vous pouvez exécuter ces rapports de manière synchrone ou asynchrone.
La plupart des concepts liés à la génération de rapports personnalisés avec l'interface utilisateur s'appliquent à l'utilisation de l'API. Autrement dit, lorsque vous créez des rapports personnalisés avec l'API, vous spécifiez des métriques, des dimensions et des filtres intégrés à Apigee.
La principale différence entre les rapports générés avec l'API et l'interface utilisateur est que les premiers sont écrits sous la forme de fichiers CSV ou JSON (délimités par un retour à la ligne), tandis que les seconds sont affichés dans l'interface utilisateur.
Durée maximale des requêtes
Apigee applique une durée maximale de 365 jours pour une requête asynchrone.
Créer une requête d'analyse asynchrone
Vous effectuez des requêtes d'analyse asynchrones en trois étapes :
Étape 1 : Envoyer la requête
Vous devez envoyer une requête POST à l'API Queries. Cette API indique à Apigee de traiter votre requête en arrière-plan. Si l'envoi de la requête aboutit, l'API renvoie un état 201 et un ID que vous utiliserez pour faire référence à la requête dans les étapes suivantes.
Exemple :
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @json-query-file
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Le corps de la requête est une description JSON de la requête. Dans le corps JSON, spécifiez les métriques, les dimensions et les filtres qui définissent le rapport.
Vous trouverez ci-dessous un exemple de fichier json-query-file
:
{
"metrics": [
{
"name": "message_count",
"function": "sum",
"alias": "sum_txn"
}
],
"dimensions": ["apiproxy"],
"timeRange": "last24hours",
"limit": 14400,
"filter":"(message_count ge 0)"
}
Pour obtenir une description complète de la syntaxe du corps de la requête, consultez la section À propos du corps de la requête ci-dessous.
Exemple de réponse :
Notez que l'ID de requête 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd
est inclus dans la réponse. En plus de l'état HTTP 201, le paramètre state
ayant la valeur enqueued
signifie que la requête a abouti.
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",
}
Étape 2 : Obtenir l'état de la requête
Pour demander l'état de la requête, envoyez une requête GET à l'API Queries. Vous fournissez l'ID de requête renvoyé par l'appel POST. Exemple :
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries/QUERY_ID" \ -X GET \ -H "Authorization: Bearer $TOKEN"
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Exemples de réponses :
Si la requête est toujours en cours, vous obtenez une réponse de ce type, où le paramètre state
a la valeur 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"
}
Une fois que la requête a abouti, vous verrez une réponse de ce type, où le paramètre state
est défini sur 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"
}
Étape 3 : Récupérer les résultats de la requête
Une fois que l'état de la requête est completed
, vous pouvez utiliser deux méthodes pour récupérer ses résultats :
getResulturl
(recommandé) : il s'agit d'une méthode plus récente qui renvoie une URL permettant d'afficher les résultats de la requête. La taille des résultats d'une requête n'est pas limitée avec cette méthode.getResult
: il s'agit d'une ancienne méthode qui télécharge un fichier ZIP contenant les résultats de la requête. Cette méthode applique une limite de taille de 32 Mo aux résultats d'une requête.
Les onglets ci-dessous présentent les appels d'API permettant de récupérer les résultats de la requête à l'aide de ces deux méthodes. Comme indiqué ci-dessus, l'ID de requête est 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd
.
getResulturl
(recommandé)
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries/QUERY_ID/resulturl" \ -X GET \ -H "Authorization: Bearer $TOKEN"
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Voici un exemple de réponse à l'appel :
{ "urls": [ "uri": "https://storage.googleapis.com/example-bucket/cat.jpeg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount.com%2F20181026%2Fus-central1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T181309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f169edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa8496def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dcc1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c20580e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b133447032ea7abedc098d2eb14a7", "md5": "23db6982caef9e9152f1a5b2589e6ca3", "sizeBytes": 1024 ] }
La réponse contient une liste urls[]
avec les champs suivants :
uri
: chaîne correspondant à l'URL signée des données JSON pour le rapport. Vous pouvez afficher le rapport à cette adresse.md5
: hachage MD5 des données JSON.sizeBytes
: taille du fichier renvoyé en octets.
Pour obtenir un exemple de résultat au format JSON, consultez la section À propos des résultats de la requête.
getResult
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries/QUERY_ID/result" \ -X GET \ -H "Authorization: Bearer $TOKEN"
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Pour récupérer le fichier téléchargé, vous devez configurer l'outil que vous utilisez afin qu'il enregistre un fichier téléchargé sur votre système. Exemple :
- Si vous utilisez cURL, vous pouvez utiliser les options
-O -J
, comme indiqué ci-dessus. - Si vous utilisez Postman, vous devez sélectionner le bouton Enregistrer et télécharger. Dans ce cas, un fichier ZIP appelé
response
est téléchargé. - Si vous utilisez le navigateur Chrome, le téléchargement est accepté automatiquement.
Si la requête aboutit et qu'il existe un ensemble de résultats non nul, le résultat est téléchargé vers le client sous la forme d'un fichier JSON compressé (délimité par un retour à la ligne). Le nom du fichier téléchargé sera OfflineQueryResult-
.
Exemple : OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
.
Le fichier ZIP contient un fichier d'archive .gz des résultats JSON. Pour accéder au fichier JSON, décompressez le fichier téléchargé, puis exécutez la commande gzip
pour extraire le fichier JSON :
unzip OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
gzip -d QueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd-000000000000.json.gz
À propos du corps de la requête
Cette section décrit chacun des paramètres que vous pouvez utiliser dans le corps d'une requête JSON. Pour plus de détails sur les métriques et les dimensions que vous pouvez utiliser dans votre requête, consultez la documentation de référence d'Analytics.
{ "metrics":[ { "name":"metric_name", "function":"aggregation_function", "alias":"metric_display_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" }
Propriété | Description | Obligatoire ? |
---|---|---|
metrics
|
Tableau de métriques. Vous pouvez spécifier une ou plusieurs métriques pour une requête, chaque métrique comprenant les éléments suivants. Seul le nom de la métrique est obligatoire :
Les propriétés "metrics":[ { "name":"response_processing_latency", "function":"avg", "alias":"average_response_time_in_seconds", "operator":"/", "value":"1000" } ] Pour en savoir plus, consultez la documentation de référence sur les métriques, les dimensions et les filtres d'Analytics. |
Oui |
dimensions
|
Tableau de dimensions permettant de regrouper les métriques. Pour plus d'informations, consultez la liste des dimensions acceptées. Vous pouvez spécifier plusieurs dimensions. | Oui |
timeRange
|
Période pour la requête.
Vous pouvez utiliser les chaînes prédéfinies suivantes pour spécifier la période :
Vous pouvez également spécifier "timeRange": { "start": "2018-07-29T00:13:00Z", "end": "2018-08-01T00:18:00Z" } |
Oui |
limit
|
Nombre maximal de lignes pouvant être renvoyées dans le résultat. | Non |
filter
|
Expression booléenne pouvant servir à filtrer les données. Les expressions de filtre peuvent être combinées à l'aide de termes AND/OR et doivent être entièrement placées entre parenthèses pour éviter toute ambiguïté. Pour plus d'informations sur les champs disponibles pour le filtrage, consultez la documentation de référence sur les métriques, les dimensions et les filtres d'Analytics. Pour plus d'informations sur les jetons que vous utilisez pour créer des expressions de filtre, consultez la section Syntaxe des expressions de filtre. | Non |
groupByTimeUnit
|
Unité de temps utilisée pour regrouper l'ensemble de résultats. Les valeurs valides incluent second , minute , hour , day , week ou month .
Si une requête inclut |
Non |
outputFormat
|
Format de sortie. Les valeurs valides incluent csv ou json . La valeur par défaut est json , qui correspond au format JSON délimité par un retour à la ligne.
Remarque : Configurez le délimiteur pour la sortie CSV à l'aide de la propriété |
Non |
csvDelimiter
|
Délimiteur utilisé dans le fichier CSV, si outputFormat est défini sur csv . La valeur par défaut est la virgule (, ). Les caractères de délimitation pris en charge comprennent la virgule (, ), la barre verticale (| ) et la tabulation (\t ).
|
Non |
Syntaxe des expressions de filtre
Cette section de référence décrit les jetons que vous pouvez utiliser pour créer des expressions de filtre dans le corps de la requête. Par exemple, l'expression suivante utilise le jeton "ge" (supérieur ou égal à) :
"filter":"(message_count ge 0)"
Jeton | Description | Exemples |
---|---|---|
in
|
Inclure dans la liste | (apiproxy in 'ethorapi','weather-api') (apiproxy in 'ethorapi') (apiproxy in 'Search','ViewItem') (response_status_code in 400,401,500,501) Remarque : Les chaînes doivent être entre guillemets. |
notin
|
Exclure de la liste | (response_status_code notin 400,401,500,501) |
eq
|
Égal à (==) |
(response_status_code eq 504) (apiproxy eq 'non-prod') |
ne
|
Différent de (!=) |
(response_status_code ne 500) (apiproxy ne 'non-prod') |
gt
|
Supérieur à (>) |
(response_status_code gt 500) |
lt
|
Inférieur à (<) |
(response_status_code lt 500) |
ge
|
Supérieur ou égal à (>=) |
(target_response_code ge 400) |
le
|
Inférieur ou égal à (<=) |
(target_response_code le 300) |
like
|
Renvoie true si le modèle de chaîne correspond au modèle fourni.
L'exemple à droite correspond comme suit : - toute valeur comportant le mot "buy" - toute valeur se terminant par "item" - toute valeur commençant par "Prod" - toute valeur commençant par 4 (notez que response_status_code est numérique)
|
(apiproxy like '%buy%') (apiproxy like '%item') (apiproxy like 'Prod%') |
not like
|
Renvoie false si le modèle de chaîne correspond au modèle fourni. | (apiproxy not like '%buy%') (apiproxy not like '%item') (apiproxy not like 'Prod%') |
and
|
Vous permet d'utiliser "and" pour inclure plus d'une expression de filtre. Le filtre inclut des données qui répondent à toutes les conditions. | (target_response_code gt 399) and (response_status_code ge 400) |
or
|
Vous permet d'utiliser "or" pour évaluer différentes expressions de filtre possibles. Le filtre inclut des données qui répondent à au moins une des conditions. | (response_size ge 1000) or (response_status_code eq 500) |
Contraintes et valeurs par défaut
Vous trouverez ci-dessous la liste des contraintes et des valeurs par défaut pour la fonctionnalité de traitement des requêtes asynchrones.
Contrainte | Par défaut | Description |
---|---|---|
Limite d'appels de requête | Voir la description | Vous pouvez effectuer jusqu'à sept appels par heure à l'API /queries Apigee pour lancer un rapport asynchrone. Si vous dépassez le quota d'appels, l'API renvoie une réponse HTTP 429. |
Limite de requêtes actives | 10 | Vous pouvez avoir jusqu'à 10 requêtes actives par organisation/environnement. |
Seuil de temps d'exécution de la requête | 6 heures | Les requêtes qui durent plus de six heures sont arrêtées. |
Période de la requête | Voir la description | La période maximale autorisée pour une requête est de 365 jours. |
Limite de dimensions et de métriques | 25 | Nombre maximal de dimensions et de métriques que vous pouvez spécifier dans la charge utile de la requête. |
À propos des résultats de la requête
Vous trouverez ci-dessous un exemple de résultat au format JSON. La façon dont vous affichez les résultats dépend de la méthode utilisée pour récupérer les résultats de la requête :
- Si vous avez utilisé la méthode
getResulturl
, vous pouvez afficher les résultats à l'URL indiquée dans le champuri
du résultat. La taille des résultats d'une requête n'est pas limitée avec cette méthode. Si vous avez utilisé la méthode
getResult
, les résultats sont téléchargés dans un fichier ZIP.La méthode
getResult
applique une limite de taille de 32 Mo aux résultats d'une requête. Si les résultats dépassent 32 Mo, la requête renvoie un code d'état 400 avec le message "le résultat de la requête dépasse 32 Mo". Pour éviter cette limite, utilisez la méthodegetReulturl
comme décrit dans la section Récupérer les résultats de la requête.
Les résultats comprennent des lignes JSON séparées par un nouveau délimiteur de ligne, comme illustré dans l'exemple suivant :
{"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"}
…
Vous pouvez extraire les résultats de l'URL jusqu'à l'expiration des données dans le dépôt. Consultez la section Contraintes et valeurs par défaut.
Exemples
Exemple 1 : Somme des messages
Requête portant sur la somme des messages au cours des 60 dernières minutes.
Query
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @last60minutes.json
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Corps de la requête de last60minutes.json
{
"metrics":[
{
"name":"message_count",
"function":"sum"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":"last60minutes"
}
Exemple 2 : Période personnalisée
Requête utilisant une période personnalisée.
Query
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @custom-timerange.json
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Corps de la requête de custom-timerange.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"
}
}
Exemple 3 : Transactions par minute
Requête sur la métrique pour les transactions par minute (tpm).
Query
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @tpm.json
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Corps de la requête 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"
}
}
Exemple de résultat
Extrait du fichier de résultats :
{"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"} ...
Exemple 4 : Utiliser une expression de filtre
Requête avec une expression de filtre utilisant un opérateur booléen.
Query
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @filterCombo.json
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Corps de la requête 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"
}
}
Exemple 5 : Transmettre une expression dans le paramètre "metrics"
Requête avec une expression transmise dans le cadre du paramètre "metrics". Vous ne pouvez utiliser que des expressions simples à un opérateur.
Query
curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/queries" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @metricsExpression.json
Où $TOKEN
est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl
utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.
Corps de la requête de metricsExpression.json
{
"metrics":[
{
"name":"message_count",
"function":"sum",
"operator":"/",
"value":"7"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":10,
"timeRange":"last60minutes"
}