Supervisa el Sincronizador de configuración con Prometheus

En la página, se describe cómo enviar métricas del Sincronizador de configuración a Prometheus.

En esta página, se explica cómo usar Prometheus para ver las métricas del Sincronizador de configuración. Si deseas conocer otras formas de exportar métricas, consulta Supervisa el Sincronizador de configuración con Cloud Monitoring o Supervisa el Sincronizador de configuración con la supervisión personalizada.

El Sincronizador de configuración recopila y exporta métricas automáticamente a Prometheus. También puedes configurar Cloud Monitoring para extraer métricas personalizadas de Prometheus. Así podrás ver las métricas personalizadas en Prometheus y Monitoring. Para obtener más información, consulta Cómo usar Prometheus en la documentación de GKE.

Recopila las métricas

Todas las métricas de Prometheus están disponibles para recopilarse en el puerto 8675. Antes de que puedas recopilar las métricas, debes configurar tu clúster para Prometheus de una de dos maneras. Realiza una de las siguientes acciones:

  • Sigue la documentación de Prometheus a fin de configurar el clúster para el scraping, o bien

  • Usa el operador de Prometheus junto con los siguientes manifiestos, que realizan el scraping todas las métricas del Sincronizador de configuración cada 10 segundos.

    1. Crea un directorio temporal para guardar los archivos de manifiesto.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. Descarga el manifiesto del operador de Prometheus desde el repositorio de CoreOS mediante el comando de 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 se recomienda. En el siguiente paso, debes modificar la configuración para usar un espacio de nombres llamado monitoring en su lugar. Para usar un espacio de nombres diferente, reemplázalo cada vez que veas monitoring en los pasos restantes.

    3. 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
      
    4. Crea un archivo kustomization.yaml que aplique el parche y modifique el espacio de nombres para otros recursos en el manifiesto.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Crea el espacio de nombres monitoring si no existe uno. Puedes usar un nombre diferente para el espacio de nombres, pero, si lo haces, también debes cambiar el valor de namespace en los manifiestos de YAML de los pasos anteriores.

      kubectl create namespace monitoring
      
    6. Aplica el manifiesto de Kustomize mediante 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 las CRD estén disponibles en el clúster.

    7. Crea el manifiesto para los recursos necesarios a fin de configurar un servidor de Prometheus que recopile métricas del Sincronizador de configuración.

      # 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
      --- 
      --- 
      
    8. Aplica el manifiesto mediante 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 estén en ejecución.

    9. Puedes verificar la instalación si reenvías 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 IU web de Prometheus en http://localhost:9190.

    10. Quita el directorio temporal.

      cd ..
      rm -rf config-sync-monitor
      

Métricas de Prometheus disponibles

El Sincronizador de configuración recopila las siguientes métricas y las pone a disposición de Prometheus. En la columna Etiquetas, se enumeran todas las etiquetas que se aplican a cada métrica. Las métricas sin etiquetas representan una sola medición en el tiempo, mientras que las métricas con etiquetas representan varias mediciones, una para cada combinación de valores de etiquetas.

Si esta tabla deja de estar sincronizada, puedes filtrar las métricas por prefijo en la interfaz de usuario de Prometheus. Todas las métricas comienzan con el prefijo config_sync_.

Nombre Tipo Etiquetas Descripción
config_sync_api_duration_seconds_bucket Histograma estado, operación Distribución de latencia de las llamadas al servidor de la API (distribuidas en buckets por la duración de cada ciclo)
config_sync_api_duration_seconds_count Histograma estado, operación Distribución de latencia de las llamadas al servidor de la API (si se ignora la duración)
config_sync_api_duration_seconds_sum Histograma estado, operación Es la suma de las duraciones de todas las llamadas al servidor de la API.
config_sync_apply_duration_seconds_bucket Histograma confirmación, estado Distribución de latencia de la aplicación de recursos declarados desde la fuente de información a un clúster (distribuido en buckets por la duración de cada ciclo)
config_sync_apply_duration_seconds_count Histograma confirmación, estado Distribución de latencia de la aplicación de recursos declarados desde la fuente de información a un clúster (sin tener en cuenta la duración)
config_sync_apply_duration_seconds_sum Histograma confirmación, estado Es la suma de las duraciones de toda la latencia de la aplicación de recursos declarados desde la fuente de información a un clúster.
config_sync_apply_operations_total Contador operación, estado, controlador Cantidad de operaciones que se realizaron para sincronizar recursos de la fuente de información con un clúster
config_sync_cluster_scoped_resource_count Indicador resourcegroup La cantidad de recursos con permisos de clúster en un ResourceGroup
config_sync_crd_count Indicador resourcegroup Cantidad de CRD en un ResourceGroup
config_sync_declared_resources Indicador confirmación La cantidad de recursos declarados que se analizaron en Git.
config_sync_internal_errors_total Contador fuente Cantidad de errores internos que activó el Sincronizador de configuración. Es posible que la métrica no aparezca si no se produjo un error interno.
config_sync_kcc_resource_count Indicador resourcegroup Cantidad de recursos de Config Connector en un ResourceGroup
config_sync_last_apply_timestamp Indicador confirmación, estado Marca de tiempo de la operación de aplicación más reciente
config_sync_last_sync_timestamp Indicador confirmación, estado La marca de tiempo de la sincronización más reciente de Git.
config_sync_parser_duration_seconds_bucket Histograma estado, activador, fuente Distribución de latencia de las diferentes etapas involucradas en la sincronización de la fuente de información a un clúster
config_sync_parser_duration_seconds_count Histograma estado, activador, fuente Distribución de latencia de las diferentes etapas involucradas en la sincronización de la fuente de información a un clúster (se ignora la duración)
config_sync_parser_duration_seconds_sum Histograma estado, activador, fuente Es la suma de las latencias de las diferentes etapas involucradas en la sincronización de la fuente de información a un clúster.
config_sync_pipeline_error_observed Indicador nombre, conciliador, componente El estado de los recursos personalizados de RootSync y RepoSync Un valor de 1 indica un error.
config_sync_ready_resource_count Indicador resourcegroup La cantidad total de recursos listos en un ResourceGroup
config_sync_reconcile_duration_seconds_bucket Histograma estado Distribución de latencia de los eventos de conciliación manejados por el administrador de conciliación (distribuidos en buckets por la duración de cada llamada)
config_sync_reconcile_duration_seconds_count Histograma estado Distribución de latencia de los eventos de conciliación manejados por el administrador de conciliación (si se ignora la duración)
config_sync_reconcile_duration_seconds_sum Histograma estado Suma de las duraciones de todas las latencias de los eventos de conciliación que controla el administrador de conciliación
config_sync_reconciler_errors Indicador componente, clase de error Cantidad de errores que se encontraron durante la sincronización de recursos de la fuente de información a un clúster
config_sync_remediate_duration_seconds_bucket Histograma estado Distribución de latencia de los eventos de conciliación del remediador (distribuidos en buckets por la duración)
config_sync_remediate_duration_seconds_count Histograma estado Distribución de latencia de los eventos de conciliación del remediador (si se ignora la duración)
config_sync_remediate_duration_seconds_sum Histograma estado Suma de las duraciones de todas las latencias de los eventos de conciliación del remediador
config_sync_resource_count Indicador resourcegroup Cantidad de recursos rastreados por un ResourceGroup
config_sync_resource_conflicts_total Contador confirmación Cantidad de conflictos de recursos que resultan 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 produjo un conflicto de recursos.
config_sync_resource_fights_total Contador Cantidad de recursos que se sincronizan con demasiada frecuencia. Es posible que la métrica no aparezca si no se realizó una competencia de recursos
config_sync_resource_group_total Indicador Cantidad de CR de ResourceGroup
config_sync_resource_ns_count Indicador resourcegroup La cantidad de espacios de nombres que usan los recursos en un ResourceGroup
config_sync_rg_reconcile_duration_seconds_bucket. Histograma stallreason Distribución del tiempo de conciliación de una CR de ResourceGroup (distribuida en buckets por duración)
config_sync_rg_reconcile_duration_seconds_count Histograma stallreason Distribución del tiempo de conciliación de una CR de ResourceGroup (se ignora la duración)
config_sync_rg_reconcile_duration_seconds_sum Histograma stallreason Es la suma de todo el tiempo que se dedica a conciliar una CR de ResourceGroup.
config_sync_kustomize_build_latency_bucket Histograma Distribución de latencia del tiempo de ejecución de kustomize build (distribuido en buckets por la duración de cada operación)
config_sync_kustomize_build_latency_count Histograma Distribución de latencia del tiempo de ejecución de kustomize build (se ignora la duración)
config_sync_kustomize_build_latency_sum Histograma Es la 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, transformadores y validadores
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 Cantidad de recursos que genera kustomize build
config_sync_kustomize_field_count Indicador field_name Cantidad de veces que se usa un campo en particular en los archivos de kustomization
config_sync_kustomize_patch_count Indicador patch_field Cantidad de parches en los campos patches, patchesStrategicMerge y patchesJson6902
config_sync_kustomize_base_count Indicador base_source Cantidad de bases remotas y locales
kustomize_deprecating_field_count Indicador deprecating_field Uso de campos que pueden dejar de estar disponibles
kustomize_simplification_adoption_count Indicador simplification_field Uso de imágenes, réplicas y reemplazos de transformadores de simplificación
kustomize_helm_inflator_count Indicador helm_inflator Uso de Helm en Kustomize, ya sea a través de los campos integrados o la función personalizada

Procedimientos de depuración de ejemplo para Prometheus

Mediante los siguientes ejemplos, se ilustran algunos patrones para usar métricas de Prometheus, campos de estado de objetos y anotaciones de objetos a fin de detectar y diagnosticar problemas relacionados con el Sincronizador de configuración. En estos ejemplos, se muestra cómo puedes comenzar una supervisión de alto nivel que detecte un problema y, luego, definir mejor tu búsqueda de manera progresiva para desglosar y diagnosticar la causa raíz del problema.

Consulta archivos de configuración por estado

El proceso reconciler proporciona métricas de alto nivel que brindan estadísticas útiles generales sobre cómo funciona el Sincronizador de configuración en el clúster. Puedes ver si se produjeron errores y, además, puedes configurar alertas para estos.

config_sync_reconciler_errors

Consulta métricas por conciliador

Si usas las API de RootSync de Config Sync y RepoSync, puedes supervisar los objetos RootSync y RepoSync. Los objetos RootSync y RepoSync están instrumentados con métricas de alto nivel que te brindan estadísticas útiles sobre cómo funciona el Sincronizador de configuración en el clúster. Casi todas las métricas están etiquetadas por el nombre del conciliador. Por lo tanto, puedes ver si se produjeron errores y configurar alertas para ellas en Prometheus.

Consulta la lista completa de las etiquetas de métricas disponibles para filtrar.

En Prometheus, puedes usar los siguientes filtros para RootSync o RepoSync:

# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}

# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}

Consulta 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 verificar las métricas de los procesos de origen y de sincronización:

config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}

Supervisa recursos con Google Cloud Managed Service para Prometheus

Google Cloud Managed Service para Prometheus es la solución de múltiples nubes completamente administrada de Google Cloud para las métricas de Prometheus. Admite dos modos para la recopilación de datos: recopilación administrada (el modo recomendado) o recopilación de datos autoimplementada. Completa los siguientes pasos para configurar la supervisión del Sincronizador de configuración con Google Cloud Managed Service para Prometheus en el modo de recopilación administrado.

  1. Para habilitar Managed Prometheus en tu clúster, sigue las instrucciones que se indican en Configura la recopilación administrada.

  2. Guarda el siguiente manifiesto de muestra como pod-monitoring-config-sync-monitoring.yaml: Este manifiesto configura un recurso PodMonitoring para recopilar las métricas del Sincronizador de configuración en el puerto 8675 del Pod otel-collector-* en el espacio de nombres config-management-monitoring. El recurso PodMonitoring usa un selector de etiquetas de Kubernetes para encontrar el pod otel-collector-*.

    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
    
  3. Aplica el manifiesto al clúster:

    kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
    

  4. Verifica que se exporten tus datos de Prometheus con la página del Explorador de métricas de Cloud Monitoring en la consola de Google Cloud siguiendo las instrucciones que se indican en Servicio administrado para Prometheus en Cloud Monitoring.