Construcciones en la API

La API del SLO se usa para configurar objetivos de nivel de servicio (SLO) y se puede usar a fin de supervisar el estado de tus servicios.

Service Monitoring agrega los siguientes recursos a la API de Monitoring:

En esta página, se presentan las estructuras usadas para representar servicios y SLO en la API del SLO, además de mapearlos a los conceptos descritos en general en Conceptos de la supervisión de servicios.

Para obtener información sobre cómo invocar la API, consulta Trabaja con la API.

Servicios

Un servicio se representa con un objeto Service. En este objeto, se incluyen los siguientes campos:

  • Un nombre: Es un nombre de recurso completamente calificado para este servicio
  • Un nombre visible: Es una etiqueta que se usa en los componentes de la consola
  • Un objeto de configuración de telemetría
  • Un indicador del tipo de servicio:
    • Un servicio de App Engine
    • Un Istio en el servicio de Google Kubernetes Engine
    • Un servicio personalizado

El único tipo de servicio que creas de forma manual es un servicio personalizado. Los otros tipos se detectan de forma automática según tu entorno.

Por ejemplo, a continuación se muestra la representación JSON de un servicio de Istio:

{
  "name": "projects/[PROJECT_NUMBER]/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"
  }
}

En este ejemplo, se muestra la representación JSON de un servicio personalizado:

{
  "name": "projects/[PROJECT_NUMBER]/services/-I6P_NufSzKiuvX1AYHE6Q",
  "displayName": "My Test Service",
  "custom": {},
  "telemetry": {}
}

La telemetría está en desarrollo. El único valor significativo es el nombre completo del recurso que define el servicio. El formato se describe en Nombres de recursos.

Indicadores de nivel de servicio

Un indicador de nivel de servicio (SLI) proporciona una medida del rendimiento de un servicio. Un SLI se basa en la métrica que capturó el servicio. La forma exacta en la que se define el SLI depende del tipo de métrica que se use como métrica del indicador, pero, por lo general, es una comparación entre los resultados aceptables y los totales.

Un SLI se representa con el objeto ServiceLevelIndicator. Este objeto es una forma colectiva de hacer referencia a los tres tipos compatibles de SLI:

  • Un SLI básico, que se crea de forma automática para un tipo de servicio conocido. Este tipo de SLI se describe en Objetivos de nivel de servicio; se representa con un objeto BasicSli y mide la disponibilidad o la latencia

  • Un SLI basado en solicitudes, que puedes usar para registrar eventos que representan un servicio aceptable. El uso de este tipo de SLI se describe en SLO basados en solicitudes; se representa con un objeto RequestBasedSli

  • Un SLI basado en una ventana, que puedes usar para contar los períodos de tiempo que cumplen con algún criterio de calidad. El uso de este tipo de SLI se describe en  SLO basados en Windows; se representa con un objeto WindowsBasedSli

Por ejemplo, a continuación se muestra un SLI de disponibilidad básica:

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

Estructuras para SLI basados en solicitudes

Un SLI basado en solicitudes se basa en una métrica que cuenta las unidades de servicio como una proporción entre un resultado específico y el total. Por ejemplo, si usas una métrica que cuenta solicitudes, puedes crear la proporción entre la cantidad de solicitudes correctas y la cantidad total de solicitudes.

Existen dos maneras de crear un SLI basado en solicitudes:

  • Como TimeSeriesRatio, cuando la proporción entre servicio de calidad y servicio total se calcula a partir de dos series temporales cuyos valores tienen un tipo de métrica de DELTA o CUMULATIVE
  • Como DistributionCut, cuando la serie temporal tiene el tipo de valor DISTRIBUTION y cuyos valores tienen un tipo de métrica de DELTA o CUMULATIVE El valor de servicio de calidad es el recuento de los elementos que pertenecen a los depósitos de histogramas en un rango especificado, y el total es el recuento de todos los valores en la distribución.

A continuación, se muestra la representación JSON de un SLI que usa una proporción de serie temporal:

{
  "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",
    }
  }
}

Las series temporales en esta proporción se identifican por el par de tipo de recurso supervisado y tipo de métrica:

  • Recurso: https_lb_rule
  • Tipo de métrica: loadbalancing.googleapis.com/https/request_count

El valor de totalServiceFilter se representa mediante el par del tipo de métrica y de recurso. El valor de goodServiceFilter se representa mediante el mismo par, pero en el que una etiqueta tiene un valor particular. En este caso, cuando el valor de la etiqueta response_code_class es 200.

La proporción entre los filtros mide la cantidad de solicitudes que muestran un estado HTTP 2xx en función de la cantidad total de solicitudes.

A continuación, se muestra la representación JSON de un SLI que usa un corte de distribución:

{
  "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
      }
    }
  }
}

La serie temporal se identifica por el tipo de recurso supervisado, el tipo de métrica y el valor de una etiqueta de métrica:

  • Recurso: https_lb_rule
  • Tipo de métrica: loadbalancing.googleapis.com/https/backend_latencies
  • Par de valor de etiqueta: response_code_class = 200

El rango de latencias que se considera de calidad se designa mediante el campo range. Este SLI calcula la proporción entre latencias de respuestas de clase 2xx por debajo de 500 y las latencias de todas las respuestas de clase 200.

Estructuras para SLI basados en ventanas

Un SLI basado en ventanas cuenta los períodos en los que el servicio proporcionado se considera de calidad. El criterio para determinar qué tan bueno es el servicio es parte de la definición del SLI.

Todos los SLI basados en ventanas incluyen un período de ventana, entre 60 y 86,400 segundos (1 día).

Existen dos maneras de especificar un criterio de un servicio de calidad para un SLI basado en ventanas:

  • Crea una string de filtro, descrita en Filtros de supervisión, que muestra una serie temporal con valores booleanos. Una ventana es de calidad si su valor es de true. A este filtro se lo denomina goodBadMetricFilter.
  • Crea un objeto PerformanceThreshold que represente un límite de rendimiento aceptable. Este objeto se especifica como el valor de goodTotalRatioThreshold.

    Un objeto PerformanceThreshold especifica un valor de límite y un SLI de rendimiento. Si el valor del SLI de rendimiento alcanza o supera el valor de límite, el período se considera de calidad.

    Existen dos formas de especificar el SLI de rendimiento:

A continuación, se muestra la representación JSON de un SLI basado en ventanas según el límite de rendimiento de un SLI de disponibilidad básico:

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

Este SLI especifica un buen rendimiento como una ventana de 5 minutos en la que la disponibilidad alcanza el 90% o más. La estructura de un SLI básico se muestra en Indicadores de nivel de servicio.

También puedes incorporar un SLI basado en solicitudes en el SLI basado en ventanas. A fin de obtener más información sobre las estructuras incorporadas, consulta Estructuras para los SLI basados en solicitudes.

Objetivos de nivel de servicio

Un objetivo de nivel de servicio (SLO) se representa con un objeto ServiceLevelObjective. Este objeto incluye los siguientes campos:

  • Un nombre
  • Un nombre visible
  • El SLI objetivo; un objeto ServiceLevelIndicator incorporado
  • El objetivo de rendimiento del SLI
  • El período de cumplimiento del SLI

A continuación, se muestra la representación JSON de un SLO que usa un SLI de disponibilidad básico como el valor 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"
}

Mediante este SLO, se configura el objetivo de rendimiento con una disponibilidad del 98% durante un período de una semana.