Como criar um indicador de nível de serviço

Quando você cria serviços personalizados, também é necessário desenvolver objetivos de nível de serviço (SLOs, na sigla em inglês) para eles. Não há SLOs predefinidos para os serviços personalizados.

Também é possível criar SLOs personalizados para serviços detectados automaticamente, mas isso é menos comum.

Os SLOs são criados com base nas métricas que avaliam desempenho e usados como indicadores de nível de serviço (SLIs, na sigla em inglês). Para SLOs personalizados, você precisa identificar as métricas que quer usar nos SLIs.

Se você não estiver criando SLOs personalizados, ignore esta página.

Características dos tipos de métrica adequados

Há dois tipos de SLOs que podem ser criados para seus serviços:

  • Baseados em solicitações.
  • Baseados em períodos.

Os SLOs são baseados nos tipos de métricas que você escolhe como SLIs. Os valores nos tipos de métricas são classificados de acordo com a relação entre eles. Essa classificação é chamada de tipo de métrica e tem três valores possíveis: GAUGE, DELTA, e CUMULATIVE. Para mais informações, consulte MetricKind.

Nos SLOs baseados em solicitações, o SLI representa uma proporção entre solicitações válidas e o total de solicitações. O tipo de métrica do SLI precisa ser DELTA ou CUMULATIVE. Não é possível usar métricas GAUGE em SLOs baseados em solicitações.

Nos SLOs baseados em períodos, o SLI representa uma contagem de resultados válidos em um determinado período. Os tipos de métrica aceitáveis dependem de como você estrutura os SLIs. Para mais informações, consulte Estruturas de SLIs baseados em períodos.

Para mais informações sobre os tipos de SLOs, consulte Conceitos no monitoramento de serviço.

Use os tipos de métrica fornecidos pelo Stackdriver Monitoring ou os personalizados que você criou. Para isso, os valores precisam ser adequados ao SLI que você quer criar.

Como encontrar tipos de métricas adequados

Em vários locais, você encontra as informações sobre os tipos de métrica, incluindo o tipo:

  • A IU do seletor de métricas usada em ferramentas como o Metrics Explorer exibe um cartão de informações sobre o tipo de métrica destacado. Essa ferramenta funciona com métricas personalizadas e integradas.

    Por exemplo, veja na captura de tela a seguir como o cartão de informações do tipo de métrica loadbalancing.googleapis.com/https/request_count é exibido no Metrics Explorer:

    Uma métrica de balanceamento de carga no Metrics Explorer com o tipo de métrica exibido pelo cartão de informações.

    Com o Metrics Explorer, você também configura a métrica para simular a ação da API Service Monitoring e recebe uma representação JSON dessa configuração. Isso é muito útil para criar um SLI manualmente.

  • As páginas da Lista de métricas incluem tabelas para cada serviço. Elas mostram detalhes dos tipos de métrica associados aos serviços. Essas tabelas incluem todos os tipos de métricas integradas, mas não mostram as personalizadas.

    Por exemplo, veja na captura de tela a seguir a entrada do tipo de métrica loadbalancing.googleapis.com/https/request_count, conforme exibida na lista de métricas loadbalancing. Geralmente, essas entradas fornecem mais detalhes do que os cartões de informações no Metrics Explorer.

    Uma métrica de balanceamento de carga na tabela de referência.

Como criar o SLI

Para monitorar o serviço, os dados de métricas são processados de maneiras específicas, que podem ser replicadas no Metrics Explorer. Nesta página, você precisa estar familiarizado com o uso do Metrics Explorer. Se você precisar de mais informações, consulte Metrics Explorer.

Para criar um SLI com base em solicitações que utiliza uma proporção de série temporal, você precisa de duas séries temporais: uma que represente todas as solicitações, e outra relacionada às solicitações válidas ou inválidas. Esse tipo de SLI tem a estrutura a seguir:

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

Para receber o valor do campo goodServiceFilter, siga estas etapas:

  1. Selecione o tipo de recurso monitorado e de métrica. Lembre-se de que o tipo da métrica precisa ser DELTA ou CUMULATIVE. Ele pode retornar muitas séries temporais diferentes.

    Por exemplo, selecione o tipo de recurso http_lb_rule e o tipo de métrica loadbalancing.googleapis.com/https/request_count.

  2. Use o campo Filter para definir o rótulo response_code_class como 200. Isso filtra as séries temporais com outros valores nesse rótulo. Ainda pode haver várias séries temporais correspondentes.

  3. Escolha o agregador sum para criar uma única série temporal. O gráfico na página Metrics Explorer exibe a série temporal resultante.

  4. Clique em More Options acima do gráfico e selecione View as JSON no menu.

    Isso fornece o JSON que descreve o gráfico. Ele incluirá algo assim:

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

A parte de que você precisa é o valor do campo filter incorporado ao objeto dataSets:

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

Para criar a estrutura do SLI, siga estas etapas:

  1. Insira esse valor no campo goodServiceFilter da estrutura do SLI.

  2. Insira também esse valor no campo totalServiceFilter, mas remova a parte de rótulo do filtro, metric.label.\"response_code_class\"=\"200\".

O indicador de nível de serviço resultante é o seguinte:

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

Depois, insira esse SLI em um SLO. Por exemplo:

{
   "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 in calendar week"
}

É possível usar esses valores para criar um SLO, como descrito nesta página.