En esta página, se describe el proceso para extraer métricas de las cargas de trabajo en entornos aislados de Google Distributed Cloud (GDC) para facilitar la supervisión y la observabilidad de los datos.
Puedes extraer y recopilar las métricas que producen tus componentes con el tiempo. La plataforma de supervisión ofrece una API personalizada para extraer métricas de las cargas de trabajo en ejecución dentro del espacio de nombres de tu proyecto de Distributed Cloud. Para extraer 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 que extraiga los Pods designados dentro de tu proyecto. Estos Pods deben exponer un extremo HTTP que proporcione métricas en un formato de exposición de Prometheus, como OpenMetrics.
Luego, las métricas recopiladas se muestran en la instancia de Grafana de tu proyecto, lo que te brinda 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 la extracción, el extremo de las métricas de los pods, las etiquetas y las anotaciones.
Antes de comenzar
Para obtener los permisos que necesitas para administrar recursos personalizados de MonitoringTarget
, pídele al administrador de IAM de la organización o al administrador de IAM del proyecto que te otorgue uno de los roles de MonitoringTarget
asociados.
Según el nivel de acceso y los permisos que necesites, es posible que obtengas roles de creador, editor o visualizador para este recurso en una organización o un proyecto. Para obtener más información, consulta Prepara los permisos de IAM.
Configura el recurso personalizado MonitoringTarget
El recurso personalizado MonitoringTarget
le indica a la plataforma de supervisión dónde recopilar las métricas. Puedes especificar los Pods para los que recopilas métricas, el extremo de métricas de esos Pods, la frecuencia de descarte y cualquier otro parámetro de configuración adicional.
Este recurso define los siguientes parámetros de configuración:
- Destinos: Son los Pods y sus extremos dentro de tu proyecto que exponen métricas.
- Intervalo de recuperación: Es la frecuencia con la que deseas extraer métricas de los extremos seleccionados.
- Personalizaciones de etiquetas: Son reglas opcionales con cualquier modificación de etiquetas para las métricas.
Elige uno de los siguientes métodos para especificar los extremos de las métricas en el recurso personalizado MonitoringTarget
:
- Extremos estáticos: Declaras explícitamente el extremo (puerto, ruta de acceso, esquema) en la configuración de
MonitoringTarget
. Anotaciones: La información del extremo de la métrica del pod se recupera de las anotaciones dentro del archivo
Deployment
del contenedor. Este método ofrece más flexibilidad si cada Pod tiene diferentes extremos.
Extremos estáticos
Sigue estos pasos para exponer las métricas de los Pods seleccionados en un extremo definido de forma estática:
Determina el proyecto de Distributed Cloud del que deseas recopilar métricas para la supervisión.
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 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 extremo (puerto, ruta y esquema) en la secciónpodMetricsEndpoints
para que coincidan con el puerto que expusiste en la especificación del Pod.El siguiente archivo YAML 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
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 al archivo kubeconfig del servidor de la API de Management.MONITORING_TARGET_NAME
: Es el nombre del archivo de definición deMonitoringTarget
.
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:
Determina el proyecto de Distributed Cloud del que deseas recopilar métricas para la supervisión.
Agrega 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 las anotaciones para las métricas del 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 agregaste al archivoDeployment
del contenedor en la secciónpodMetricsEndpoints
. 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
que usa 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 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 al archivo kubeconfig del servidor de la API de Management.MONITORING_TARGET_NAME
: Es el nombre del archivo de definición deMonitoringTarget
.
La plataforma de supervisión comienza a recopilar métricas.
Consulta la especificación completa de MonitoringTarget
y la documentación de referencia de la API para obtener más campos y opciones.
Especificación de MonitoringTarget
completa
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 deMonitoringTarget
.