Recopila métricas de tus cargas de trabajo

En esta página, se describe el proceso para recopilar métricas de las cargas de trabajo en entornos de dispositivos aislados de Google Distributed Cloud (GDC) para facilitar la supervisión y la observabilidad de los datos.

Puedes recopilar las métricas que producen tus componentes con el tiempo. La plataforma de supervisión ofrece una API personalizada para recopilar métricas de las cargas de trabajo en ejecución dentro del espacio de nombres del proyecto del dispositivo aislado de GDC. Para recopilar métricas, implementa un recurso personalizado MonitoringTarget en el espacio de nombres de tu proyecto en el servidor de la API de Management. Cuando se implementa este recurso, la plataforma de supervisión inicia la recopilación de datos.

El recurso personalizado MonitoringTarget dirige la canalización de supervisión para recopilar los pods designados dentro de tu proyecto. Estos pods deben exponer un extremo HTTP que entregue métricas en un formato de exposición de Prometheus, como OpenMetrics. Las métricas recopiladas se muestran en la instancia de Grafana de tu proyecto, lo que proporciona estadísticas sobre el estado operativo de tu aplicación.

Para configurar el recurso personalizado MonitoringTarget, debes especificar los pods dentro del espacio de nombres de tu proyecto para la recopilación de métricas. Puedes personalizar varios parámetros de configuración, como la frecuencia de recopilación, el extremo de métricas de los pods, las etiquetas y las anotaciones.

Antes de comenzar

Para administrar recursos personalizados MonitoringTarget, solicita los permisos necesarios a tu administrador.

Roles de IAM obligatorios

Comunícate con tu administrador de IAM del proyecto para solicitar los siguientes roles:

  • Creador de MonitoringTarget (monitoringtarget-creator): crea recursos personalizados MonitoringTarget en el espacio de nombres del proyecto.
  • Editor de MonitoringTarget (monitoringtarget-editor): Edita o borra recursos personalizados MonitoringTarget en el espacio de nombres del proyecto.
  • Visualizador de MonitoringTarget (monitoringtarget-viewer): Visualiza recursos personalizados MonitoringTarget en el espacio de nombres del proyecto.

Configura el recurso personalizado MonitoringTarget

El recurso personalizado MonitoringTarget le indica a la plataforma de supervisión dónde recopilar métricas. Puedes especificar los pods para los que recopilas métricas, el extremo de métricas de esos pods, la frecuencia de recopilación y cualquier configuración adicional.

Este recurso define las siguientes configuraciones:

  • Destinos: Los pods y sus extremos dentro de tu proyecto que exponen métricas.
  • Intervalo de recopilación: La frecuencia con la que deseas extraer métricas de los extremos seleccionados.
  • Personalizaciones de etiquetas: Reglas opcionales con cualquier modificación de etiquetas para las métricas.

Elige uno de los siguientes métodos para especificar extremos de métricas en el recurso personalizado MonitoringTarget:

  • Extremos estáticos: Declaras explícitamente el extremo (puerto, ruta de acceso, esquema) en la MonitoringTarget configuración.
  • Anotaciones: La información del extremo de métricas del pod se recupera de las anotaciones dentro del archivo Deployment del contenedor. Este método ofrece más flexibilidad si cada pod tiene extremos diferentes.

Extremos estáticos

Sigue estos pasos para exponer métricas de los pods seleccionados en un extremo definido de forma estática:

  1. Determina el proyecto del dispositivo aislado de GDC del que deseas recopilar métricas para la supervisión.

  2. En la especificación de tu pod, declara el puerto que entrega métricas en el campo containerPort. En el siguiente ejemplo, se muestra cómo declarar el puerto 2112 en la especificación del pod:

    # ...
    spec:
      template:
        spec:
          containers:
          - name: your-container-name
            ports:
            - containerPort: 2112
    # ...
    
  3. En la configuración de MonitoringTarget, especifica los detalles del extremo (puerto, ruta de acceso, esquema) en la sección podMetricsEndpoints para que coincidan con el puerto que expusiste en la especificación del pod.

    En el siguiente archivo YAML, se muestra un ejemplo de una configuración de MonitoringTarget en la que cada pod seleccionado debe exponer métricas en el mismo extremo, http://your-container-name:2112/metrics:

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
          # Choose pod labels to consider for this job.
          # Optional: Map of key-value pairs.
          # Default: No filtering by label.
          # To consider every pod in the project namespace, remove selector fields.
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          value: 2112
        path:
          # Choose any value for your endpoint.
          # The /metrics value is an example.
          value: /metrics
        scheme:
          value: http
    
  4. Aplica la configuración de MonitoringTarget al servidor de la API de Management dentro del mismo espacio de nombres que tus pods de destino:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Reemplaza lo siguiente:

    • KUBECONFIG_PATH: Es la ruta de acceso al archivo kubeconfig para el servidor de la API de Management.
    • MONITORING_TARGET_NAME: Es el nombre del archivo de definición MonitoringTarget.

La plataforma de supervisión comienza a recopilar métricas.

Anotaciones

Sigue estos pasos para exponer métricas con anotaciones si cada pod tiene extremos diferentes:

  1. Determina el proyecto del dispositivo aislado de GDC del que deseas recopilar métricas para la supervisión.

  2. Agrega las siguientes anotaciones a la sección annotations del archivo Deployment de tu contenedor:

    • prometheus.io/path
    • prometheus.io/port
    • prometheus.io/scheme

    En el siguiente ejemplo, se muestran anotaciones para las métricas en el puerto 2112:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: your-container-name
      namespace: your-project-namespace
      labels:
        app: your-app-label
      annotations:
        # These annotations are not required. They demonstrate selecting
        # pod metric endpoints through annotations.
        prometheus.io/path: /metrics
        prometheus.io/port: \"2112\"
        prometheus.io/scheme: http
    
  3. En la configuración de MonitoringTarget, especifica las anotaciones que agregaste al archivo Deployment del contenedor en la sección podMetricsEndpoints. Esta especificación le indica al recurso personalizado que recopile la información del extremo de métricas de las anotaciones en los pods seleccionados.

    En el siguiente archivo YAML, se muestra un ejemplo de una configuración de MonitoringTarget con anotaciones:

    apiVersion: monitoring.gdc.goog/v1
    kind: MonitoringTarget
    metadata:
    metadata:
      # Choose the same namespace as the workload pods.
      namespace: your-project-namespace
      name: your-container-name
    spec:
      selector:
        matchLabels:
          app: your-app-label
      podMetricsEndpoints:
        port:
          annotation: prometheus.io/port
        path:
          annotation: prometheus.io/path
        scheme:
          annotation: prometheus.io/scheme
    
  4. Aplica la configuración de MonitoringTarget al servidor de la API de Management dentro del mismo espacio de nombres que tus pods de destino:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
    

    Reemplaza lo siguiente:

    • KUBECONFIG_PATH: Es la ruta de acceso al archivo kubeconfig para el servidor de la API de Management.
    • MONITORING_TARGET_NAME: Es el nombre del archivo de definición MonitoringTarget.

La plataforma de supervisión comienza a recopilar métricas.

Consulta la especificación MonitoringTargetcompleta y la documentación de referencia de la API para obtener campos y opciones adicionales.

Especificación completa de MonitoringTarget

En el siguiente archivo YAML, se muestra un ejemplo de la especificación completa del recurso personalizado MonitoringTarget. Para obtener más información y una descripción completa de los campos, consulta la documentación de referencia de la API.

apiVersion: monitoring.gdc.goog/v1
kind: MonitoringTarget
metadata:
  # Choose the same namespace as the workload pods.
  namespace: PROJECT_NAMESPACE
  name: MONITORING_TARGET_NAME
spec:
  # Choose matching pattern that identifies pods for this job.
  # Optional
  # Relationship between different selectors: AND
  selector:
    # Choose clusters to consider for this job.
    # Optional: List
    # Default: All clusters applicable to this project.
    # Relationship between different list elements: OR
    matchClusters:
    - string

    # Choose pod labels to consider for this job.
    # Optional: Map of key-value pairs.
    # Default: No filtering by label.
    # Relationship between different pairs: AND
    matchLabels:
      key1: value1

    # Choose annotations to consider for this job.
    # Optional: Map of key-value pairs
    # Default: No filtering by annotation
    # Relationship between different pairs: AND
    matchAnnotations:
      key1: value1

  # Configure the endpoint exposed for this job.
  podMetricsEndpoints:
    # Choose a port either through static value or annotation.
    # Optional
    # Annotation takes priority.
    # Default: static port 80
    port:
      value: integer
      annotation: string

    # Choose a path either through static value or annotation.
    # Optional
    # Annotation takes priority
    # Default: static path /metrics
    path:
      value: string
      annotation: string

    # Choose a scheme either through a static value (http or https) or annotation.
    # Optional
    # Annotation takes priority
    # Default: static scheme http
    scheme:
      value: string
      annotation: string

    # Choose the frequency to scrape the metrics endpoint defined in podMetricsEndpoints
    # Optional
    # Default: 60s
    scrapeInterval: string

    # Dynamically rewrite the label set of a target before it gets scraped.
    # https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
    # Optional
    # Default: No filtering by label
    metricsRelabelings:
    - sourceLabels:
      - string
      separator: string
      regex: string
      action: string
      targetLabel: string
      replacement: string

Reemplaza lo siguiente:

  • PROJECT_NAMESPACE: Es el espacio de nombres de tu proyecto.
  • MONITORING_TARGET_NAME: Es el nombre del archivo de definición MonitoringTarget.