Costrutti nell'API

Questo documento introduce le strutture utilizzate per rappresentare i servizi e gli SLO nell'API SLO e li mappa ai concetti descritti in generale nella sezione Concetti nel monitoraggio dei servizi.

L'API SLO viene utilizzata per configurare gli obiettivi del livello di servizio (SLO) che possono essere utilizzati per monitorare l'integrità dei servizi.

Service Monitoring aggiunge le seguenti risorse all'API Monitoring:

Per informazioni sulla chiamata all'API, consulta l'articolo Utilizzo dell'API.

Servizi

Un servizio è rappresentato da un oggetto Service. Questo oggetto include i seguenti campi:

  • Un nome: un nome di risorsa completo per questo servizio
  • Un nome visualizzato: un'etichetta da utilizzare nei componenti della console
  • Una struttura per il tipo di servizio. I tipi di servizi supportati includono:
    • Un servizio App Engine
    • Un servizio Istio su Google Kubernetes Engine
    • Diversi servizi GKE
    • Un servizio Cloud Run
    • Un servizio personalizzato
  • Un oggetto di configurazione della telemetria, per alcuni servizi rilevati automaticamente

Gli unici tipi di servizio che utilizzi esplicitamente per creare l'API sono i servizi identificati dall'utente o personalizzati. Questi servizi corrispondono a uno dei seguenti costrutti incorporati:

Di seguito è riportata la rappresentazione JSON di un servizio Cloud Run identificato dall'utente:

{
  "name": "projects/PROJECT_NUMBER/services/B7LOmd7YQtGY_Hao8UoLDA",
  "displayName": "test-cloudrun-service",
  "cloudRun": {
    "serviceName": "test-cloudrun-service",
    "location": "us-central1"
  }
}

I servizi Anthos Service Mesh, Istio on Google Kubernetes Engine e App Engine vengono creati automaticamente in base all'ambiente. Non puoi crearli manualmente. Ad esempio, quanto segue mostra la rappresentazione JSON di un servizio Istio:

{
  "name": "projects/Google Cloud project/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice",
  "displayName": "PROJECT_ID/us-central1-c/csm-main/default/currencyservice",
  "clusterIstio": {
    "location": "us-central1-c",
    "clusterName": "csm-main",
    "serviceNamespace": "default",
    "serviceName": "currencyservice"
  },
  "telemetry": {
    "resourceName": "//container.googleapis.com/projects/PROJECT_ID/zones/us-central1-c/clusters/csm-main/k8s/namespaces/default/services/currencyservice"
  }
}

Indicatori del livello del servizio

Un indicatore del livello del servizio (SLI) fornisce una misurazione delle prestazioni di un servizio. Uno SLI si basa sulla metrica acquisita dal servizio. Il modo esatto in cui viene definito lo SLI dipende dal tipo di metrica utilizzata come metrica, ma in genere è un confronto tra risultati accettabili e risultati totali.

Lo SLI è rappresentato dall'oggetto ServiceLevelIndicator. Questo oggetto rappresenta un modo collettivo per fare riferimento ai tre tipi supportati di SLI:

  • Uno SLI di base, creato automaticamente per un tipo di servizio noto. Questo tipo di SLI è descritto in Obiettivi del livello di servizio; è rappresentato da un oggetto BasicSli e misura la disponibilità o la latenza.

  • Uno SLI basato su richiesta, che puoi utilizzare per conteggiare gli eventi che rappresentano un servizio accettabile. L'utilizzo di questo tipo di SLI è descritto in SLO basati su richiesta ed è rappresentato da un oggetto RequestBasedSli.

  • Uno SLI basato su finestre, che puoi utilizzare per conteggiare periodi di tempo che soddisfano alcuni criteri di idoneità. L'utilizzo di questo tipo di SLI è descritto negli SLO basati su Windows; è rappresentato da un oggetto WindowsBasedSli.

Ad esempio, quanto segue mostra uno SLI di disponibilità di base:

{
  "basicSli": {
    "availability": {},
    "location": [
      "us-central1-c"
    ]
  }
}

Strutture per gli SLI basati su richiesta

Uno SLI basato su richiesta si basa su una metrica che conteggia le unità di servizio come rapporto tra un determinato risultato e il totale. Ad esempio, se utilizzi una metrica che conteggia le richieste, puoi creare il rapporto tra il numero di richieste che restituiscono una risposta riuscita e il numero totale di richieste.

Esistono due modi per creare uno SLI basato su richiesta:

  • Come TimeSeriesRatio, quando il rapporto tra buon servizio e servizio totale viene calcolato da due serie temporali i cui valori hanno un tipo di metrica DELTA o CUMULATIVE.
  • Come DistributionCut, quando la serie temporale ha il tipo di valore DISTRIBUTION e i cui valori hanno un tipo di metrica DELTA o CUMULATIVE. Il valore di servizio valido è il numero di elementi che rientrano nei bucket a istogrammi in un intervallo specificato e il totale è il conteggio di tutti i valori nella distribuzione.

Di seguito è riportata la rappresentazione JSON di uno SLI che utilizza un rapporto serie temporale:

{
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count"",
      "goodServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count" metric.label.response_code_class=200",
    }
  }
}

Le serie temporali in questo rapporto sono identificate dalla coppia di tipo di risorsa monitorata e tipo di metrica:

  • Risorsa: https_lb_rule
  • Tipo di metrica: loadbalancing.googleapis.com/https/request_count

Il valore di totalServiceFilter è rappresentato dalla coppia di metriche e tipo di risorsa. Il valore dell'etichetta goodServiceFilter è rappresentato dalla stessa coppia, ma alcune etichette hanno un determinato valore; in questo caso, quando l'etichetta response_code_class è 200.

Il rapporto tra i filtri misura il numero di richieste che restituiscono uno stato HTTP 2xx rispetto al numero totale di richieste.

Di seguito è riportata la rappresentazione JSON di uno SLI che utilizza un taglio di distribuzione:

{
  "requestBased": {
    "distribution_cut": {
      "distribution_filter": "resource.type=https_lb_rule  metric.type="loadbalancing.googleapis.com/https/backend_latencies" metric.label.response_code_class=200",
      "range": {
        "min": "-Infinity",
        "max": 500.0
      }
    }
  }
}

Le serie temporali sono identificate dal tipo di risorsa monitorata, dal tipo di metrica e dal valore per un'etichetta di metrica:

  • Risorsa: https_lb_rule
  • Tipo di metrica: loadbalancing.googleapis.com/https/backend_latencies
  • Coppia valore-etichetta: response_code_class = 200

L'intervallo di latenze considerate buone è indicato dal campo range. Questo SLI calcola il rapporto tra le latenze di risposte di classe 2xx inferiori a 500 e le latenze di tutte le risposte di classe 200.

Strutture per gli SLI basati su finestre

Uno SLI basato su finestre conteggia le finestre temporali in cui il servizio fornito è considerato valido. Il criterio per determinare la qualità del servizio come parte della definizione SLI.

Tutti gli SLI basati su finestre includono un periodo di finestra, 60-86.400 secondi (1 giorno).

Esistono due modi per specificare il criterio di servizio valido per uno SLI basato su Windows:

  • Crea una stringa filtro, descritta in Monitoraggio filtri che restituisce una serie temporale con valori booleani. Una finestra è valida se il valore di tale finestra è true. Questo filtro è chiamato goodBadMetricFilter.
  • Crea un oggetto PerformanceThreshold che rappresenta una soglia per le prestazioni accettabili. Questo oggetto è specificato come valore di goodTotalRatioThreshold.

    Un oggetto PerformanceThreshold specifica un valore di soglia e uno SLI di prestazioni. Se il valore dello SLI relativo alle prestazioni soddisfa o supera il valore della soglia, il periodo di tempo viene conteggiato come valido.

    Esistono due modi per specificare lo SLI sul rendimento:

La seguente rappresentazione JSON rappresenta uno SLI basato su finestre basato su una soglia di prestazioni per uno SLI di disponibilità di base:

{
  "windowsBased": {
     "goodTotalRatioThreshold": {
       "threshold": 0.9,
       "basicSliPerformance": {
         "availability": {},
         "location": [
           "us-central1-c"
         ]
       }
     },
     "windowPeriod": "300s"
   }
}

Questo SLI specifica buone prestazioni come una finestra di 5 minuti in cui la disponibilità raggiunge almeno il 90%. La struttura di uno SLI di base viene mostrata negli indicatori del livello del servizio.

Puoi anche incorporare uno SLI per richiesta nello SLI basato su Windows. Per ulteriori informazioni sulle strutture incorporate, consulta la sezione Struttura per gli SLI basati su richiesta.

Obiettivi del livello di servizio

Un obiettivo del livello di servizio (SLO) è rappresentato da un oggetto ServiceLevelObjective. Questo oggetto include i seguenti campi:

  • Un nome
  • Un nome visualizzato
  • Lo SLI target; un oggetto ServiceLevelIndicator incorporato
  • L'obiettivo di prestazioni per lo SLI
  • Il periodo di conformità per lo SLI

Di seguito è riportata la rappresentazione JSON di uno SLO che utilizza uno SLI di disponibilità di base come valore del campo serviceLevelIndicator:

{
   "name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ",
   "serviceLevelIndicator": {
     "basicSli": {
       "availability": {},
       "location": [
         "us-central1-c"
       ]
     }
   },
   "goal": 0.98,
   "calendarPeriod": "WEEK",
   "displayName": "98% Availability in Calendar Week"
}

Questo SLO imposta l'obiettivo di prestazioni al 98% di disponibilità in un periodo di una settimana.