Migra a las métricas de carga de trabajo de GKE desde el sidecar de Stackdriver Prometheus

En este instructivo, se describe cómo migrar una canalización de recopilación de métricas basada en el sidecar de Stackdriver Prometheus a Métricas de carga de trabajo de Google Kubernetes Engine (GKE) completamente administrado. Usar las métricas de cargas de trabajo de GKE en lugar del sidecar de Stackdriver Prometheus tiene muchos beneficios:

  • Configuración sencilla: Puedes comenzar a recopilar métricas con un solo comando de kubectl para implementar un recurso personalizado de PodMonitor.
  • Alto grado de configuración: Ajusta los extremos de recopilación, la frecuencia y otros parámetros.
  • Completamente administrado: Google mantiene la canalización, lo que reduce el costo total de propiedad.
  • Controla los costos: Administra los costos de Cloud Monitoring con facilidad mediante el filtrado flexible de métricas.
  • Estándar abierto: Configura las métricas de cargas de trabajo con el recurso personalizado PodMonitor, que se modela después del recurso PodMonitor del operador de Prometheus.
  • Compatibilidad con HPA: Compatible con el adaptador de métricas personalizadas de Stackdriver para habilitar el ajuste de escala automático horizontal en las métricas personalizadas.
  • Mejor precio: Precios más intuitivos, predecibles y más bajos.
  • Compatibilidad con Autopilot: Las métricas de carga de trabajo de GKE están disponibles para los clústeres de GKE Standard y GKE Autopilot.

Confirma que usas el sidecar de Stackdriver Prometheus

El sidecar de Stackdriver Prometheus era el enfoque recomendado para recopilar métricas del estilo de Prometheus de los clústeres de GKE y transferirlas a Cloud Monitoring. En este enfoque, una instalación existente de Prometheus, que por lo general se ejecuta como StatefulSet o Deployment en GKE, tiene un sidecar que exporta todas las métricas que recopila en Cloud Monitoring. El gráfico de Helm para Prometheus proporciona una forma conveniente de configurar esta integración.

Determina si las métricas de la carga de trabajo de GKE cubren tu uso

Con la siguiente lista de tareas, puedes determinar si usas alguna función del enfoque de sidecar de Stackdriver Prometheus que no se puede reproducir mediante las métricas de carga de trabajo de GKE.

Función Asistencia y soluciones
¿Se usa Prometheus para supervisar cualquier elemento que no sea un Pod en el mismo clúster? Para determinar esto, busca el uso de lo siguiente:
  • static_config
  • cualquier complemento de descubrimiento de servicios que no sea kubernetes_sd_config
  • cualquier función kubernetes_sd_config que no sea endpoint o pod
  • api_server o kubeconfig que se usan para apuntar a un clúster de Kubernetes diferente
La función pod es compatible de inmediato. La función endpoint se puede simular mediante la exposición y la denominación del puerto.
¿Los Pods se seleccionan en función de los campos en lugar de las etiquetas? Usa un selector de etiquetas equivalente, que puede requerir la adición de etiquetas nuevas a los pods deseados.
¿Prometheus se configura con alguna forma de autorización HTTP o TLS mutua para la recopilación? Esta función no es compatible con las métricas de carga de trabajo de GKE.
¿Prometheus está configurado con metric_relabel_configs que usa acciones distintas de keep y drop? Esta función no es compatible con las métricas de carga de trabajo de GKE.
¿Usas las funciones Agregador de contadores o cambio de nombre de métricas del sidecar Stackdriver Prometheus? Esta función no es compatible con las métricas de carga de trabajo de GKE.
¿La configuración de Prometheus incluye alertas? Conviértelos en alertas dentro de Monitoring
¿La configuración de tu sidecar incluye static_metadata? Las métricas de la carga de trabajo de GKE recopilan tus métricas, pero no tienen en cuenta la documentación.

Migra la configuración de Prometheus a los recursos personalizados de PodMonitor

Para cada trabajo (elemento en el array scrape_configs) definido en la configuración de Prometheus, crea un recurso personalizado PodMonitor correspondiente. A continuación, se muestra un ejemplo ilustrativo:

Configuración de Prometheus CRD de PodMonitor

scrape_configs:
- job_name: example
  metrics_path: /metrics
  scheme: http
  scrape_interval: 20s
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - gke-workload-metrics
    selectors:
    - role: endpoints
      label: "app=prom-example"
      field: "port=metrics-port"

apiVersion: monitoring.gke.io/v1alpha1
kind: PodMonitor
metadata:
  name: example
spec:
  namespaceSelector:
    matchNames:
    - gke-workload-metrics
  selector:
    matchLabels:
      app: prom-example
  podMetricsEndpoints:
  - port: metrics-port
    path: /metrics
    scheme: http
    interval: 20s

Migra la configuración del archivo adicional a los recursos personalizados de PodMonitor

Los filtros configurados a nivel de sidecar se aplican a todos los trabajos de recopilación. Como resultado, debes adjuntar esta configuración a cada CRD de PodMonitor que creaste en el paso anterior.

CLI de sidecar CRD de PodMonitor

$ stackdriver-prometheus-sidecar \
--include='metric_name{label="foo"}'

apiVersion: monitoring.gke.io/v1alpha1
kind: PodMonitor
metadata:
  name: example
spec:
  namespaceSelector:
    matchNames:
    - gke-workload-metrics
  selector:
    matchLabels:
      app: prom-example
  podMetricsEndpoints:
  - port: metrics-port
    path: /metrics
    scheme: http
    interval: 20s
    metricRelabelings:
      - sourceLabels: [__name__, label]
        regex: "^metric_name;foo$"
        action: keep
      - sourceLabels: [__name__]

Visualiza métricas en Google Cloud Monitoring

Usa el Explorador de métricas para verificar que la métrica ahora se transfiera a través de la canalización de métricas de carga de trabajo de GKE.

Ten en cuenta que si la métrica se llamaba external.googleapis.com/prometheus/metric_name, ahora se llama workload.googleapis.com/metric_name. Recuerda modificar los paneles o alertas que dependan de estas métricas para usar el esquema de nombres nuevo en su lugar.