Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Edge Analytics fornisce un ricco insieme di dashboard interattive, generatori di report personalizzati e funzionalità correlate. Tuttavia, queste funzionalità sono pensate per essere interattive: invii una richiesta API o UI e la richiesta viene bloccata finché il server di analisi non fornisce una risposta.
Tuttavia, le richieste di analisi possono scadere se richiedono troppo tempo per essere completate. Se una richiesta di query deve elaborare una grande quantità di dati (ad esempio centinaia di GB), potrebbe non riuscire a causa di un timeout.
L'elaborazione di query asincrone ti consente di eseguire query su set di dati molto grandi e recuperare i risultati in un secondo momento. Potresti prendere in considerazione l'utilizzo di una query offline quando noti che le query interattive vanno in timeout. Alcune situazioni in cui l'elaborazione della query asincrona potrebbe essere una buona alternativa includono:
- Analisi e creazione di report che coprono intervalli di tempo ampi.
- Analisi dei dati con una serie di dimensioni di raggruppamento e altri vincoli che aumentano la complessità della query.
- Gestire le query quando noti che i volumi di dati sono aumentati in modo significativo per alcuni utenti o organizzazioni.
Questo documento descrive come avviare query asincrone utilizzando l'API. Puoi anche utilizzare l'interfaccia utente, come descritto in Esecuzione di un report personalizzato.
Confronto tra l'API Reports e l'interfaccia utente
Creare e gestire i report personalizzati descrive come utilizzare l'interfaccia utente Edge per creare ed eseguire report personalizzati. Puoi eseguire questi report in modo sincrono o asincrono.
La maggior parte dei concetti per la generazione di report personalizzati con l'interfaccia utente si applica all'utilizzo dell'API. ovvero, quando crei report personalizzati con l'API, specifichi metriche, dimensioni e filtri integrati in Edge e tutte le metriche personalizzate che hai creato utilizzando il criterio StatisticsCollector.
Le principali differenze tra i report generati nella UI e nell'API sono che i report generati con l'API vengono scritti in file CSV o JSON (delimitati da newline) anziché in un report visivo visualizzato nella UI.
Limiti in Apigee hybrid
Apigee hybrid impone un limite di dimensioni di 30 MB per il set di dati dei risultati.
Come eseguire una query di analisi asincrona
Esegui query di analisi asincrone in tre passaggi:
Passaggio 1. Invia la query
Devi inviare una richiesta POST all'API /queries. Questa API indica a Edge di elaborare la richiesta in background. Se l'invio della query va a buon fine, l'API restituisce lo stato 201 e un ID che utilizzerai per fare riferimento alla query nei passaggi successivi.
Ad esempio:
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
Il corpo della richiesta è una descrizione JSON della query. Nel corpo JSON, specifica le metriche, le dimensioni e i filtri che definiscono il report.
Di seguito è riportato un esempio di file json-query-file:
{
"metrics": [
{
"name": "message_count",
"function": "sum",
"alias": "sum_txn"
}
],
"dimensions": ["apiproxy"],
"timeRange": "last24hours",
"limit": 14400,
"filter":"(message_count ge 0)"
}
Per una descrizione completa della sintassi del corpo della richiesta, consulta la sezione Informazioni sul corpo della richiesta di seguito.
Esempio di risposta:
Tieni presente che l'ID query 9cfc0d85-0f30-46d6-ae6f-318d0cb961bd è incluso nella risposta. Oltre allo stato HTTP 201, il valore state di enqueued indica che la richiesta è andata a buon fine.
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",
}
Passaggio 2. Ottenere lo stato della query
Effettua una chiamata GET per richiedere lo stato della query. Fornisci l'ID query restituito dalla chiamata POST. Ad esempio:
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
Esempi di risposte:
Se la query è ancora in corso, riceverai una risposta come questa, in cui 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"
}
Una volta completata correttamente la query, vedrai una risposta come questa, in cui state è impostato su 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"
}
Passaggio 3. Recuperare i risultati della query
Una volta che lo stato della query è completed, puoi utilizzare l'API get results
per recuperare i risultati, dove l'ID query è di nuovo 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
Per recuperare il file scaricato, devi configurare lo strumento che utilizzi in modo che salvi un file scaricato nel tuo sistema. Ad esempio:
Se utilizzi cURL, puoi utilizzare le opzioni
-O -J, come mostrato sopra.Se utilizzi Postman, devi selezionare il pulsante Salva e scarica. In questo caso, viene scaricato un file ZIP denominato
response.Se utilizzi il browser Chrome, il download viene accettato automaticamente.
Se la richiesta ha esito positivo e il set di risultati non è zero, il risultato viene scaricato sul client come file JSON compresso (delimitato da nuova riga). Il nome del file scaricato sarà:
OfflineQueryResult-<query-id>.zip
Ad esempio:
OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
Il file ZIP contiene un file di archivio .gz dei risultati JSON. Per accedere al file JSON, decomprimi il file scaricato, quindi utilizza il comando gzip per estrarre il file JSON:
unzip OfflineQueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd.zip
gzip -d QueryResult-9cfc0d85-0f30-46d6-ae6f-318d0cb961bd-000000000000.json.gzInformazioni sul corpo della richiesta
Questa sezione descrive ciascuno dei parametri che puoi utilizzare nel corpo della richiesta JSON per una query. Per informazioni dettagliate sulle metriche e sulle dimensioni che puoi utilizzare nella query, consulta la documentazione di riferimento di 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" }
| Proprietà | Descrizione | Obbligatorio? |
|---|---|---|
metrics
|
Array di metriche. Puoi specificare una o più metriche per una query in cui ogni metrica include. È richiesto solo il nome della metrica:
Le proprietà "metrics":[
{
"name":"response_processing_latency",
"function":"avg",
"alias":"average_response_time_in_seconds",
"operator":"/",
"value":"1000"
}
]Per ulteriori informazioni, consulta Riferimento per metriche, dimensioni e filtri di analisi. |
No |
dimensions
|
Matrice di dimensioni per raggruppare le metriche. Per saperne di più, consulta l'elenco delle dimensioni supportate. Puoi specificare più dimensioni. | No |
timeRange
|
Intervallo di tempo per la query.
Puoi utilizzare le seguenti stringhe predefinite per specificare l'intervallo di tempo:
In alternativa, puoi specificare "timeRange": {
"start": "2018-07-29T00:13:00Z",
"end": "2018-08-01T00:18:00Z"
} |
Sì |
limit
|
Il numero massimo di righe che possono essere restituite nel risultato. | No |
filter
|
Espressione booleana che può essere utilizzata per filtrare i dati. Le espressioni di filtro possono essere combinate utilizzando i termini AND/OR e devono essere completamente racchiuse tra parentesi per evitare ambiguità. Per saperne di più sui campi disponibili per il filtro, consulta Riferimento per metriche, dimensioni e filtri di Analytics. Per saperne di più sui token che utilizzi per creare espressioni di filtro, consulta Sintassi delle espressioni di filtro. | No |
groupByTimeUnit
|
Unità di tempo utilizzata per raggruppare il set di risultati. I valori validi includono: second, minute, hour, day, week o month.
Se una query include |
No |
outputFormat
|
Formato di output. I valori validi includono: csv o json. Il valore predefinito è json
corrispondente a JSON delimitato da nuova riga.
Nota: configura il delimitatore per l'output CSV utilizzando la proprietà |
No |
csvDelimiter
|
Delimitatore utilizzato nel file CSV, se outputFormat è impostato su csv. Il valore predefinito è il carattere , (virgola). I caratteri delimitatori supportati includono virgola (,), barra verticale (|) e tabulazione (\t).
|
No |
Sintassi delle espressioni di filtro
Questa sezione di riferimento descrive i token che puoi utilizzare per creare espressioni di filtro nel corpo della richiesta. Ad esempio, la seguente espressione utilizza il token "ge" (maggiore o uguale a):
"filter":"(message_count ge 0)"
| Token | Descrizione | Esempi |
|---|---|---|
in
|
Includi nell'elenco | (apiproxy in 'ethorapi','weather-api') (apiproxy in 'ethorapi') (apiproxy in 'Search','ViewItem') (response_status_code in 400,401,500,501) Nota: le stringhe devono essere racchiuse tra virgolette. |
notin
|
Escludi dall'elenco | (response_status_code notin 400,401,500,501) |
eq
|
Uguale a (==)
|
(response_status_code eq 504) (apiproxy eq 'non-prod') |
ne
|
Non uguali a (!=)
|
(response_status_code ne 500) (apiproxy ne 'non-prod') |
gt
|
Maggiore di (>)
|
(response_status_code gt 500) |
lt
|
Meno di (<)
|
(response_status_code lt 500) |
ge
|
Maggiore o uguale a (>=)
|
(target_response_code ge 400) |
le
|
Minore o uguale a (<=)
|
(target_response_code le 300) |
like
|
Restituisce true se il pattern della stringa corrisponde al pattern fornito.
L'esempio a destra corrisponde come segue: - qualsiasi valore che contenga la parola "acquista" - qualsiasi valore che termina con "item" - qualsiasi valore che inizia con "Prod" - qualsiasi valore che inizia con 4, tieni presente che response_status_code è numerico
|
(apiproxy like '%buy%') (apiproxy like '%item') (apiproxy like 'Prod%') |
not like
|
Restituisce false se il pattern della stringa corrisponde al pattern fornito. | (apiproxy not like '%buy%') (apiproxy not like '%item') (apiproxy not like 'Prod%') |
and
|
Consente di utilizzare la logica "e" per includere più di un'espressione di filtro. Il filtro include i dati che soddisfano tutte le condizioni. | (target_response_code gt 399) and (response_status_code ge 400) |
or
|
Consente di utilizzare la logica "OR" per valutare diverse espressioni di filtro possibili. Il filtro include i dati che soddisfano almeno una delle condizioni. | (response_size ge 1000) or (response_status_code eq 500) |
Vincoli e valori predefiniti
Di seguito è riportato un elenco di vincoli e valori predefiniti per la funzionalità di elaborazione delle query asincrone.
| Vincolo | Predefinito | Descrizione |
|---|---|---|
| Limite di chiamate alle query | Vedi descrizione | Puoi effettuare fino a sette chiamate all'ora all'API di gestione /queries per avviare un report asincrono. Se superi la quota di chiamate, l'API restituisce una risposta HTTP 429. |
| Limite query attive | 10 | Puoi avere fino a 10 query attive per un'organizzazione/un ambiente. |
| Soglia del tempo di esecuzione della query | 6 ore | Le query che richiedono più di 6 ore verranno terminate. |
| Intervallo di tempo della query | Vedi descrizione | L'intervallo di tempo massimo consentito per una query è 365 giorni. |
| Limite di dimensioni e metriche | 25 | Il numero massimo di dimensioni e metriche che puoi specificare nel payload della query. |
Informazioni sui risultati della query
Di seguito è riportato un risultato di esempio in formato JSON. L'output è costituito da righe JSON separate da un delimitatore di nuova riga:
{"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"}
…
Puoi recuperare i risultati dall'URL fino alla scadenza dei dati nel repository. Consulta Vincoli e valori predefiniti.
Esempi
Esempio 1: somma dei conteggi dei messaggi
Query per la somma dei conteggi dei messaggi negli ultimi 60 minuti.
Query
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
Corpo della richiesta da last60minutes.json
{
"metrics":[
{
"name":"message_count",
"function":"sum"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":"last60minutes"
}
Esempio 2: intervallo di tempo personalizzato
Esegui query utilizzando un intervallo di tempo personalizzato.
Query
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
Corpo della richiesta da 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"
}
}
Esempio 3: transazioni al minuto
Esegui una query sulla metrica per le transazioni al minuto (tpm).
Query
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
Corpo della richiesta da tpm.json
{
"metrics":[
{
"name":"tpm"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":1000,
"timeRange":{
"start":"2018-07-01T11:00:00Z",
"end":"2018-07-30T11:00:00Z"
}
}
Risultato di esempio
Estratto dal file dei risultati:
{"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"}
...Esempio 4: utilizzo di un'espressione di filtro
Query con un'espressione di filtro che utilizza un operatore booleano.
Query
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
Corpo della richiesta da 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"
}
}
Esempio 5: trasmettere l'espressione nel parametro delle metriche
Query con un'espressione passata come parte del parametro metrics. Puoi utilizzare solo espressioni semplici con un solo operatore.
Query
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
Corpo della richiesta da metricsExpression.json
{
"metrics":[
{
"name":"message_count",
"function":"sum",
"operator":"/",
"value":"7"
}
],
"dimensions":[
"apiproxy"
],
"groupByTimeUnit":"minute",
"limit":10,
"timeRange":"last60minutes"
}
Come eseguire una query asincrona per un report sulla monetizzazione
Puoi acquisire tutte le transazioni di monetizzazione andate a buon fine in un determinato intervallo di tempo per un insieme specifico di criteri seguendo i passaggi descritti in questa sezione.
Come per le query asincrone di Analytics, le query asincrone dei report sulla monetizzazione vengono eseguite in tre passaggi: (1) invia la query, (2) ottieni lo stato della query e (3) recupera i risultati della query.
Il passaggio 1, l'invio della query, è descritto di seguito.
I passaggi 2 e 3 sono esattamente gli stessi delle query di analisi asincrone. Per saperne di più, consulta Come eseguire una query di analisi asincrona.
Per inviare una query per un report sulla monetizzazione asincrono, invia una richiesta POST a /mint/organizations/org_id/async-reports.
Se vuoi, puoi specificare l'ambiente passando il parametro di query environment. Se non specificato, il valore predefinito del parametro di query è prod. Ad esempio:
/mint/organizations/org_id/async-reports?environment=prod
Nel corpo della richiesta, specifica i seguenti criteri di ricerca.
| Nome | Descrizione | Predefinita | Obbligatorio? |
appCriteria |
ID e organizzazione di un'applicazione specifica da includere nel report. Se questa proprietà non è specificata, tutte le applicazioni vengono incluse nel report. | N/D | No |
billingMonth |
Mese di fatturazione per il report, ad esempio LUGLIO. | N/D | Sì |
billingYear |
Anno di fatturazione per il report, ad esempio 2015. | N/D | Sì |
currencyOption |
Valuta per il report. I valori validi includono:
Se selezioni EUR, GBP o USD, il report mostra tutte le transazioni che utilizzano una sola valuta, in base al tasso di cambio in vigore alla data della transazione. |
N/D | No |
devCriteria
|
ID sviluppatore o indirizzo email e nome dell'organizzazione di uno sviluppatore specifico da includere nel report. Se questa proprietà non viene specificata, nel report vengono inclusi tutti gli sviluppatori. Ad esempio: "devCriteria":[{
"id":"RtHAeZ6LtkSbEH56",
"orgId":"my_org"}
] |
N/D | No |
fromDate
|
Data di inizio del report in UTC. | N/D | Sì |
monetizationPakageIds |
ID di uno o più pacchetti API da includere nel report. Se questa proprietà non viene specificata, nel report vengono inclusi tutti i pacchetti API. | N/D | No |
productIds
|
ID di uno o più prodotti API da includere nel report. Se questa proprietà non è specificata, nel report vengono inclusi tutti i prodotti API. | N/D | No |
ratePlanLevels |
Tipo di piano tariffario da includere nel report. I valori validi includono:
Se questa proprietà non è specificata, nel report sono inclusi sia i piani tariffari standard sia quelli specifici per gli sviluppatori. |
N/D | No |
toDate
|
Data di fine del report in UTC. | N/D | Sì |
Ad esempio, la seguente richiesta genera un report sulla monetizzazione asincrono per il mese di giugno 2017 per l'ID sviluppatore e il prodotto API specificati. Le date e gli orari dei report fromDate e toDate sono in UTC/GMT e possono includere orari.
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