Em aplicações integradas ao Prometheus, use sidecar proxies para expor as métricas da aplicação mediante a mesclagem com as métricas do Istio. Este tópico descreve como realizar essa integração.
Pré-requisitos
Crie uma instância do Service Mesh (ASM) versão 1.17.2.30 ou posterior. Para mais informações, consulte Crie uma instância do ASM ou Atualize uma instância do ASM.
Este recurso não é adequado para cenários com métricas de aplicação sensíveis. A coleta das métricas da aplicação ocorre em conjunto com as do Istio. Portanto, usuários autorizados a visualizar métricas do Istio também terão acesso às métricas da aplicação.
Descrição do recurso
Ao ativar a mesclagem de métricas do Istio com as da aplicação, o ASM combina ambos os conjuntos de dados. O sistema adiciona as anotações prometheus.io da aplicação a todos os pods no plano de dados, habilitando a coleta de métricas pelo Prometheus. Se essas anotações já existirem, serão sobrescritas. Os sidecar proxies mesclam as métricas do Istio com as da aplicação, permitindo que o Prometheus obtenha os dados mesclados no endpoint :15020/stats/prometheus.
Após a ativação desse recurso, o ASM executa as seguintes operações nos pods:
Salva nas variáveis de ambiente dos sidecar proxies os métodos de coleta anotados com
prometheus.ioantes da introdução do ASM.O sidecar proxy mescla as métricas do Prometheus da aplicação com as próprias métricas e expõe o resultado combinado no 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 informações, consulte Implante uma aplicação em uma instância do ASM.
O código abaixo exemplifica o arquivo de deployment da 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 da aplicação
Por padrão, esse recurso permanece desativado nas instâncias do ASM. Configure-o globalmente para uma instância do ASM 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 aplica-se à instância do ASM.
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 seção Config Info, clique em Enabled ao lado de Merge Istio's Metrics with Application Metrics. Na caixa de diálogo Enable Merging of Istio's Metrics with Application Metrics, clique em OK.
Se não precisar mais utilizar este recurso, desative-o executando uma das seguintes operações:
Globalmente: Na seção Config Info, clique em Disable ao lado de Merge Istio's Metrics with Application Metrics. Na caixa de diálogo Disable Merging of Istio's Metrics with Application Metrics, clique em OK.
Para workloads específicos, adicione a anotação
prometheus.istio.io/merge-metrics: "false"ao pod correspondente.
Etapa 3: Visualizar o resultado
Após ativar a mesclagem de métricas do Istio com as da aplicação, reinicie o pod e visualize as informações atualizadas.
O código abaixo exemplifica o modelo YAML 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 anterior demonstra a atualização das anotações prometheus.io para o conteúdo abaixo. Além disso, o sistema adicionou a variável de ambiente ISTIO_PROMETHEUS_ANNOTATIONS. O exemplo de código a seguir confirma que o valor dessa variável corresponde às anotações prometheus.io configuradas originalmente na aplicação.
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'