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 seu SLI deve 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.

É possível usar os tipos de métrica fornecidos pelo Cloud Monitoring ou usar os tipos de métricas que você criou. Em ambos os casos, os valores são adequados para a SLI que você quer criar.

Tipos de métricas não adequados

Ao considerar um tipo de métrica para uso como uma SLI, evite tipos de métrica de alta cardinalidade. A cardinalidade descreve o número de séries temporais possíveis que podem ser associadas ao tipo de métrica e está relacionada à granularidade dos valores que os rótulos de métricas podem assumir. Para ver uma discussão sobre cardinalidade, consulte Cardinalidade: séries temporais e rótulos.

Os tipos de métrica com rótulos que usam valores como carimbos de data/hora provavelmente têm cardinalidade muito alta e são escolhas inadequadas para uso como SLIs.

Uma classe comum de tipos de métrica de alta cardinalidade é baseada em registros, que são criadas com base em entradas de registro. Consulte Como usar métricas com base em registros para mais informações.

As métricas com base em registros geralmente não são candidatas adequadas para SLIs. As métricas personalizadas que não foram projetadas para evitar alta cardinalidade também são escolhas ruins.

Como encontrar tipos de métricas adequados

As informações sobre os tipos de métrica, incluindo o tipo de métrica, podem ser encontradas em vários lugares:

  • O seletor de métricas usado em ferramentas como o Metrics Explorer exibe um cartão de informações para 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 SLO e recebe uma representação JSON dessa configuração. Esse JSON é ú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, a captura de tela a seguir mostra a entrada para o tipo de métrica loadbalancing.googleapis.com/https/request_count, conforme visto na lista de métricas de balanceamento de carga. 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. O resultado pode incluir 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. Esse filtro remove todas as séries temporais com outros valores para esse 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 Mais opções acima do gráfico e selecione Visualizar como JSON no menu.

    A resposta JSON tem uma aparência semelhante ao seguinte:

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

Use esse JSON para criar um SLO, conforme descrito em Como criar um SLO.