En esta página se describe el proceso para extraer métricas de cargas de trabajo en entornos con air gap de Google Distributed Cloud (GDC) para facilitar la monitorización y la observabilidad de los datos.
Puedes raspar y recoger las métricas que producen tus componentes a lo largo del tiempo. La plataforma de monitorización ofrece una API personalizada para extraer métricas de las cargas de trabajo en ejecución en el espacio de nombres de tu proyecto de Distributed Cloud. Para obtener métricas, debes implementar un recurso personalizado MonitoringTarget
en el espacio de nombres de tu proyecto en el servidor de la API Management. Cuando se implementa este recurso, la plataforma de monitorización inicia la recogida de datos.
El recurso personalizado MonitoringTarget
dirige la canalización de monitorización para que raspe los pods designados de tu proyecto. Estos pods deben exponer un endpoint HTTP que proporcione métricas en un formato de exposición de Prometheus, como OpenMetrics.
Las métricas obtenidas se muestran en la instancia de Grafana de tu proyecto, lo que te permite conocer el estado operativo de tu aplicación.
Para configurar el recurso personalizado MonitoringTarget
, debes especificar los pods de tu espacio de nombres de proyecto para la recogida de métricas. Puedes personalizar varios ajustes, como la frecuencia de raspado, el endpoint de métricas de los pods, las etiquetas y las anotaciones.
Antes de empezar
Para obtener los permisos que necesitas para gestionar recursos personalizados de MonitoringTarget
, pide a tu administrador de gestión de identidades y accesos de la organización o del proyecto que te conceda uno de los roles de MonitoringTarget
asociados.
En función del nivel de acceso y de los permisos que necesites, puedes obtener los roles de creador, editor o lector de este recurso en una organización o en un proyecto. Para obtener más información, consulta Preparar permisos de gestión de identidades y accesos.
Configura el MonitoringTarget
recurso personalizado
El recurso personalizado MonitoringTarget
indica a la plataforma de monitorización de dónde debe recoger las métricas. Puede especificar los pods de los que quiere recoger métricas, el endpoint de métricas de esos pods, la frecuencia de scrapping y cualquier otro ajuste.
Este recurso define las siguientes configuraciones:
- Destinos: los pods y sus endpoints de tu proyecto que exponen métricas.
- Intervalo de raspado: la frecuencia con la que quiere extraer métricas de los endpoints seleccionados.
- Personalizaciones de etiquetas: reglas opcionales con cualquier modificación de etiquetas para métricas.
Elige uno de los siguientes métodos para especificar los endpoints de métricas en el recurso personalizado MonitoringTarget
:
- Endpoints estáticos: declaras explícitamente el endpoint (puerto, ruta y esquema) en la configuración de
MonitoringTarget
. Anotaciones: la información del endpoint de la métrica del pod se obtiene de las anotaciones del archivo
Deployment
del contenedor. Este método ofrece más flexibilidad si cada pod tiene endpoints diferentes.
Puntos de conexión estáticos
Sigue estos pasos para exponer las métricas de los pods seleccionados en un endpoint definido de forma estática:
Determina el proyecto de Distributed Cloud del que quieras recoger métricas para la monitorización.
En la especificación de tu pod, declara el puerto que sirve las métricas en el campo
containerPort
. En el siguiente ejemplo se muestra cómo declarar el puerto2112
en la especificación del pod:# ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...
En la configuración de
MonitoringTarget
, especifica los detalles del endpoint (puerto, ruta y esquema) en la secciónpodMetricsEndpoints
para que coincidan con el puerto que has expuesto en la especificación del pod.El siguiente archivo YAML muestra un ejemplo de configuración de
MonitoringTarget
en el que cada pod seleccionado tiene que exponer métricas en el mismo endpoint,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
Aplica la configuración de
MonitoringTarget
al servidor de la API Management en el mismo espacio de nombres que los pods de destino:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
Haz los cambios siguientes:
KUBECONFIG_PATH
: la ruta al archivo kubeconfig del servidor de la API Management.MONITORING_TARGET_NAME
: el nombre del archivo de definición deMonitoringTarget
.
La plataforma de monitorización empieza a recoger métricas.
Anotaciones
Sigue estos pasos para exponer métricas mediante anotaciones si cada pod tiene endpoints diferentes:
Determina el proyecto de Distributed Cloud del que quieras recoger métricas para la monitorización.
Añade las siguientes anotaciones a la sección
annotations
del archivoDeployment
de tu contenedor:prometheus.io/path
prometheus.io/port
prometheus.io/scheme
En el siguiente ejemplo se muestran anotaciones de 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
En la configuración de
MonitoringTarget
, especifica las anotaciones que has añadido al archivoDeployment
del contenedor en la secciónpodMetricsEndpoints
. Esta especificación indica al recurso personalizado que recoja la información del endpoint de métricas de las anotaciones de los pods seleccionados.En el siguiente archivo YAML se muestra un ejemplo de
MonitoringTarget
configuración mediante 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
Aplica la configuración de
MonitoringTarget
al servidor de la API Management en el mismo espacio de nombres que los pods de destino:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
Haz los cambios siguientes:
KUBECONFIG_PATH
: la ruta al archivo kubeconfig del servidor de la API Management.MONITORING_TARGET_NAME
: el nombre del archivo de definición deMonitoringTarget
.
La plataforma de monitorización empieza a recoger métricas.
Consulta la especificación MonitoringTarget
completa y la documentación de referencia de la API para ver más campos y opciones.
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
Haz los cambios siguientes:
PROJECT_NAMESPACE
: el espacio de nombres de tu proyecto.MONITORING_TARGET_NAME
: el nombre del archivo de definición deMonitoringTarget
.