Crear un indicador de nivel de servicio

Si creas servicios personalizados, también debes crear objetivos de nivel de servicio (SLO) para ellos. No existen SLO predefinidos para servicios personalizados.

También puedes crear SLO personalizados para servicios detectados automáticamente, pero eso es menos común.

Los SLO se crean a partir de métricas que miden el rendimiento y se usan como indicadores de nivel de servicio (SLI). En el caso de los SLO personalizados, debes identificar las métricas que deseas usar en tus SLI.

Si no estás creando SLO personalizados, puedes omitir esta página.

Características de tipos de métricas apropiados

Existen dos tipos de SLO que puedes crear para tus servicios:

  • SLO basados en solicitudes
  • SLO basados en Windows

Los SLO se basan en los tipos de métricas que eliges como SLI. Los valores de los tipos de métricas se clasifican según la relación entre ellos. Esta clasificación se denomina clase de métrica y tiene tres valores posibles: GAUGE, DELTA, y CUMULATIVE. Para obtener más información, consulta MetricKind.

En el caso de los SLO basados en solicitudes, tu SLI representa una proporción entre las solicitudes aceptables y las solicitudes totales. La clase de métrica de tu SLI debe ser DELTA o CUMULATIVE. No puedes usar las métricas GAUGE en los SLI basados en solicitudes.

Para los SLO basados en Windows, tu SLI representa un recuento de resultados aceptables en un período determinado. Las categorías de métricas aceptables dependen de la forma en que se estructuran los SLI. Sin embargo, si usas un SLI basado en solicitudes, el tipo de métrica de tu SLI debe ser DELTA o CUMULATIVE. No puedes usar las métricas GAUGE en los SLI basados en solicitudes. Para obtener más información, consulta Estructuras para SLI basadas en Windows.

Para obtener más información sobre los tipos de SLO, consulta la sección Conceptos en la supervisión de servicios.

Puedes usar los tipos de métricas que proporciona Cloud Monitoring o los tipos de métricas personalizadas que creaste. En ambos casos, los valores son adecuados para el SLI que deseas crear.

Tipos de métricas no adecuados

Cuando consideres un tipo de métrica que quieras usar como SLI, evita los tipos de cardinalidad alta. La cardinalidad describe la cantidad de series temporales posibles que se pueden asociar con el tipo de métrica y está relacionada con el nivel de detalle de los valores que pueden tomar las etiquetas de métricas. Para obtener un análisis de cardinalidad, consulta Cardinalidad: Series temporales y etiquetas.

Es probable que los tipos de métricas con etiquetas que toman valores como marcas de tiempo tengan una cardinalidad muy alta. Estos tipos son opciones deficientes para su uso como SLI. Las métricas de alta cardinalidad suelen ser métricas definidas por el usuario que no se diseñaron para evitar problemas de cardinalidad. Estas pueden incluir métricas basadas en registros definidas por el usuario y métricas personalizadas.

Busca tipos de métricas adecuados

La información sobre los tipos de métricas, incluida la clase de métricas, se puede obtener en varios lugares:

  • El selector de métricas que se usa en herramientas, como el Explorador de métricas muestra una tarjeta emergente para el tipo de métrica seleccionado. Esta herramienta funciona para las métricas integradas y personalizadas.

    Por ejemplo, en la siguiente captura de pantalla se puede observar la tarjeta emergente para el tipo de métrica loadbalancing.googleapis.com/https/request_count tal como se ve en el Explorador de métricas:

    Una métrica de balanceo de cargas en el Explorador de métricas con una tarjeta emergente que muestra la clase de métrica.

    Con el Explorador de métricas, también puedes configurar la métrica para que imite lo que lleva a cabo la API de SLO y obtener una representación JSON de esa configuración. Este JSON es útil para crear un SLI de forma manual.

  • Las páginas de la Lista de métricas contienen tablas para cada servicio en las que se detallan los tipos de métricas asociados con los servicios. Estas tablas incluyen todos los tipos de métricas integradas, pero no muestran tipos de métricas personalizadas.

    Por ejemplo, en la siguiente captura de pantalla, se muestra la entrada del tipo de métrica loadbalancing.googleapis.com/https/request_count como se ve en la lista de métricas de balanceo de cargas. Estas entradas suelen proporcionar más detalles que las tarjetas emergentes del Explorador de métricas.

    Una métrica de balanceo de cargas en la tabla de referencia.

Compila el SLI

Para la supervisión de servicios, los datos de métricas se procesan de formas específicas, que puedes replicar en el Explorador de métricas. En esta página, se supone que estás familiarizado con el uso del Explorador de métricas. Si necesitas más información, consulta Explorador de métricas.

Para compilar un SLI basado en solicitudes y en una proporción de series temporales, necesitas dos series temporales: una que represente todas las solicitudes y otra que represente las solicitudes aceptables (o erróneas). Este tipo de SLI tiene la siguiente estructura:

  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter": TO_BE_IDENTIFIED,
      "goodServiceFilter": TO_BE_IDENTIFIED,
    }
  }

Para obtener el valor del campo goodServiceFilter, sigue estos pasos:

  1. Selecciona el tipo de recurso supervisado y el tipo de métrica. Recuerda que la clase de métrica debe ser DELTA o CUMULATIVE. El resultado puede incluir muchas series temporales diferentes.

    Por ejemplo, selecciona el tipo de recurso http_lb_rule y el tipo de métrica loadbalancing.googleapis.com/https/request_count.

  2. Usa el campo Filtro para establecer la etiqueta response_code_class en 200. Este filtro quita cualquier serie temporal que tenga otros valores para esta etiqueta. Es posible que haya varias series temporales que coincidan.

  3. Elige el agregador sum para crear una única serie temporal. El gráfico de la página del Explorador de métricas muestra la serie temporal resultante.

  4. Haz clic en Más opciones  sobre el gráfico y selecciona View as JSON en el menú.

    El JSON recuperado se verá de la siguiente forma:

    "dataSets": [
      {
        "timeSeriesFilter": {
          "filter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200""
          "perSeriesAligner": "ALIGN_RATE",
          "crossSeriesReducer": "REDUCE_SUM",
          "secondaryCrossSeriesReducer": "REDUCE_NONE",
          "minAlignmentPeriod": "60s",
          "groupByFields": [],
          "unitOverride": "1"
        },
        "targetAxis": "Y1",
        "plotType": "LINE"
      }
    ],
    

La pieza que te interesa es el valor del campo filter incorporado en el objeto dataSets:

"filter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200""

Para compilar la estructura del SLI, sigue estos pasos:

  1. Inserta este valor en la estructura del SLI como el valor del campo goodServiceFilter.

  2. También inserta este valor en la estructura del SLI como el valor de totalServiceFilter, pero luego quita la parte de la etiqueta del filtro, metric.label.\"response_code_class\"=\"200\".

El indicador de nivel de servicio resultante será el siguiente:

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

Luego, puedes insertar este SLI en un SLO, por ejemplo:

{
   "serviceLevelIndicator": {
      "requestBased": {
        "goodTotalRatio": {
          "totalServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule"",
          "goodServiceFilter": "metric.type="loadbalancing.googleapis.com/https/request_count" resource.type="http_lb_rule" metric.label."response_code_class"="200"",
        }
     }
   },
   "goal": 0.98,
   "calendarPeriod": "WEEK",
   "displayName": "98% Successful requests in a calendar week"
}

Puedes usar este JSON para crear un SLO, como se describe en Crea un SLO.