Este tópico descreve como definir Service Level Objectives (SLOs) de aplicativo usando o ASM.
Pré-requisitos
O cluster foi adicionado à instância do ASM versão 1.15.3 ou posterior.
A injeção automática está ativada. Para mais informações, consulte Configure uma política de injeção de sidecar.
Contexto
Um Service Level Objective (SLO) é um valor alvo ou intervalo de valores para um nível de serviço, medido por um ou mais Service Level Indicators (SLIs). É possível definir SLOs manualmente com base em métricas do Prometheus, mas esse processo pode ser complexo. O ASM simplifica essa tarefa ao permitir a geração de SLOs e das regras de alerta correspondentes diretamente pelo console do ASM. Para mais informações, consulte Visualize geral do Service Level Objective (SLO) e Referência de campos CRD de SLO.
Preparações
Implante o aplicativo httpbin em um cluster ACK e configure seu serviço virtual e as regras de gateway.
Implantar o httpbin em um cluster ACK
-
Crie o arquivo httpbin.yaml com o conteúdo a seguir.
################################################################################################## # httpbin service ################################################################################################## apiVersion: v1 kind: ServiceAccount metadata: name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: serviceAccountName: httpbin containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80 Conecte-se ao cluster ACK usando kubectl para gerencie o cluster e seus aplicativos. Para mais informações, consulte Conectar-se a um cluster usando kubectl.
-
Execute o comando a seguir para implantar o httpbin no cluster ACK.
kubectl apply -f httpbin.yaml
Configure regras de serviço virtual e gateway
-
Crie o arquivo httpbin-gateway.yaml com o conteúdo a seguir.
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: httpbin-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: httpbin spec: hosts: - "*" gateways: - httpbin-gateway http: - route: - destination: host: httpbin port: number: 8000 Conecte-se à instância do ASM usando kubectl para gerenciá-la. Para mais informações, consulte Usar kubectl no plano de controle para acessar recursos do Istio.
-
Execute o comando a seguir para implantar o serviço virtual e as regras de gateway.
kubectl apply -f httpbin-gateway.yaml -
Na barra de endereços do navegador, insira http://{endereço IP do serviço de gateway de entrada}.
A página do aplicativo httpbin será exibida, indicando que a implantação foi bem-sucedida.
Defina a configuração de SLO
Esta seção demonstra como crie um SLO de disponibilidade de serviço para o serviço httpbin no namespace default, com valor alvo de 99%, duração de 30 dias e dois níveis de alerta: Page e Ticket.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em no nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página SLO Configuration, selecione o Namespace do serviço alvo. Neste exemplo, o namespace é default. Na linha do serviço httpbin, clique em Create.
Na página Create, na seção Basic Information, selecione 30 days para Duration.
Clique em na aba SLO Rule. Defina Name como asm-slo, Target como 99 e Plugin Type como availability. Ative a chave Enable Alert Rule, defina Alert Rule Name como asm-alert e ative as chaves Enable Page-level Alert Rule e Enable Ticket-level Alert Rule. Na seção Basic Information, selecione default para Namespace, insira httpbin para , e defina como .
-
Opcional: Na parte inferior da página, clique em Preview para revisar a configuração. Após confirme que as informações estão corretas, clique em Confirm.
Para mais informações sobre os campos no arquivo de configuração, consulte
Referência de campos CRD de SLO
.
Ao concluir, clique em Create na parte inferior da página.
Regras do Prometheus geradas automaticamente
Após configure o SLO, retorne à página
SLO Configuration
. Na linha do serviço
httpbin
, clique em
View Prometheus Rule
na coluna
Actions
para visualize as regras geradas.
---
# Code generated by Alibaba Cloud Service Mesh (ASM).
# DO NOT EDIT.
groups:
- name: asm-slo-sli-recordings-httpbin-asm-slo
rules:
- record: slo:sli_error:ratio_rate5m
expr: "(\n(\n sum(rate(istio_requests_total{ destination_service_name=\"httpbin\",destination_service_naxxx\n }[5m])) \n / \n (sum(rate(istio_requests_total{ destination_service_name=\"httpbin\",destinaxxx\n }[5m])) > 0)\n) OR on() vector(0)\n)"
labels:
asm_slo: asm-slo
slo_id: httpbin-asm-slo
slo_service: httpbin
slo_window: 5m
- record: slo:sli_error:ratio_rate30m
expr: "(\n(\n sum(rate(istio_requests_total{ destination_service_name=\"httpbin\",destination_service_naxxx\n }[30m])) \n / \n (sum(rate(istio_requests_total{ destination_service_name=\"httpbin\",destinaxxx\n }[30m])) > 0)\n) OR on() vector(0)\n)"
labels:
asm_slo: asm-slo
slo_id: httpbin-asm-slo
slo_service: httpbin
slo_window: 30m
- record: slo:sli_error:ratio_rate1h
expr: "(\n(\n sum(rate(istio_requests_total{ destination_service_name=\"httpbin\",destination_service_naxxx\n }[1h])) \n / \n (sum(rate(istio_requests_total{ destination_service_name=\"httpbin\",destinaxxx\n }[1h])) > 0)\n) OR on() vector(0)\n)"
labels:
asm_slo: asm-slo
Importe essas regras para o Prometheus para aplicar os SLOs. Para mais informações, consulte Importar regras geradas para o Prometheus para implementar SLOs.