Orientação para configurar metas de nível de serviço (SLOs) no Kubernetes com Prometheus e Linkerd

Antecipando o início do curso "Plataforma de infraestrutura baseada em Kubernetes", preparamos uma tradução tradicional de um artigo útil.


Os objetivos de nível de serviço (SLOs) são muito mais fáceis de trabalhar com uma grade de serviços

, (SLO, . Service Level Objectives) Kubernetes  Prometheus, ,  Linkerd,  . , , , SLO.

, , , SLO Kubernetes .

SLO Kubernetes

SLO, , . , Google SRE, SLO , , , .

, , , SLO : SLO , , .  Kubernetes, . , SLO , . (. SLO Kubernetes.)

, SLO Kubernetes , . SLO , , ! , Linkerd golden metrics ( ) — , ,  — . Linkerd SLO .

(, SLO, , , . , , , , SLO .)

.

SLO Linkerd Prometheus

, SLO gRPC-, Kubernetes. , SLO.

, Linkerd . Linkerd HTTP gRPC, (pods) . , Prometheus. Prometheus Linkerd, .

, , , Linkerd Prometheus, SLO.

: Linkerd Kubernetes

. , Kubernetes  kubectl, . Linkerd, , Linkerd .

Linkerd:

curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:$HOME/.linkerd2/bin

(Linkerd   Linkerd.)

, , Kubernetes Linkerd, Linkerd :

linkerd check --pre
linkerd install | kubectl apply -f -
linkerd check

, Emojivoto, :

curl -sL https://run.linkerd.io/emojivoto.yml \
  | linkerd inject - \
  | kubectl apply -f -

. SLO: .

 — , , SLO. ?

. , ,     7 80 %.  SLO. :  (service level indicator — SLI), ; , ;   . :

SLI:

: 80 %

: 7

SLO , 20 % 7- , . ,  — , 20 % «» .

, 7 100 % , 100 %  — . , 7 80 % , 0 % .   80 %,    SLO .

:

= 1–[(1–)/(1–)]

  — SLI, . , , SLI ( ) .

Prometheus

. Prometheus Linkerd, , :

# Get the name of the prometheus pod
$ kubectl -n linkerd get pods
NAME                                      READY   STATUS    RESTARTS   AGE
..
linkerd-prometheus-54dd7dd977-zrgqw       2/2     Running   0          16h

PODNAME, :

kubectl -n linkerd port-forward linkerd-prometheus-PODNAME 9090:9090

 localhost:9090   PromQL, Prometheus.

Painel Prometheus
Prometheus

, !

Prometheus

100 80 %  — . , Prometheus. Emojivoto, emojivoto .

, :

:

response_total{deployment="voting", direction="inbound", namespace="emojivoto"}

:

response_total{classification="success",deployment="voting",direction="inbound",namespace="emojivoto",..} 46499
response_total{classification="failure",deployment="voting",direction="inbound",namespace="emojivoto",..} 8652

, , : classification. 46 499 8652 .

, 7 ,  classification="success"   [7d]:

:

response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d]

, PromQL increase() sum(), , :

:

sum(increase(response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, classification, tls)

:

{classification="success",deployment="voting",namespace="emojivoto",tls="true"} 26445.68142198795

, 7 26 445 (  increase()).

, , , —  classification="success":

:

sum(increase(response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, classification, tls) / ignoring(classification) sum(increase(response_total{deployment="voting", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, tls)

:

{deployment="voting",namespace="emojivoto",tls="true"} 0.846113068695625

, 7 84,61 % .

, , . :

= 1–[(1–)/(1–)]

, 80 % (0,8):

:

1 - ((1 - (sum(increase(response_total{deployment="voting", classification="success", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, classification, tls)) / ignoring(classification) sum(increase(response_total{deployment="voting", direction="inbound", namespace="emojivoto"}[7d])) by (namespace, deployment, tls)) / (1 - .80))

:

{deployment="voting",namespace="emojivoto",tls="true"} 0.2312188519042635

23,12 % .

, !

Grafana

 — , ? ! Linkerd Grafana, Linkerd.

Linkerd,  linkerd dashboard.

Grafana emojivoto, Grafana .

Painel Linkerd com integração Grafana
Linkerd Grafana

 deploy/voting, : , . .

Linkerd no painel do Grafana
Linkerd Grafana

 —  7-day error budget (success rate) (« 7 ( )») , , PromQL.

!

Orçamento de bug no Grafana com métricas Linkerd
Grafana Linkerd

.

, , , PromQL, rate(), .

, -, . (Gauge) , , .

Orçamento de erro de 7 dias (taxa de sucesso) no formato de medidor.
7 ( ) (Gauge).

, emojivoto,  deployment="voting". , 80 %.

Orçamento de erro para 7 dias (porcentagem de tentativas bem-sucedidas) para todos os serviços.
7 ( ) .

SLO

SLO Linkerd, Grafana. !

?

, , SLO. . , .  , . SLO .

Buoyant SLO, Kubernetes. ,   Dive, SLO . Dive Linkerd , , . Dive , ,  , SLO, .

Painel de mergulho mostrando SLO e conformidade de orçamento de bug ao longo de 7 dias.
Dive, SLO 7- .

,  — Dive SLO Linkerd Prometheus Grafana, , — SLO!

:

(SLO) Kubernetes

(SLO) . SLO — . « , , ?» , Kubernetes, SLO - : , , .


" Kubernetes". " Kubernetes" .


:




All Articles