Comienza a usar la recopilación administrada

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En este documento, se describe cómo configurar el Servicio administrado de Google Cloud para Prometheus con la recopilación administrada. La configuración es un ejemplo mínimo de transferencia de trabajo, mediante una implementación de Prometheus que supervisa una aplicación de ejemplo y almacena métricas recopiladas en Monarch.

Este documento te muestra cómo hacer lo siguiente:

  • Configurar el entorno y las herramientas de línea de comandos.
  • Configurar la recopilación administrada para tu clúster.
  • Configurar un recurso para la recopilación de destino y la transferencia de métricas.
  • Migrar los recursos personalizados de operadores de Prometheus existentes.

Te recomendamos que uses la recopilación administrada. Reduce la complejidad de implementar, escalar, fragmentar, configurar y mantener los colectores. La recopilación administrada es compatible con GKE y todos los demás entornos de Kubernetes.

La colección administrada ejecuta colectores basados en Prometheus como un Daemonset y garantiza la escalabilidad mediante la recopilación de objetivos solo en los nodos ubicados. Configura los recopiladores con recursos personalizados básicos para recopilar exportadores mediante la colección de extracción y, luego, los recopiladores envían los datos extraídos al almacén central de datos de Monarch. Google Cloud nunca accede directamente a tu clúster para extraer o recopilar datos de métricas. Los recopiladores envían datos a Google Cloud. Para obtener más información sobre la recopilación de datos administrados y autoimplementados, consulta Recopilación de datos con el servicio administrado para Prometheus y Transferencia y consultas con colección administrada y autoimplementada.

Antes de comenzar

En esta sección, se describe la configuración necesaria para las tareas descritas en este documento.

Configura proyectos y herramientas

Si deseas usar el Servicio administrado de Google Cloud para Prometheus, necesitas los siguientes recursos:

  • Un proyecto de Google Cloud con la API de Cloud Monitoring habilitada

    • Si no tienes un proyecto de Cloud, haz lo siguiente:

      1. En la consola de Google Cloud, ve a Proyecto Nuevo:

        Crear un proyecto nuevo

      2. En el campo Nombre del proyecto, ingresa un nombre para tu proyecto y, luego, haz clic en Crear.

      3. Ve a facturación:

        Ir a Facturación

      4. Selecciona el proyecto que acabas de crear si aún no está seleccionado en la parte superior de la página.

      5. Se te solicitará que elijas un perfil de pagos existente o que crees uno nuevo.

      La API de Monitoring está habilitada de forma predeterminada para proyectos nuevos.

    • Si ya tienes un proyecto de Cloud, asegúrate de que la API de Monitoring esté habilitada:

      1. Ve a API y servicios:

        Ir a API y servicios (APIs & Services)

      2. Selecciona tu proyecto.

      3. Haga clic en Habilitar API y servicios.

      4. Busca “Monitoring”.

      5. En los resultados de la búsqueda, haz clic en "API de Cloud Monitoring".

      6. Si no se muestra "API habilitada", haz clic en el botón Habilitar.

  • Un clúster de Kubernetes. Si no tienes un clúster de Kubernetes, sigue las instrucciones en la Guía de inicio rápido para GKE.

También necesitas las siguientes herramientas de línea de comandos:

  • gcloud
  • kubectl

Las herramientas gcloud y kubectl forman parte de la CLI de Google Cloud. Para obtener información sobre cómo instalarlos, consulta Administra los componentes de la CLI de Google Cloud. Para ver los componentes de la CLI de gcloud que instalaste, ejecuta el siguiente comando:

gcloud components list

Configura tu entorno

Para evitar ingresar repetidamente el ID del proyecto o el nombre del clúster, realiza la siguiente configuración:

  • Configura las herramientas de línea de comandos como se indica a continuación:

    • Configura la CLI de gcloud para hacer referencia al ID del proyecto de Cloud:

      gcloud config set project PROJECT_ID
      
    • Configura la CLI de kubectl para usar tu clúster:

      kubectl config set-cluster CLUSTER_NAME
      

    Para obtener más información sobre estas herramientas, consulta lo siguiente:

Configura un espacio de nombres

Crea el espacio de nombres gmp-test de Kubernetes para los recursos que crees como parte de la aplicación de ejemplo:

kubectl create ns gmp-test

Configura la recopilación administrada

Para descargar e implementar una colección administrada en tu clúster, debes aplicar los manifiestos setup y operator para el servicio administrado. Puedes aplicar los manifiestos de la siguiente manera:

  • La consola de Google Cloud para Google Kubernetes Engine
  • Google Cloud CLI. Para usar la CLI de gcloud, debes ejecutar la versión 1.21.4-gke.300 o posterior de GKE, y debes instalar el componente beta de la CLI de gcloud.
  • Terraform para Google Kubernetes Engine. Si quieres usar Terraform a fin de habilitar el servicio administrado para Prometheus, debes ejecutar la versión 1.21.4-gke.300 de GKE o una más reciente.
  • La CLI de kubectl para entornos de Kubernetes que no son de GKE.

Google Cloud Console

Puedes hacer lo siguiente con la consola de Google Cloud:

  • Aplicar los manifiestos a un clúster de GKE existente.
  • Crear un nuevo clúster de GKE con los manifiestos aplicados.

Para actualizar un clúster existente con los manifiestos, haz lo siguiente:

  1. En la consola de Google Cloud selecciona Kubernetes Engine o usa el siguiente botón:

    Ir a Kubernetes Engine

  2. Selecciona Clústeres.

  3. Haz clic en el nombre del clúster.

  4. En la lista Funciones, busca la opción Managed Service para Prometheus. Si aparece como inhabilitado, haz clic en Editar y, luego, selecciona Habilitar Managed Service para Prometheus.

  5. Haz clic en Guardar cambios.

Para crear un clúster con los manifiestos aplicados, haz lo siguiente:

  1. En la consola de Google Cloud selecciona Kubernetes Engine o usa el siguiente botón:

    Ir a Kubernetes Engine

  2. Selecciona Clústeres.

  3. Haga clic en Crear.

  4. Haz clic en Configurar en la opción GKE Standard y configura el clúster mediante el panel Conceptos básicos del clúster.

  5. En el panel de navegación, haz clic en Funciones.

  6. En la sección Operaciones, selecciona Habilitar Managed Service para Prometheus.

  7. Haz clic en Guardar.

CLI de gcloud

Puedes hacer lo siguiente con la CLI de gcloud:

  • Aplicar los manifiestos a un clúster de GKE existente.
  • Crear un nuevo clúster de GKE con los manifiestos aplicados.

Estos comandos pueden tardar hasta 5 minutos en completarse.

Primero, configura tu proyecto:

gcloud config set project PROJECT_ID

Para actualizar un clúster existente con los manifiestos, ejecuta uno de los siguientes comandos update en función de si el clúster es zonal o regional:

  • gcloud beta container clusters update CLUSTER_NAME --enable-managed-prometheus --zone ZONE
    
  • gcloud beta container clusters update CLUSTER_NAME --enable-managed-prometheus --region REGION
    

Para crear un clúster con los manifiestos aplicados, ejecuta el siguiente comando:

gcloud beta container clusters create CLUSTER_NAME --zone ZONE --enable-managed-prometheus

Terraform

A fin de obtener instrucciones para configurar la recopilación administrada mediante Terraform, consulta el registro de Terraform para google_container_cluster (beta).

Para obtener información general sobre el uso de Google Cloud con Terraform, consulta Terraform con Google Cloud.

kubectl CLI

Para aplicar los manifiestos cuando usas un clúster de Kubernetes que no es de GKE, ejecuta los siguientes comandos:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.3-gke.0/manifests/setup.yaml

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.3-gke.0/manifests/operator.yaml

Después de aplicar los manifiestos, la recopilación administrada se ejecutará, pero aún no se generarán métricas. Debes implementar un recurso de PodMonitoring que recopile un extremo de métricas válido para ver cualquier dato en la IU de consulta.

Para obtener documentación de referencia sobre el operador de servicio administrado para Prometheus, consulta la página de manifiestos.

Implementa la aplicación de ejemplo

El servicio administrado proporciona un manifiesto para una aplicación de ejemplo que emite métricas de Prometheus en su puerto metrics. La aplicación usa tres réplicas.

Para implementar la aplicación de ejemplo, ejecuta el siguiente comando:

kubectl -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.3-gke.0/examples/example-app.yaml

Configura un recurso PodMonitoring

Para transferir los datos de métricas que emite la aplicación de ejemplo, usa la recopilación de objetivos. La recopilación de objetivos y la transferencia de métricas se configuran mediante los recursos personalizados de Kubernetes. El servicio administrado usa recursos personalizados (CR) de PodMonitoring.

Un CR de PodMonitoring recopila objetivos solo en el espacio de nombres en el que se implementa el CR. Para recopilar objetivos en varios espacios de nombres, implementa el mismo CR de PodMonitoring en cada espacio de nombres. Para verificar que el recurso PodMonitoring esté instalado en el espacio de nombres deseado, ejecuta kubectl get podmonitoring -A.

A fin de obtener documentación de referencia sobre todos los servicios administrados para las CR de Prometheus, consulta la referencia de prometheus-engine/doc/api.

El siguiente manifiesto define un recurso PodMonitoring, prom-example, en el espacio de nombres gmp-test. El recurso usa un selector de etiquetas de Kubernetes para buscar todos los Pods en el espacio de nombres que tienen la etiqueta app con el valor prom-example. Los Pods coincidentes se copian en un puerto llamado metrics, cada 30 segundos, en la ruta HTTP /metrics.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: prom-example
spec:
  selector:
    matchLabels:
      app: prom-example
  endpoints:
  - port: metrics
    interval: 30s

Para aplicar este recurso, ejecuta el siguiente comando:

kubectl -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.3-gke.0/examples/pod-monitoring.yaml

El colector administrado ahora recopila los Pods coincidentes.

Para configurar la recopilación horizontal que se aplica a un rango de pods en todos los espacios de nombres, usa el recurso ClusterPodMonitoring. El recurso ClusterPodMonitoring proporciona la misma interfaz que el recurso de PodMonitoring, pero no limita los pods detectados en un espacio de nombres determinado.

Si ejecutas en GKE, puedes hacer lo siguiente:

Si ejecutas fuera de GKE, debes crear una cuenta de servicio y autorizarla para que escriba tus datos de métricas, como se describe en la siguiente sección.

Proporciona credenciales de forma explícita

Cuando se ejecuta en GKE, el servidor de recopilación de Prometheus recupera credenciales de forma automática del entorno según la cuenta de servicio predeterminada de Compute Engine o la configuración de Workload Identity.

En los clústeres de Kubernetes que no sean de GKE, las credenciales deben proporcionarse de manera explícita a través del recurso OperatorConfig en el espacio de nombres gmp-public.

  1. Configura el contexto en tu proyecto de destino:

    gcloud config set project PROJECT_ID
    
  2. Crear una cuenta de servicio:

    gcloud iam service-accounts create gmp-test-sa
    

  3. Otorga permisos obligatorios a la cuenta de servicio:

    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  4. Crea y descarga una clave para la cuenta de servicio:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  5. Agrega el archivo de claves como un secreto a tu clúster que no es de GKE:

    kubectl -n gmp-public create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  6. Abre el recurso OperatorConfig para editarlo:

    kubectl -n gmp-public edit operatorconfig config
    

  7. Agrega el texto que se muestra en negrita al recurso:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      credentials:
        name: gmp-test-sa
        key: key.json
    
    Asegúrate de agregar estas credenciales a la sección rules para que la evaluación de la regla administrada funcione.

  8. Guarda el archivo y cierra el editor. Después de aplicar el cambio, los Pods se vuelven a crear y comienzan a autenticarse en el backend de la métrica con la cuenta de servicio determinada.

Temas adicionales para la recopilación administrada

En esta sección, se describe cómo hacer lo siguiente:

  • Configura la recopilación de destino con Terraform.
  • Filtra los datos que exportas al servicio administrado.
  • Recopila métricas de Kubelet y cAdvisor.
  • Convierte tus recursos del operador de promesa existentes para usarlos con el servicio administrado.
  • Ejecuta una colección administrada fuera de GKE.

Configura el scraping de destino con Terraform

Puedes automatizar la creación y la administración de los recursos de PodMonitoring y ClusterPodMonitoring mediante el tipo de recurso de Terraform kubernetes_manifest o el tipo de recurso de Terraform kubectl_manifest.Cualquiera te permite especificar recursos personalizados de forma arbitraria.

Para obtener información general sobre el uso de Google Cloud con Terraform, consulta Terraform con Google Cloud.

Filtrar métricas exportadas

Si recopilas muchos datos, es recomendable que evites que algunas series temporales se envíen al servicio administrado para Prometheus a fin de mantener los costos bajos. Puedes hacerlo con las reglas de reetiquetado de Prometheus con una acción keep para una lista de anunciantes permitidos o una acción drop para una lista de bloqueo. Para la recopilación administrada, esta regla va a la sección metricRelabeling de tu recurso de PodMonitoring o ClusterPodMonitoring.

Por ejemplo, la siguiente regla de reetiquetado de métricas filtrará cualquier métrica que comience con foo_bar_, foo_baz_ o foo_qux_:

  metricRelabeling:
  - action: drop
    regex: foo_(bar|baz|qux)_.+
    sourceLabels: [__name__]

Para obtener sugerencias adicionales sobre cómo reducir los costos, consulta Controles de costos y atribución.

Recopila métricas de Kubelet y cAdvisor

Kubelet expone las métricas sobre sí mismo y las de cAdvisor sobre contenedores que se ejecutan en su nodo. Pueden transferirse mediante la actualización de OperatorConfig.

  1. Abre el recurso OperatorConfig para editarlo:

    kubectl -n gmp-public edit operatorconfig config
    
  2. Agrega la sección collection, que se muestra en negrita, al recurso:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      kubeletScraping:
        interval: 30s
    
  3. Guarda el archivo y cierra el editor.

Después de un tiempo breve, los extremos de la métrica de Kubelet se recopilarán y las métricas estarán disponibles para realizar consultas en el servicio administrado de Prometheus.

La recopilación de Kubelet viene con algunos filtros predeterminados y puedes agregar filtros adicionales a la sección collection del recurso OperatorConfig como se muestra a continuación. La sección de configuración filter.matchOneOf tiene la misma semántica que los parámetros match[] para la federación de Prometheus.

En el siguiente ejemplo, se filtran las métricas que comienzan con container_foo o container_bar:

collection:
  filter:
    matchOneOf:
    - '{__name__!~"container_foo.*|container_bar.*"}'

También puedes usar este filtro de colección de OperatorConfig para fines de depuración. Por ejemplo, es posible que desees inhabilitar de forma temporal la recopilación de una métrica específica en tu clúster sin modificar ningún recurso de PodMonitoring.

Convierte recursos de operador de Prometheus existentes

Por lo general, puedes convertir los recursos existentes del operador de Prometheus en los servicios administrados de los recursos PodMonitoring y ClusterPodMonitoring de la colección administrada de Prometheus.

Por ejemplo, el recurso ServiceMonitor define la supervisión para un conjunto de servicios. El recurso PodMonitoring entrega un subconjunto de los campos que entrega el recurso ServiceMonitor. Puedes convertir un CR de ServiceMonitor en un CR de PodMonitoring si asignas los campos como se describe en la siguiente tabla:

monitoring.coreos.com/v1
ServiceMonitor
Compatibilidad
 
monitoring.googleapis.com/v1
PodMonitoring
.ServiceMonitorSpec.Selector Idénticos .PodMonitoringSpec.Selector
.ServiceMonitorSpec.Endpoints[] .TargetPort se asigna a .Port
.Path: compatible
.Interval: compatible
.Timeout: compatible
.PodMonitoringSpec.Endpoints[]
.ServiceMonitorSpec.TargetLabels El PodMonitor debe especificar lo siguiente:
.FromPod[].Frometiqueta del pod
.FromPod[].Toetiqueta del objetivo
.PodMonitoringSpec.TargetLabels

El siguiente es un CR de ServiceMonitor de muestra. El contenido en negrita se reemplaza en la conversión y el contenido en cursiva se asigna directamente:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - targetPort: web
    path: /stats
    interval: 30s
  targetLabels:
  - foo

La siguiente es la CR de PodMonitoring analógica, si tu servicio y sus Pods están etiquetados con app=example-app. Si esta suposición no se aplica, debes usar los selectores de etiquetas del recurso de servicio subyacente.

El contenido en negrita se reemplazó en la conversión:

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: example-app
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - port: web
    path: /stats
    interval: 30s
  targetLabels:
    fromPod:
    - from: foo # pod label from example-app Service pods.
      to: foo

Siempre puedes seguir usando los recursos existentes del operador de Prometheus y las configuraciones de implementación si usas colectores autoimplementados en lugar de colectores administrados. Puedes consultar las métricas enviadas desde ambos tipos de colectores, por lo que podrías usar colectores autoimplementados para tus implementaciones existentes de Prometheus mientras usas colectores administrados para implementaciones nuevas de Prometheus.

Etiquetas reservadas

Managed Service para Prometheus agrega de forma automática las siguientes etiquetas a todas las métricas recopiladas:

  • project_id: El identificador del proyecto de Google Cloud asociado a tu métrica.
  • location: Es la ubicación física (región de Google Cloud) en la que se almacenan los datos. Este valor suele ser la región de tu clúster de GKE. Si se recopilan datos de una implementación local o de AWS, el valor puede ser la región de Google Cloud más cercana.
  • cluster: El nombre del clúster de Kubernetes asociado con tu métrica.
  • namespace: El nombre del espacio de nombres de Kubernetes asociado a tu métrica.
  • job: La etiqueta de trabajo del destino de Prometheus, si se conoce; puede estar vacía para los resultados de la evaluación de reglas.
  • instance: La etiqueta de la instancia del destino de Prometheus, si se conoce; puede estar vacía para los resultados de la evaluación de la regla.

Si bien no se recomienda cuando se ejecuta en Google Kubernetes Engine, puedes anular las etiquetas project_id, location y cluster. Para ello, agrégalos como args al recurso Deployment en operator.yaml. Si usas etiquetas reservadas como etiquetas de métrica, Managed Service para Prometheus las vuelve a etiquetar de forma automática con el prefijo exported_. Este comportamiento coincide con la forma en que Prometheus ascendente maneja los conflictos con etiquetas reservadas.

Eliminación

Para inhabilitar la recopilación administrada que se implementó mediante gcloud o la IU de GKE, ejecuta el siguiente comando:

gcloud beta container clusters update CLUSTER_NAME --disable-managed-prometheus

Para inhabilitar la recopilación administrada que se implementó mediante kubectl, ejecuta el siguiente comando:

kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.3-gke.0/manifests/operator.yaml

Ejecuta una colección administrada fuera de GKE

En entornos de GKE, puedes ejecutar colecciones administradas sin ninguna configuración adicional. En otros entornos de Kubernetes, debes proporcionar de forma explícita credenciales, un valor project-id para contener las métricas, un valor location (región de Google Cloud) en el que se almacenarán las métricas. y un valor cluster para guardar el nombre del clúster en el que se ejecuta el colector.

Como gcloud no funciona fuera de los entornos de Google Cloud, debes implementar mediante kubectl. A diferencia de gcloud, la implementación de la colección administrada mediante kubectl no actualiza de forma automática el clúster cuando hay una versión nueva disponible. Recuerda mirar la página de versiones para conocer las versiones nuevas y actualizarla de forma manual si vuelves a ejecutar los comandos de kubectl con la versión nueva.

Puedes proporcionar una clave de cuenta de servicio si modificas el recurso OperatorConfig dentro de operator.yaml como se describe en Proporciona credenciales de forma explícita. Puedes proporcionar valores de project-id, location y cluster si los agregas como args al recurso de implementación en operator.yaml.

Recomendamos elegir project-id en función de tu modelo de usuario planificado para las lecturas. Elige un proyecto para almacenar métricas en función de cómo planeas organizar las lecturas más tarde a través de permisos de métricas. Si no te importa, puedes colocar todo en un proyecto.

Para location, te recomendamos que elijas la región de Google Cloud más cercana a tu implementación. Cuanto más lejos se encuentre la región de Google Cloud elegida de tu implementación, más latencia de escritura tendrás y más te verás afectado por posibles problemas de herramientas de redes. Es posible que desees consultar esta lista de regiones en varias nubes. Si no te importa, puedes colocar todo en una región de Google Cloud. No puedes usar global como tu ubicación.

Para cluster, recomendamos elegir el nombre del clúster en el que se implementa el operador.

Cuando se configura correctamente, tu OperatorConfig debería verse así:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    collection:
      credentials:
        name: gmp-test-sa
        key: key.json
    rules:
      credentials:
        name: gmp-test-sa
        key: key.json

Y tu recurso de implementación debería verse así:

apiVersion: apps/v1
kind: Deployment
...
spec:
  ...
  template:
    ...
    spec:
      ...
      containers:
      - name: operator
        ...
        args:
        - ...
        - "--project-id=PROJECT_ID"
        - "--cluster=CLUSTER_NAME"
        - "--location=ZONE"

En este ejemplo, se supone que configuraste la variable ZONE como un valor como us-central1-b.

La ejecución del servicio administrado para Prometheus fuera de Google Cloud genera tarifas de entrada de datos y puede generar tarifas de salida de datos si se ejecuta en otra nube.

Lecturas adicionales de recursos personalizados de la colección administrada

Para ver la documentación de referencia sobre todos los servicios personalizados de los servicios administrados de Prometheus, consulta la referencia de prometheus-engine/doc/api.

¿Qué sigue?