En esta página se describe cómo enviar métricas de Config Sync a Prometheus.
En esta página se explica cómo usar Prometheus para ver las métricas de Config Sync. Te recomendamos que uses Prometheus (en esta página) o Cloud Monitoring para exportar métricas. También se pueden usar métricas personalizadas.
Config Sync recoge y exporta métricas automáticamente a Prometheus. Puedes configurar Cloud Monitoring para que extraiga métricas personalizadas de Prometheus. Después, podrá ver las métricas personalizadas tanto en Prometheus como en Monitoring. Para obtener más información, consulta la sección sobre cómo usar Prometheus en la documentación de GKE.
Recoger las métricas
Todas las métricas de Prometheus se pueden obtener en el puerto 8675. Para poder extraer métricas, debes configurar tu clúster para Prometheus de una de estas dos formas. Cualquiera de las siguientes:
Sigue la documentación de Prometheus para configurar tu clúster para el raspado o
Usa Prometheus Operator junto con los siguientes manifiestos, que recogen todas las métricas de Config Sync cada 10 segundos.
Crea un directorio temporal para almacenar los archivos de manifiesto.
mkdir config-sync-monitor cd config-sync-monitor
Descarga el manifiesto de Prometheus Operator del repositorio de CoreOS con el comando
curl
:curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
Este manifiesto está configurado para usar el espacio de nombres
default
, lo que no es recomendable. En el siguiente paso se modifica la configuración para usar un espacio de nombres llamadomonitoring
. Para usar otro espacio de nombres, sustitúyelo pormonitoring
en los pasos restantes.Crea un archivo para actualizar el espacio de nombres de ClusterRoleBinding en el paquete anterior.
# patch-crb.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-operator subjects: - kind: ServiceAccount name: prometheus-operator namespace: monitoring # we are patching from default namespace
Crea un archivo
kustomization.yaml
que aplique el parche y modifique el espacio de nombres de otros recursos del manifiesto.# kustomization.yaml resources: - bundle.yaml namespace: monitoring patchesStrategicMerge: - patch-crb.yaml
Crea el espacio de nombres
monitoring
si no existe. Puedes usar otro nombre para el espacio de nombres, pero, si lo haces, también debes cambiar el valor denamespace
en los manifiestos YAML de los pasos anteriores.kubectl create namespace monitoring
Aplica el manifiesto de Kustomize con los siguientes comandos:
kubectl apply -k . until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \ do date; sleep 1; echo ""; done
El segundo comando se bloquea hasta que los CRDs estén disponibles en el clúster.
Crea el manifiesto de los recursos necesarios para configurar un servidor de Prometheus que extraiga métricas de Config Sync.
# config-sync-monitoring.yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-config-sync namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-config-sync rules: - apiGroups: [""] resources: - nodes - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: [""] resources: - configmaps verbs: ["get"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-config-sync roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-config-sync subjects: - kind: ServiceAccount name: prometheus-config-sync namespace: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: config-sync namespace: monitoring labels: prometheus: config-sync spec: replicas: 2 serviceAccountName: prometheus-config-sync serviceMonitorSelector: matchLabels: prometheus: config-management alerting: alertmanagers: - namespace: default name: alertmanager port: web resources: requests: memory: 400Mi --- apiVersion: v1 kind: Service metadata: name: prometheus-config-sync namespace: monitoring labels: prometheus: config-sync spec: type: NodePort ports: - name: web nodePort: 31900 port: 9190 protocol: TCP targetPort: web selector: prometheus: config-sync --- ---
Aplica el manifiesto con los siguientes comandos:
kubectl apply -f config-sync.yaml until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \ do sleep 1; done
El segundo comando se bloquea hasta que los pods se estén ejecutando.
Para verificar la instalación, reenvía el puerto web del servidor de Prometheus a tu máquina local.
kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
Ahora puedes acceder a la interfaz web de Prometheus en
http://localhost:9190
.Elimina el directorio temporal.
cd .. rm -rf config-sync-monitor
Métricas de Prometheus disponibles
Config Sync recoge las siguientes métricas y las pone a disposición de Prometheus. En la columna Etiquetas se muestran todas las etiquetas que se pueden aplicar a cada métrica. Las métricas sin etiquetas representan una sola medición a lo largo del tiempo, mientras que las métricas con etiquetas representan varias mediciones, una por cada combinación de valores de etiqueta.
Si esta tabla deja de estar sincronizada, puede filtrar las métricas por prefijo en la interfaz de usuario de Prometheus. Todas las métricas empiezan por el prefijo
config_sync_
.
Nombre | Tipo | Etiquetas | Descripción |
---|---|---|---|
config_sync_api_duration_seconds_bucket |
Histograma | status, operation | Distribución de la latencia de las llamadas al servidor de la API (distribuidas en contenedores por la duración de cada ciclo). |
config_sync_api_duration_seconds_count |
Histograma | status, operation | Distribución de la latencia de las llamadas al servidor de la API (sin tener en cuenta la duración) |
config_sync_api_duration_seconds_sum |
Histograma | status, operation | Suma de las duraciones de todas las llamadas al servidor de la API. |
config_sync_apply_duration_seconds_bucket |
Histograma | commit, status | Distribución de la latencia de la aplicación de recursos declarados desde la fuente de información veraz a un clúster (distribuidos en contenedores por la duración de cada ciclo). |
config_sync_apply_duration_seconds_count |
Histograma | commit, status | Distribución de la latencia de la aplicación de los recursos declarados desde la fuente de información veraz a un clúster (sin tener en cuenta la duración). |
config_sync_apply_duration_seconds_sum |
Histograma | commit, status | Suma de las duraciones de toda la latencia de aplicación de los recursos declarados desde la fuente de información veraz a un clúster. |
config_sync_apply_operations_total |
Encimera | operación, estado, controlador | Número de operaciones que se han realizado para sincronizar recursos de la fuente de información veraz con un clúster. |
config_sync_cluster_scoped_resource_count |
Indicador | resourcegroup | Número de recursos con permisos de clúster en un ResourceGroup |
config_sync_crd_count |
Indicador | resourcegroup | Número de CRDs en un ResourceGroup |
config_sync_declared_resources |
Indicador | commit | Número de recursos declarados analizados en Git |
config_sync_internal_errors_total |
Encimera | fuente | Número de errores internos activados por Config Sync. Es posible que la métrica no aparezca si no se ha producido ningún error interno |
config_sync_kcc_resource_count |
Indicador | resourcegroup | Número de recursos de Config Connector en un ResourceGroup |
config_sync_last_apply_timestamp |
Indicador | commit, status | Marca de tiempo de la operación de aplicación más reciente. |
config_sync_last_sync_timestamp |
Indicador | commit, status | Marca de tiempo de la sincronización más reciente de Git |
config_sync_parser_duration_seconds_bucket |
Histograma | estado, activador y origen | Distribución de la latencia de las diferentes fases implicadas en la sincronización de la fuente de información veraz con un clúster. |
config_sync_parser_duration_seconds_count |
Histograma | estado, activador y origen | Distribución de la latencia de las diferentes fases implicadas en la sincronización desde la fuente de información veraz hasta un clúster (sin tener en cuenta la duración). |
config_sync_parser_duration_seconds_sum |
Histograma | estado, activador y origen | Suma de las latencias de las diferentes fases implicadas en la sincronización desde la fuente de información veraz hasta un clúster. |
config_sync_pipeline_error_observed |
Indicador | nombre, reconciliador y componente | Estado de los recursos personalizados RootSync y RepoSync. El valor 1 indica un error. |
config_sync_ready_resource_count |
Indicador | resourcegroup | Número total de recursos listos en un ResourceGroup |
config_sync_reconcile_duration_seconds_bucket |
Histograma | status | Distribución de la latencia de los eventos de conciliación gestionados por el gestor de conciliación (distribuidos en contenedores por la duración de cada llamada). |
config_sync_reconcile_duration_seconds_count |
Histograma | status | Distribución de la latencia de los eventos de conciliación gestionados por el gestor de conciliaciones (sin tener en cuenta la duración). |
config_sync_reconcile_duration_seconds_sum |
Histograma | status | Suma de las duraciones de todas las latencias de los eventos de conciliación gestionados por el gestor de conciliadores. |
config_sync_reconciler_errors |
Indicador | component, errorclass | Número de errores encontrados al sincronizar recursos desde la fuente de información veraz con un clúster |
config_sync_remediate_duration_seconds_bucket |
Histograma | status | Distribución de la latencia de los eventos de conciliación de remediadores (distribuidos en contenedores por duración). |
config_sync_remediate_duration_seconds_count |
Histograma | status | Distribución de la latencia de los eventos de conciliación de remediadores (sin tener en cuenta la duración) |
config_sync_remediate_duration_seconds_sum |
Histograma | status | Suma de las duraciones de todas las latencias de los eventos de conciliación de remediadores. |
config_sync_resource_count |
Indicador | resourcegroup | Número de recursos monitorizados por un ResourceGroup |
config_sync_resource_conflicts_total |
Encimera | commit | Número de conflictos de recursos derivados de una discrepancia entre los recursos almacenados en caché y los recursos del clúster. Es posible que la métrica no aparezca si no se ha producido ningún conflicto de recursos |
config_sync_resource_fights_total |
Encimera | Número de recursos que se sincronizan con demasiada frecuencia. Es posible que la métrica no aparezca si no se ha producido ninguna lucha por los recursos | |
config_sync_resource_group_total |
Indicador | Número de CRs de ResourceGroup | |
config_sync_resource_ns_count |
Indicador | resourcegroup | Número de espacios de nombres usados por los recursos de un ResourceGroup |
config_sync_rg_reconcile_duration_seconds_bucket . |
Histograma | stallreason | Distribución temporal de la conciliación de un CR de ResourceGroup (distribuido en contenedores por duración) |
config_sync_rg_reconcile_duration_seconds_count |
Histograma | stallreason | Distribución temporal de la conciliación de un CR de ResourceGroup (sin tener en cuenta la duración) |
config_sync_rg_reconcile_duration_seconds_sum |
Histograma | stallreason | Suma de la conciliación de todos los tiempos de un CR de ResourceGroup |
config_sync_kustomize_build_latency_bucket |
Histograma | Distribución de la latencia del kustomize build tiempo de ejecución (distribuido en contenedores por la duración de cada operación) |
|
config_sync_kustomize_build_latency_count |
Histograma | Distribución de la latencia del tiempo de ejecución de kustomize build (sin tener en cuenta la duración) |
|
config_sync_kustomize_build_latency_sum |
Histograma | Suma de todo el tiempo de ejecución de kustomize build |
|
config_sync_kustomize_ordered_top_tier_metrics |
Indicador | top_tier_field | Uso de recursos, generadores, SecretGenerator, ConfigMapGenerator, Transformers y Validators |
config_sync_kustomize_builtin_transformers |
Indicador | k8s_builtin_transformer | Uso de transformadores integrados relacionados con los metadatos de objetos de Kubernetes |
config_sync_kustomize_resource_count |
Indicador | Número de recursos generados por kustomize build |
|
config_sync_kustomize_field_count |
Indicador | field_name | Número de veces que se usa un campo concreto en los archivos de personalización |
config_sync_kustomize_patch_count |
Indicador | patch_field | Número de parches en los campos patches , patchesStrategicMerge y patchesJson6902 |
config_sync_kustomize_base_count |
Indicador | base_source | Número de bases remotas y locales |
kustomize_deprecating_field_count |
Indicador | deprecating_field | Uso de campos que pueden quedar obsoletos |
kustomize_simplification_adoption_count |
Indicador | simplification_field | Uso de imágenes, réplicas y sustituciones de transformadores de simplificación |
kustomize_helm_inflator_count |
Indicador | helm_inflator | Uso de Helm en Kustomize, ya sea mediante los campos integrados o la función personalizada |
Ejemplos de procedimientos de depuración de Prometheus
En los siguientes ejemplos se ilustran algunos patrones para usar métricas de Prometheus, campos de estado de objetos y anotaciones de objetos para detectar y diagnosticar problemas relacionados con Config Sync. En estos ejemplos se muestra cómo puedes empezar con una monitorización de alto nivel que detecte un problema y, a continuación, refinar progresivamente tu búsqueda para profundizar y diagnosticar la causa principal del problema.
Consultar configuraciones de consultas por estado
El proceso reconciler
proporciona métricas de alto nivel que ofrecen información útil sobre el funcionamiento general de Config Sync en el clúster. Puedes ver si se ha producido algún error e incluso configurar alertas para ellos.
config_sync_reconciler_errors
Consultar métricas por conciliador
Si usas las APIs RootSync y RepoSync de Config Sync, puedes monitorizar los objetos RootSync y RepoSync. Los objetos RootSync y RepoSync se instrumentan con métricas de alto nivel que te proporcionan información valiosa sobre cómo funciona Config Sync en el clúster. Casi todas las métricas se etiquetan por el nombre del reconciliador, por lo que puede ver si se ha producido algún error y configurar alertas para ellos en Prometheus.
Consulta la lista completa de etiquetas de métricas disponibles para filtrar.
En Prometheus, puede usar los siguientes filtros para RootSyncs o RepoSyncs:
# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}
# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}
Consultar operaciones de importación y sincronización por estado
En Prometheus, puedes usar las siguientes consultas:
# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}
# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}
También puedes consultar las métricas de los procesos de origen y sincronización:
config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}
Monitorizar recursos con Google Cloud Managed Service para Prometheus
Google Cloud Managed Service para Prometheus es la solución multicloud totalmente gestionada de Google Cloudpara métricas de Prometheus. Admite dos modos de recogida de datos: recogida gestionada (el modo recomendado) o recogida de datos autogestionada. Sigue estos pasos para configurar la monitorización de Config Sync con Google Cloud Managed Service para Prometheus en el modo de recogida gestionada.
Habilita Prometheus gestionado en tu clúster siguiendo las instrucciones que se indican en el artículo Configurar la recogida gestionada.
Guarda el siguiente archivo de manifiesto de ejemplo como
pod-monitoring-config-sync-monitoring.yaml
. Este manifiesto configura un recurso PodMonitoring para recoger las métricas de Config Sync en el puerto8675
del podotel-collector-*
en el espacio de nombresconfig-management-monitoring
. El recurso PodMonitoring usa un selector de etiquetas de Kubernetes para encontrar elotel-collector-*
Pod.apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: config-sync-monitoring namespace: config-management-monitoring spec: selector: matchLabels: app: opentelemetry component: otel-collector endpoints: - port: 8675 interval: 10s
Aplica el manifiesto al clúster:
kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
Verifica que tus datos de Prometheus se exportan mediante la página Explorador de métricas de Cloud Monitoring en la Google Cloud consola siguiendo las instrucciones de Datos de Managed Service para Prometheus en Cloud Monitoring.