Saltar al contenido principal
Esta guía le muestra cómo recopilar métricas de la aplicación Vantage en un clúster de AKS que ya tiene habilitada la supervisión administrada de Azure (Azure Monitor Workspace + Managed Grafana + el agente ama-metrics). Al finalizar, las métricas de la aplicación Vantage aparecerán junto con sus métricas de infraestructura en el mismo Azure Managed Grafana, recopiladas por un Prometheus en la malla que accede a los endpoints de Vantage a través de Istio mTLS.
Para entender por qué existe este patrón (incluida la restricción de Istio mTLS que lo motiva), consulte Descripción general de la supervisión.

Por qué existe este patrón

El agente ama-metrics implementado por Azure gestiona automáticamente las métricas de infraestructura de Kubernetes (kubelet, cadvisor, kube-state-metrics). También puede recopilar métricas del proxy de Istio, como istio_requests_total, mediante anotaciones de pod, ya que el sidecar de Envoy las expone en puertos de texto no cifrado. Las métricas de la aplicación Vantage son diferentes: se exponen en el puerto 8080 del container, que es interceptado por el sidecar de Envoy y está sujeto a la aplicación estricta de mTLS. El agente ama-metrics se ejecuta en kube-system sin un sidecar de Istio y no puede presentar certificados mTLS válidos, por lo que no puede recopilar métricas de endpoints de aplicaciones en namespaces integrados en la malla. Microsoft documenta esto como una limitación conocida: “Actualmente no se admite la recopilación de métricas desde una configuración de Istio con autenticación mutua TLS.” Para recopilar métricas de la aplicación Vantage, implementa una instancia de Prometheus dentro de la malla de Istio. Esta instancia de Prometheus se ejecuta con un sidecar de Istio, exporta los certificados de la malla, los usa para recopilar endpoints de aplicaciones a través de mTLS y envía las métricas mediante remote-write al mismo Azure Monitor Workspace que usa ama-metrics.

Cómo funciona

Las aplicaciones de Vantage están instrumentadas con SDK de OpenTelemetry y exponen métricas en formato Prometheus en /metrics-text a través del puerto 8080 del contenedor. Los servicios que exponen métricas llevan la etiqueta abbyy.platform.metrics.text.endpoint: "1". Prometheus en la malla recopila esas métricas de la siguiente manera:
  1. Se ejecuta con un sidecar de Istio (sidecar.istio.io/inject: "true").
  2. Exporta los certificados mTLS de Istio mediante la anotación de configuración del proxy OUTPUT_CERTS.
  3. Monta esos certificados en el contenedor de Prometheus en /etc/prom-certs/.
  4. Configura el ServiceMonitor (creado por el chart vantage-selfhosted en el Step 6) para recopilar métricas mediante scheme: https, usando el certificado de CA de Istio, el certificado de cliente y la clave.

Arquitectura

Requisitos previos

  • clúster de AKS con el complemento de malla de servicios de Istio habilitado (mTLS STRICT).
  • Azure Monitor Workspace aprovisionado y vinculado al clúster de AKS.
  • Azure Managed Grafana aprovisionado y vinculado a Azure Monitor Workspace.
  • agente ama-metrics en ejecución en el clúster (habilitado mediante AKS Monitor Settings).
  • emisor OIDC habilitado en el clúster de AKS (necesario para la identidad de carga de trabajo).
  • CRD de Prometheus Operator instalados (se incluyen con ama-metrics).

Paso 1: Aprovisione recursos de Azure

Si aún no ha creado los recursos de monitorización, hágalo ahora en el portal de Azure:
  1. Azure Monitor Workspace: Portal → “Azure Monitor workspaces” → Create. Use el mismo grupo de recursos y la misma región que su clúster de AKS. Convención de nomenclatura: amw-<cluster-name>.
  2. Azure Managed Grafana: Portal → “Azure Managed Grafana” → Create. Use el mismo grupo de recursos y la misma región. Vincúlelo al Azure Monitor Workspace durante la creación. Convención de nomenclatura: amg-<cluster-name>.
  3. Habilitar Prometheus en AKS: Portal → clúster de AKS → Monitoring → Monitor Settings → habilite “Metrics via managed Prometheus” y seleccione el Azure Monitor Workspace y la instancia de Grafana.
Verifique que los pods de ama-metrics estén en ejecución:

Paso 2: Cree el espacio de nombres de observabilidad con la inyección de Istio

Nota: Puede usar cualquier nombre de espacio de nombres, pero algunas funciones opcionales de Vantage (como la compatibilidad con KEDA) dependen de que los servicios de Prometheus estén en el espacio de nombres observability, por lo que se recomienda usar observability.
Compruebe la etiqueta de revisión de Istio que usan otros espacios de nombres incluidos en la malla:
Aplica la misma etiqueta al espacio de nombres observability:

Paso 3: Recopilar los detalles de ingesta de Azure Monitor Workspace

Obtenga los ID de recurso de la regla de recopilación de datos y del endpoint:
Obtén la URL del endpoint de ingesta de métricas:
Obtén el ID inmutable del DCR:
El grupo de recursos administrado sigue el patrón MA_<monitor-workspace-name>_<region>_managed.
Construya la URL completa de remote-write (la usará en el Step 5):

Step 4: Crear una identidad administrada para Prometheus

Cree una identidad administrada asignada por el usuario:
Anota clientId y principalId que aparecen en la salida. Asigna el rol Monitoring Metrics Publisher en la regla de recopilación de datos:
Obtenga la URL del emisor de OIDC:
Cree una credencial federada que asocie la identidad administrada con la cuenta de servicio de Prometheus:

Paso 5: Instalar Prometheus Operator

El agente ama-metrics instala los CRD de Prometheus, pero no ejecuta ningún operador que reconcilie los recursos personalizados de Prometheus. Instale únicamente el operador; deshabilite todo lo demás:

Step 6: Aplicar los manifiestos de Prometheus

Se requieren tres manifiestos (cuenta de servicio, RBAC y la instancia de Prometheus). Aplíquelos en el orden indicado. El ServiceMonitor de Vantage se crea por separado mediante el chart vantage-selfhosted (consulte más abajo). service-account.yaml: Cuenta de servicio de Prometheus con anotación de identidad de carga de trabajo:
rbac.yaml: ClusterRole y vinculación para el descubrimiento de objetivos:
prometheus.yaml: instancia de Prometheus con inyección del sidecar de Istio, exportación de certificados y remote-write a Azure Monitor:
El método de autenticación azureAd.sdk usa DefaultAzureCredential, que toma el token de identidad de carga de trabajo inyectado por la etiqueta azure.workload.identity/use: "true". Requiere Prometheus v3.60+.
Aplica las tres:

Configurar el ServiceMonitor de Vantage

El ServiceMonitor de Vantage se crea mediante el chart de Helm vantage-selfhosted, en lugar de aplicarlo manualmente. Instale o actualice el chart con un archivo de valores que configure el ServiceMonitor para recopilar métricas de Vantage a través de Istio mTLS mediante los certificados que exporta Prometheus en la malla:
Para obtener una explicación completa de la configuración de los certificados mTLS de Istio en la que se basan estas rutas, consulte Supervisión con Prometheus.

Step 7: Verifique

Compruebe que el pod de Prometheus esté ejecutándose con tres contenedores (prometheus, config-reloader, istio-proxy):
Haz un reenvío de puertos para inspeccionar los objetivos de scrape:
Abra http://localhost:9090/targets. Los targets deberían aparecer como UP, con scraping a través de https en /metrics-text:8080. Revise los logs de remote-write para detectar errores:
Si remote-write se realiza correctamente, muestra “Done replaying WAL” sin errores de autenticación. En Managed Grafana, consulta up{cluster="<cluster-name>"} en la vista Explore con el origen de datos de Managed Prometheus para confirmar que se están recibiendo métricas.

Notas operativas

  • El agente ama-metrics sigue ocupándose de las métricas de infraestructura de Kubernetes (kubelet, cadvisor, kube-state-metrics, node-exporter). No lo deshabilite.
  • Prometheus en la malla solo gestiona las métricas de la aplicación Vantage. Ambos escriben en el mismo Azure Monitor Workspace.
  • La autenticación remote-write de azureAd.sdk usa DefaultAzureCredential, que obtiene el token de identidad de carga de trabajo proyectado en el pod por el webhook de identidad de carga de trabajo de AKS. Esto requiere la anotación azure.workload.identity/client-id en la cuenta de servicio y la etiqueta azure.workload.identity/use: "true" en el pod.
  • La configuración azureAd.managedIdentity no funciona en este caso de uso: llama al endpoint IMDS del nodo, y la identidad asignada por el usuario no está asignada al pool de nodos de VMSS.
  • Los destinos UNKNOWN en la vista de destinos de Prometheus suelen corresponder a pods en estado Degraded o CrashLooping, no a un problema de scraping.
  • logLevel: debug en el CRD de Prometheus puede cambiarse a info una vez verificada la configuración.