Service Mesh (ASM) oferece diversas métricas de monitoramento integradas e múltiplas dimensões para ajudar você a compreender melhor a execução em tempo real das suas aplicações. Com seu mecanismo de extensão avançado, o ASM permite definir lógicas de processamento com base no conteúdo da requisição ou da resposta e adicionar os resultados como dimensões nas métricas de monitoramento. Este tópico descreve como utilizar um plug-in Wasm para incluir dimensões personalizadas nas métricas de monitoramento existentes no ASM.
Informações básicas
O ASM fornece várias métricas de monitoramento, incluindo istio_requests_total e istio_request_duration_milliseconds. Por padrão, essas métricas possuem algumas dimensões configuradas, como source_workload, destination_workload e response_code. Configure as métricas geradas pelo proxy do mesh com base nessas dimensões. Para mais informações, consulte Configurar definições de observabilidade. Assim, é possível criar diversos painéis e regras de alerta.
Pré-requisitos
Adicionar um cluster a uma instância do ASM na versão 1.18 ou posterior.
Injeção automática de proxy sidecar ativada. Para mais detalhes, consulte Configurar políticas de injeção de sidecar.
Aplicação HTTPBin implantada e acessível. Para mais informações, consulte Implantar a aplicação HTTPBin.
Etapa 1: Escrever um plug-in Wasm e aplicá-lo à aplicação HTTPBin
Esta seção explica como desenvolver um plug-in Wasm em Rust, decodificar o user-name presente no cabeçalho da requisição usando Base64 e adicioná-lo como dimensão na métrica istio_requests_total.
A API para outras linguagens é semelhante à dos plug-ins em Rust. Caso escreva plug-ins Wasm em outra linguagem, consulte a documentação do SDK correspondente.
Obtenha o código-fonte do plug-in.
-
Compile e implante o plug-in Wasm. Para mais detalhes, consulte Escrever um plug-in Wasm em Rust para um proxy Envoy no ASM.
Este plug-in chama a função
SetPropertypara definir o resultado da análise como um filter_state. O arquivo YAML de exemplo para oWasmPluginé apresentado abaixo.apiVersion: extensions.istio.io/v1alpha1 kind: WasmPlugin metadata: name: add-metrics-log namespace: default spec: imagePullPolicy: IfNotPresent selector: matchLabels: app: httpbin url: oci://registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/asm-wasm-rust-add-metrics-tag:v1.22.6.7-g1926b20-aliyun phase: AUTHNA imagem deste exemplo está armazenada em um repositório público, portanto não é necessário configurar
wasm-secrets. Se o ACR utilizado for um repositório privado, faça os ajustes necessários conforme o arquivo YAML de exemplo em Escrever um plug-in Wasm em Rust para um proxy Envoy no ASM .
Etapa 2: Modificar as configurações de observabilidade para adicionar dimensões personalizadas
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na aba Metric Settings, ative Client-side Metrics e Server-side Metrics para REQUEST_COUNT. Em seguida, adicione uma dimensão personalizada chamada
user_namecom o valorfilter_state["wasm.user-name"]em cada métrica.Clique em Submit para adicionar o
filter_statedo plug-in Wasm como uma dimensão da métrica.
Etapa 3: Acessar um serviço HTTPBin
-
Execute o comando abaixo para acessar o serviço HTTPBin.
curl ${IP address of ASM gateway}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo="YXNtLXRlc3QtdXNlcgo=corresponde ao resultado de asm-test-user codificado em Base64.Saída esperada:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""` -
Utilize o arquivo kubeconfig do cluster ASM no plano de dados para executar o seguinte comando e visualizar as métricas do Prometheus referentes ao pod do HTTPBin.
kubectl exec deploy/httpbin -it -c istio-proxy -- curl localhost:15000/stats/prometheus | grep istio_requests_totalSaída esperada:
# TYPE istio_requests_total counter istio_requests_total{reporter="destination",source_workload="istio-ingressgateway",...,user_name="asm-test-user"} 3Assim, você pode especificar informações estatísticas para usuários específicos no Prometheus com base nessa dimensão.