Impostare GraphQL

GraphQL è un linguaggio di interrogazione per le API. È possibile eseguire query su un singolo /graphql punto finale. GraphiQL utilizza un sistema di introspezione integrato per rendere disponibili le informazioni tramite lo schema.

GraphQL L'endpoint dell'API di analisi è disponibile solo per i piani di livello Enterprise.

Prerequisiti

Per poter procedere, è necessario disporre delle seguenti autorizzazioni:

  • È necessario disporre dell'autorizzazione di Visualizzatore a livello di istanza o di zona.
  • È necessario disporre dell'autorizzazione di Lettore a livello di zona.

GraphiQL attrezzo

Utilizzando GraphiQL, puoi esplorare lo schema e testare le query per GraphQL punto finale.

  1. Scarica e installa GraphiQL.
  2. Apri l'applicazione " GraphiQL " e inserisci le intestazioni " HTTP " che desideri autorizzare.
  3. Inserisci l'endpoint corretto nel file GraphQl Punto finale campo. Utilizzo https://api.cis.cloud.ibm.com/v1/<crn>/zones/<zoneid>/graphql.

La finestra è divisa in un riquadro delle query e un riquadro delle risposte. È possibile definire le variabili di query, che vengono interpolate nella query nel riquadro delle query.

Per creare una query, attenersi alla seguente procedura.

  1. Selezionare POST dal Metodo menù elenco.
  2. Fare clic su Modifica intestazioni HTTP.
  3. Inserisci il X-Auth-User-Token o Token di autorizzazione e imposta il tipo di contenuto:application/json. Assicurati di salvarli.

Inizia a creare la tua query nel riquadro delle query. Usa il Esplora documenti per esplorare lo schema e la documentazione. Document Explorer mostra le diverse opzioni disponibili per set di dati, dimensioni, operazioni e funzioni. Le parole "zona" e "dominio" sono sinonimi in Document Explorer.

Incolla il seguente snippet di test nel riquadro delle query e osserva la risposta nel riquadro delle risposte, modificando il file datetime per soddisfare le tue esigenze

query {
   viewer {
      zones(filter: {zoneTag: "<your domain ID>"}) {
         httpRequests1hGroups(limit: 5, filter: { datetime_gt: "2020-08-30T04:00:00Z", datetime_lt: "2020-08-31T06:00:00Z"}) {
            sum {
              countryMap {
                bytes
                clientCountryName
              }
            }
            dimensions {
              date
              datetime
             }
          }
         firewallEventsAdaptiveGroups(limit: 10, filter: { datetime_gt: "2020-08-30T04:00:00Z", datetime_lt: "2020-08-31T06:00:00Z"}) {
               count
               dimensions {
                  clientCountryName
                  clientAsn
                  datetimeHour
               }
             }
          }
       }
     }

Nozioni di base sulle query

GraphQL struttura i dati come un grafico. Per ottenere i dati di cui hai bisogno, puoi esplorare i bordi del grafico. Questo è un esempio di formato di query:

viewer {
      zones(filter:...) {
         requests(filter:...) {
           date, time, bytes,...
         }
      }
}

Il nodo iniziale dell'utente che esegue la query è viewer. Un visualizzatore è in grado di accedere a uno o più domini (zone). Ogni zona contiene set di dati diversi, ad esempio eventi firewall per una zona.

I nodi che rappresentano i dati aggregati includono groups suffisso, ad esempio,firewallEventsAdaptiveGroups. Ogni gruppo segue una struttura specifica, mostrata nell'esempio seguente.

type ExampleGroup {
    count # No subfields, it is just the group size.
    sum {
        # fields that support summing (numbers, maps of numbers)
    }
    avg {
        # fields that support averaging (numbers)
    }
    uniq {
        # fields that support uniqueing (numbers, strings, enums, IPs, dates, etc.)
    }
}

Questo esempio mostra un gruppo valido:

  httpRequests1mGroups {
    sum {
      bytes
    }
    uniq {
      uniques # unique IPs
    }
    dimensions {
      datetimeMinute
    }
  }

Dataset

Di seguito è riportato un elenco di set di dati comunemente utilizzati e disponibili. Per ulteriori informazioni sugli insiemi di dati, è possibile utilizzare il meccanismo di introspezioneGraphQL.

Insiemi di dati GraphQL comunemente utilizzati
Dataset Node
Approfondimenti sul browser browserInsightsAdaptiveGroups
Registro attività del firewall firewallEventsAdaptive firewallEventsAdaptiveByTimeGroups
Analisi del firewall firewallEventsAdaptiveGroups
Analisi del controllo dello stato healthCheckEvents healthCheckEventsGroups
Richieste HTTP httpRequests1mGroups httpRequests1hGroups httpRequests1dGroups httpRequestsAdaptiveGroups
Analisi del ridimensionamento delle immagini imageResizingRequests1mGroups
Analisi del bilanciamento del carico loadBalancingRequests loadBalancingRequestsGroups
Attacchi SYN (DoS Analitica) synAvgPps1mGroups
Metriche delle funzioni Edge workersInvocationsAdaptive

Errori

L'API Analytics di GraphQL è un'API RESTful basata su richieste HTTPS e risposte JSON e restituisce codici di stato HTTP familiari (ad esempio, 404, 500, 504). In conformità con la specifica GraphQL, una risposta 200 può contenere un errore, in contrasto con il comune approccio REST.

Tutte le risposte contengono una matrice di errori, che è nulla se non sono presenti errori. Contengono errori non nulli message,path, E timestamp.

Il codice seguente è un esempio di risposta di errore:

{
  "data": null,
  "errors": [
    {
      "message": "cannot request data older than 2678400s",
      "path": [
        "viewer",
        "zones",
        "0",
        "firewallEventsAdaptiveGroups"
      ],
      "extensions": {
        "timestamp": "2019-12-09T21:27:19.195060142Z"
      }
    }
  ]
}

Limiti

I limiti per la conservazione dei dati storici sono definiti nella tabella seguente.

Limiti dei dati storici
Nodo dati Enterprise
browserInsightsAdaptiveGroups 30 giorni
firewallEventsAdaptiveByTimeGroups 30 giorni
firewallEventsAdaptiveGroups 30 giorni
healthCheckEventsGroups 90 giorni
healthCheckEvents 90 giorni
httpRequestsAdaptiveGroups 30 giorni
httpRequests1dGroups 365 giorni
httpRequests1hGroups 90 giorni
httpRequests1mGroups 7 giorni
loadBalancingRequestsGroups 30 giorni
loadBalancingRequests 30 giorni
synAvgPps1mGroups 7 giorni

Impostazioni delle query per i limiti dell'account

Per ottenere informazioni specifiche sui limiti per un nodo dati, utilizzare il file settings nodo.

Campi del nodo Impostazioni
Campo Descrizione
enabled ritorna true se il set di dati (nodo) è disponibile per il piano corrente.
maxDuration Definisce il periodo di tempo massimo (in secondi) che può essere richiesto in una query (varia in base al nodo dati).
maxNumberOfFields Definisce il numero massimo di campi che possono essere richiesti in una query (varia in base al nodo dati).
maxPageSize Definisce il numero massimo di record che possono essere restituiti in una query (varia in base al nodo dati).
notOlderThan Limita la distanza percorsa nel record in cui una query può eseguire la ricerca (in secondi, varia in base al nodo dati e al piano).

Di seguito è riportata una query di esempio:

{
  viewer {
    zones(filter: { zoneTag: $zoneTag }) {
      settings {
        browserInsightsAdaptiveGroups {
          maxDuration
          maxNumberOfFields
          maxPageSize
          enabled
          notOlderThan
        }
      }
    }
  }
}

Segue la risposta alla domanda:

{
  "data": {
    "viewer": {
      "zones": [
        {
          "settings": {
            "browserInsightsAdaptiveGroups": {
              "enabled": true,
              "maxDuration": 2592000,
              "maxNumberOfFields": 30,
              "maxPageSize": 10000,
              "notOlderThan": 2595600
            }
          }
        }
      ]
    }
  },
  "errors": null
}

Limiti delle query

Il volume di dati che una query può restituire è limitato e sono previsti limiti utente sul volume di dati giornaliero. I seguenti limiti si applicano in aggiunta ai limiti tariffari generali applicati dall'API:

  • Una query con ambito zona può includere fino a 10 zone.
  • Le query possono richiedere fino a 30 campi come indicato da maxNumberOfFields In settings.
  • Le risposte possono restituire fino a 10.000 record. Questo limite è indicato da maxPageSize In settings.

Le query devono specificare esplicitamente il numero massimo di record da restituire utilizzando l'argomento limit .

Ordinamento

È possibile ordinare l'ordine degli elementi dei risultati della query utilizzando il comando orderBy discussione. Per impostazione predefinita, i risultati vengono ordinati in base alla chiave primaria del set di dati (tabella). Se specifichi un altro campo in base al quale eseguire l'ordinamento, la chiave primaria viene inclusa nella chiave di ordinamento per mantenere risultati coerenti per l'impaginazione.

L'ordinamento all'interno di strutture nidificate non è supportato.

Esempi di ordinamento

Ordinamento dei dati grezzi:

firewallEventsAdaptive (orderBy: [clientCountryName_ASC]) {
    clientCountryName
}

Ordinamento dei dati grezzi utilizzando più campi:

firewallEventsAdaptive (orderBy: [clientCountryName_ASC, datetime_DESC]) {
    clientCountryName
    datetime
}

Ordinamento dei gruppi per funzione di aggregazione:

httpRequests1hGroups (orderBy: [sum_bytes_DESC]){
    sum {
        bytes
        requests
    }
    dimensions {
        datetime
    }
}

Paginazione

L'impaginazione, ovvero la suddivisione dei risultati della query in parti più piccole, può essere eseguita utilizzando limit,orderBy e parametri di filtraggio. IL GraphQL L'API Analytics non supporta i cursori per l'impaginazione.

  • limit(intero) definisce quanti record restituire.
  • orderBy(stringa) definisce l'ordinamento dei dati.

Interroga le pagine senza cursori

Gli esempi seguenti presuppongono questo date E clientCountryName le relazioni sono uniche.

Prendi il primo N risultati di una query.

Per limitare i risultati, aggiungi il file limit parametro. Ad esempio, interroga i primi due record.

firewallEventsAdaptive (limit: 2, orderBy: [datetime_ASC, clientCountryName_ASC]) {
    datetime
    clientCountryName
}

Specificare un ordinamento per data restituisce risultati meno specifici rispetto a specificare un ordinamento sia per data che per paese.

Segue la risposta alla domanda:

{
  "firewallEventsAdaptive" : [
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UM"
    },
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "US"
    }
  ]
}

Richiedi la pagina successiva utilizzando il filtro

Per ottenere il prossimo N risultati, specificare un filtro per escludere l'ultimo risultato dalla query precedente. Utilizzando l'esempio precedente, è possibile aggiungere l'operatore maggiore di (_gt ) al clientCountryName campo e l'operatore maggiore o uguale al datetime campo. Effettuando un ordine specifico, puoi ottenere i risultati più completi.

firewallEventsAdaptive (limit: 2, orderBy: [datetime_ASC, clientCountryName_ASC], filter: {date_geq: "2018-11-12T00:00:00Z", clientCounterName_gt: "US"}) {
    date
    clientCountryName
}

Segue la risposta alla domanda:

{
  "firewallEventsAdaptive" : [
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UY"
    },
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UZ"
    }
  ]
}

Interroga la pagina precedente

Per ottenere il precedente N risultati, invertire i filtri e ordinare.

firewallEventsAdaptive (limit: 2, orderBy: [datetime_DESC, clientCountryName_DESC, filter: {date_leq: "2018-11-12T00:00:00Z", clientCountryName_lt: "UY"}]) {
  datetime
  clientCountryName
}

Segue la risposta alla domanda:

{
  "firewallEventsAdaptive" : [
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "US"
    },
    {
      "datetime": "2018-11-12T00:00:00Z",
      "clientCountryName": "UM"
    }
  ]
}

Filtro

I filtri vincolano le query a un particolare account o insieme di zone (domini), richieste per data o un agente di query specifico. Senza filtri, le prestazioni potrebbero peggiorare e i risultati potrebbero includere dati non importanti.

Struttura

IL GraphQL il filtro è rappresentato da GraphQL Oggetto di input.

I filtri possono essere utilizzati come argomento nelle seguenti risorse:

  • Zone (Domini)
  • Tabelle (set di dati)
  • Account

Filtro di zona (dominio).

Il filtro di zona consente di interrogare i dati relativi alla zona in base all'ID della zona (dominio) (zoneTag ).

zones(filter: {zoneTag: "your domain (zone) ID"}) {
    ...
}

Il filtro di zona deve essere conforme alla seguente grammatica:

filter
    { zoneTag: t }
    { zoneTag_gt: t }
    { zoneTag_in: [t, ...] }

Filtri composti (separati da virgole,AND,OR ) non sono supportati. Le zone vengono sempre ordinate alfanumericamente.

Filtro tabella (set di dati).

I filtri di tabella richiedono l'esecuzione di una query su almeno un nodo. IL AND L'operatore può essere utilizzato per creare e combinare filtri multinodo.

Filtro account

Il filtro a livello di account è supportato ed è presente un parametro di filtro obbligatorio. Ad esempio:

accounts(filter: {accountTag: $accountTag}) {
    ...
}

Operatori

Il supporto dell'operatore varia a seconda del tipo e del nome del nodo. Per tutti i tipi sono supportati i seguenti operatori:

Operatori supportati
Operatore Confronto
gt maggiore di
lt minore di
geq maggiore o uguale a
leq inferiore o uguale a
neq non uguale
in in

Esempi

Esempio generale:

{
  myQuery(
    filter: {
      clientCountry: "UK" # all objects having client country equal to "UK"
      datetime_gt: "2020-01-01 10:00:00" # all object having datetime greater than "2020-01-01 10:00:00"
    }
  )
}

Filtra un nodo specifico:

httpRequests1hGroups(filter: {datetime: "2020-01-01 10:00:00"}) {
    ...
}

Filtra su più campi:

httpRequests1hGroups(filter: {datetime_gt: "2018-01-01 10:00:00", datetime_lt: "2018-01-01 11:00:00"}) {
    ...
}

Filtra utilizzando OR operatore:

httpRequests1hGroups(filter: {
    datetime: "2020-01-01 10:00:00",
    OR:[{clientCountryName: "US"}, {clientCountryName: "UK"}]) {
    ...
}