Monitorizar Config Sync con Prometheus

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.

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

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. 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 llamado monitoring. Para usar otro espacio de nombres, sustitúyelo por 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 de otros recursos del manifiesto.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. 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 de namespace en los manifiestos YAML de los pasos anteriores.

      kubectl create namespace monitoring
      
    6. 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.

    7. 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
      --- 
      --- 
      
    8. 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.

    9. 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.

    10. 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.

  1. Habilita Prometheus gestionado en tu clúster siguiendo las instrucciones que se indican en el artículo Configurar la recogida gestionada.

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

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

  4. 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.

Siguientes pasos