Costrutti nell'API

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

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

Service Monitoring aggiunge le seguenti risorse all'API Monitoring:

Per informazioni su come richiamare l'API, consulta Utilizzo dell'API.

Servizi

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

  • Un nome: un nome risorsa completo per questo servizio
  • Un nome visualizzato: un'etichetta da utilizzare nei componenti della console
  • Una struttura per uno dei tipi di BasicService.
  • Un oggetto di configurazione della telemetria fornito dal sistema

Per definire un servizio di base, devi specificarne il tipo e fornire un insieme di etichette specifiche del servizio che lo descrivono:

{
   "serviceType": string,
   "serviceLabels": {
      string: string,
      ...
   }
}

Le sezioni seguenti forniscono esempi per ogni tipo di servizio.

Tipi di servizi di base

Questa sezione fornisce esempi di definizioni di servizi basati sulla BasicService, in cui il valore dell'attributo Il campo serviceType è uno dei seguenti:

  • APP_ENGINE
  • CLOUD_ENDPOINTS
  • CLUSTER_ISTIO
  • ISTIO_CANONICAL_SERVICE
  • CLOUD_RUN

Ognuno di questi tipi di servizi utilizza la classe BasicSli del livello del servizio.

App Engine

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "APP_ENGINE",
          "serviceLabels": {
            "module_id": "MODULE_ID"
          },
      },
    }

Cloud Endpoints

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "CLOUD_ENDPOINTS",
          "serviceLabels": {
            "service": "SERVICE"
          },
      },
    }

Istio per i cluster

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "CLUSTER_ISTIO",
          "serviceLabels": {
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "service_namespace": "SERVICE_NAMESPACE",
            "service_name": "SERVICE_NAME"
          },
      },
    }

Servizio canonico Istio

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "ISTIO_CANONICAL_SERVICE",
          "serviceLabels": {
            "mesh_uid": "MESH_UID",
            "canonical_service_namespace": "CANONICAL_SERVICE_NAMESPACE",
            "canonical_service": "CANONICAL_SERVICE"
          },
      },
    }

Cloud Run

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "CLOUD_RUN",
          "serviceLabels": {
            "service_name": "SERVICE_NAME",
            "location": "LOCATION"
          },
      },
    }

Tipi di servizi GKE di base

Questa sezione contiene esempi di definizioni del servizio GKE basato sul tipo BasicService, in cui il valore del campo serviceType è uno dei seguenti:

  • GKE_NAMESPACE
  • GKE_WORKLOAD
  • GKE_SERVICE

Per questi tipi di servizi devi definire gli SLI. Non possono utilizzare Indicatori del livello del servizio di BasicSli. Per saperne di più, consulta Indicatori del livello del servizio.

Spazio dei nomi GKE

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "GKE_NAMESPACE",
          "serviceLabels": {
            "project_id": "PROJECT_ID",
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "namespace_name": "NAMESPACE_NAME"
          }
      },
    }

Carico di lavoro GKE

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "GKE_WORKLOAD",
          "serviceLabels": {
            "project_id": "PROJECT_ID",
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "namespace_name": "NAMESPACE_NAME",
            "top_level_controller_type": "TOPLEVEL_CONTROLLER_TYPE",
            "top_level_controller_name": "TOPLEVEL_CONTROLLER_NAME",
          }
      },
    }

Servizio GKE

    {
      "displayName": "DISPLAY_NAME",
      "basicService": {
          "serviceType": "GKE_SERVICE",
          "serviceLabels": {
            "project_id": "PROJECT_ID",
            "location": "LOCATION",
            "cluster_name": "CLUSTER_NAME",
            "namespace_name": "NAMESPACE_NAME",
            "service_name": "SERVICE_NAME"
          }
      },
    }

Servizi personalizzati

Puoi creare servizi personalizzati se nessuno dei tipi di servizi di base è adatto. Un servizio personalizzato ha il seguente aspetto:

    {
      "displayName": "DISPLAY_NAME",
      "custom": {}
    }

Per questi tipi di servizi devi definire gli SLI. Non possono utilizzare Indicatori del livello del servizio di BasicSli. Per saperne di più, consulta Indicatori del livello del servizio.

Indicatori del livello del servizio

Un indicatore del livello del servizio (SLI) fornisce una misura delle prestazioni di un servizio. Uno SLI si basa su una metrica acquisita dal servizio. Come sta esattamente lo SLI definita dipende dal tipo di metrica usata come indicatore, ma solitamente si tratta di un confronto tra i risultati accettabili e i risultati totali.

Uno SLI è rappresentato ServiceLevelIndicator. L'oggetto è un modo collettivo per indicare i tre tipi supportati SLI:

  • Uno SLI di base, creato automaticamente per le istanze il tipo di servizio BasicService. 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 accettabile. L'utilizzo di questo tipo di SLI è descritto in SLO basati su richiesta. è rappresentato da un oggetto RequestBasedSli.

  • Uno SLI basato su finestra, che puoi utilizzare per contare i periodi di tempo che soddisfano i criteri di idoneità. L'utilizzo di questo tipo di SLI è descritto nella sezione SLO basati su Windows. è rappresentato da un oggetto WindowsBasedSli.

Ad esempio, di seguito viene mostrato uno SLI di disponibilità di base:

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

Strutture per 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 l'esito positivo e il numero totale di richieste.

Esistono due modi per creare uno SLI basato su richiesta:

  • Come TimeSeriesRatio, quando il rapporto dal servizio buono al servizio totale viene calcolato in base a 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 "good-service" è il numero di articoli che rientrano nel bucket di istogrammi in un intervallo specificato e il totale è il conteggio di tutte valori nella distribuzione.

Di seguito viene mostrata la rappresentazione JSON di uno SLI che utilizza un oggetto rapporto delle serie temporali:

{
  "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 e il tipo di metrica:

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

Il valore di totalServiceFilter è rappresentato dalla coppia di metrica e tipo di risorsa. Il valore per goodServiceFilter è rappresentato dalla stessa coppia, ma in cui alcune etichette hanno un valore particolare; in questo caso, quando il valore dell'etichetta response_code_class è 200.

Il rapporto tra i filtri misura il numero di richieste che restituiscono un Stato HTTP 2xx sul numero totale di richieste.

Di seguito viene mostrata la rappresentazione JSON di uno SLI che utilizza una distribuzione taglio:

{
  "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 valore per un'etichetta di metrica:

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

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

Strutture per SLI basati su finestre

Uno SLI basato su finestre conteggia le finestre temporali in cui il servizio fornito viene considerata buona. Il criterio per determinare la qualità del servizio della definizione dello 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 Good Service per un server basato su Windows SLI:

  • Crea una stringa di filtro, descritta in Filtri di monitoraggio, che restituisce una serie temporale con valori booleani. Una finestra è buona se il valore per la finestra è true. Questo filtro è chiamato goodBadMetricFilter.
  • Crea un oggetto PerformanceThreshold che rappresenta una soglia per prestazioni accettabili. L'oggetto è specificato come valore di goodTotalRatioThreshold.

    Un oggetto PerformanceThreshold specifica un valore di soglia e uno SLI delle prestazioni. Se il valore dello SLI di prestazioni soddisfa o supera il valore di soglia, la finestra temporale viene conteggiata come buona.

    Esistono due modi per specificare lo SLI delle prestazioni:

    • Come oggetto BasicSli in basicPerformanceSli .
    • Come oggetto RequestBasedSli in performance . Se usi uno SLI basato su richiesta, il tipo di metrica Lo SLI deve essere DELTA o CUMULATIVE. Non puoi utilizzare le metriche GAUGE negli SLI basati su richiesta.

Di seguito viene mostrata la rappresentazione JSON di uno SLI basato su Windows e 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 il 90% o una percentuale migliore. La struttura di uno SLI di base è indicata in Livello di servizio indicatori.

Puoi anche incorporare uno SLI basato su richiesta nello SLI basato su finestre. Per ulteriori informazioni informazioni sulle strutture incorporate, consulta Strutture per modelli di SLI

Obiettivi del livello di servizio

Un obiettivo del livello di servizio (SLO) è rappresentato da un ServiceLevelObjective. Questo oggetto include quanto segue: 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 viene mostrata la rappresentazione JSON di uno SLO che utilizza una SLI di disponibilità 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 a una disponibilità del 98% rispetto a di una settimana.