Em aplicações integradas ao Prometheus, use sidecar proxies para expor métricas da aplicação ao mesclar as métricas do Istio com as métricas da aplicação. Este tópico descreve como realizar essa mesclagem.
Pré-requisitos
Crie uma instância do Service Mesh (ASM) na versão 1.17.2.30 ou posterior. Para mais informações, consulte Criar uma instância ASM ou Atualizar uma instância ASM.
Este recurso não é adequado para cenários em que as métricas da aplicação são sensíveis. O sistema coleta as métricas da aplicação juntamente com as métricas do Istio. Usuários com permissão para visualizar métricas do Istio também podem visualizar as métricas da aplicação.
Descrição do recurso
Ao ativar a mesclagem de métricas do Istio com métricas de aplicação, o ASM combina ambas as fontes de dados. O sistema adiciona as anotações prometheus.io da aplicação a todos os pods no plano de dados para habilitar a coleta de métricas do Prometheus. Caso essas anotações já existam, elas serão sobrescritas. Os sidecar proxies mesclam as métricas do Istio com as da aplicação, e o Prometheus obtém o resultado consolidado pelo endpoint :15020/stats/prometheus.
Após a ativação deste recurso, o ASM executa as seguintes operações nos pods:
Os métodos de coleta definidos pelas anotações
prometheus.ioantes da introdução do ASM são preservados nas variáveis de ambiente dos sidecar proxies.As métricas do Prometheus geradas pelas aplicações interceptadas pelo ASM e as métricas dos sidecar proxies são mescladas e exportadas para o endpoint
:15020/stats/prometheuspara coleta pelo Prometheus.
Etapa 1: Implantar uma aplicação de exemplo
Implante uma aplicação que contenha anotações prometheus.io. Para mais detalhes, consulte Implantar uma aplicação em uma instância ASM.
O código abaixo apresenta um exemplo de arquivo de deployment para a aplicação productpage:
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage-v1
labels:
app: productpage
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: productpage
version: v1
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9080"
prometheus.io/path: "/metrics"
labels:
app: productpage
version: v1
spec:
......
Após a implantação da aplicação productpage, o sistema gera as seguintes informações de pod:
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/pod-ips: 172.17.0.132
kubectl.kubernetes.io/default-container: productpage
kubectl.kubernetes.io/default-logs-container: productpage
kubernetes.io/psp: ack.privileged
prometheus.io/path: /metrics
prometheus.io/port: '9080'
prometheus.io/scrape: 'true'
No modelo YAML anterior, observe as seguintes anotações prometheus.io:
prometheus.io/path: /metrics
prometheus.io/port: '9080'
prometheus.io/scrape: 'true'
Etapa 2: Ativar a mesclagem de métricas do Istio com métricas de aplicação
Por padrão, esse recurso vem desativado nas instâncias ASM. Configure-o globalmente para toda a instância ou individualmente para cada workload adicionando a anotação prometheus.istio.io/merge-metrics: "true" aos pods da aplicação. Neste exemplo, a configuração será aplicada à instância ASM.
Faça login no console ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância ASM. No painel de navegação à esquerda, escolha .
Na seção Config Info, clique em Enable ao lado de Merge Istio's Metrics with Application Metrics. Na mensagem Enable Merging of Istio's Metrics with Application Metrics, clique em OK.
Caso não precise mais utilizar este recurso, desative-o executando uma das operações a seguir:
Se o recurso estiver ativado para uma instância ASM, clique em Disable ao lado de Merge Istio's Metrics with Application Metrics na seção Config Info. Na mensagem Disable Merging of Istio's Metrics with Application Metrics, clique em OK.
Se o recurso estiver ativado para um workload específico, adicione a anotação
prometheus.istio.io/merge-metrics: "false"ao pod correspondente.
Etapa 3: Visualize o resultado
Depois de ativar a mesclagem de métricas do Istio com as métricas da aplicação, reinicie o pod e verifique as novas informações.
O exemplo abaixo mostra o modelo YAML atualizado do pod:
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/pod-ips: 172.17.0.126
kubectl.kubernetes.io/default-container: productpage
kubectl.kubernetes.io/default-logs-container: productpage
kubernetes.io/psp: ack.privileged
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'
......
spec:
containers:
- args:
- proxy
- sidecar
......
env:
......
- name: ISTIO_PROMETHEUS_ANNOTATIONS
value: '{"scrape":"true","path":"/metrics","port":"9080"}'
O modelo YAML acima demonstra que as anotações prometheus.io foram atualizadas para o conteúdo seguinte. Além disso, uma nova variável de ambiente chamada ISTIO_PROMETHEUS_ANNOTATIONS foi incluída. O trecho de código a seguir confirma que o valor dessa variável corresponde exatamente às anotações prometheus.io originalmente configuradas na aplicação.
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'