Supervisa Anthos Config Management

Anthos Config Management utiliza Prometheus para recopilar y mostrar métricas relacionadas con sus procesos.

También puedes configurar Cloud Monitoring para extraer métricas personalizadas de Prometheus. Si haces esto, podrás ver métricas personalizadas en Prometheus y en Monitoring. Para obtener más información, consulta Usa Prometheus.

Copia las métricas

Todas las métricas de Prometheus están disponibles para ser copiadas en el puerto 8675. Antes de que pueda copiar las métricas, debes configurar tu clúster para Prometheus de una de las siguientes dos maneras. Sigue uno de estos pasos:

  • Sigue la documentación de Prometheus para configurar tu clúster para la copia, o bien puedes hacer lo siguiente.

  • Use el operador de Prometheus que proporciona CoreOS junto con los siguientes manifiestos, que copiarán todas las métricas de Anthos Config Management cada 10 segundos.

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

      mkdir acm-monitor
      cd acm-monitor
      
    2. Descarga el manifiesto del operador de Prometheus del repositorio de CoreOS mediante 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, que no se recomienda. Con el siguiente paso, se modifica la configuración para utilizar un espacio de nombres llamado monitoring en su lugar. Para usar un espacio de nombres diferente, sustitúyelo cada vez que vea 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 que aplique el parche y modifique el espacio de nombres de otros recursos en el manifiesto.

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

      kubectl create namespace monitoring
      
    6. Aplica el manifiesto kustomized 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 los 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 copie las métricas de Anthos Config Management.

      # acm.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: prometheus-acm
        namespace: monitoring
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRole
      metadata:
        name: prometheus-acm
      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/v1beta1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-acm
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: prometheus-acm
      subjects:
      - kind: ServiceAccount
        name: prometheus-acm
        namespace: monitoring
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: acm
        namespace: monitoring
        labels:
          prometheus: acm
      spec:
        replicas: 2
        serviceAccountName: prometheus-acm
        serviceMonitorSelector:
          matchLabels:
            prometheus: config-management
        podMonitorSelector:
          matchLabels:
            prometheus: config-management
        alerting:
          alertmanagers:
          - namespace: default
            name: alertmanager
            port: web
        resources:
          requests:
            memory: 400Mi
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: prometheus-acm
        namespace: monitoring
        labels:
          prometheus: acm
      spec:
        type: NodePort
        ports:
        - name: web
          nodePort: 31900
          port: 9190
          protocol: TCP
          targetPort: web
        selector:
          app: prometheus
          prometheus: acm
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: acm-service
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        selector:
          matchLabels:
            monitored: "true"
        namespaceSelector:
          matchNames:
          - config-management-system
        endpoints:
        - port: metrics
          interval: 10s
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: cnrm
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        endpoints:
        - interval: 10s
          port: metrics
        namespaceSelector:
          matchNames:
          - cnrm-system
        selector:
          matchLabels:
            cnrm.cloud.google.com/monitored: "true"
            cnrm.cloud.google.com/system: "true"
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: PodMonitor
      metadata:
        name: acm-pod
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        selector:
          matchLabels:
            monitored: "true"
        namespaceSelector:
          matchNames:
          - gatekeeper-system
        podMetricsEndpoints:
        - port: metrics
          interval: 10s
      
    8. Aplica el manifiesto mediante los siguientes comandos:

      kubectl apply -f acm.yaml
      
      until kubectl rollout status statefulset/prometheus-acm -n monitoring; \
      do sleep 1; done
      

      El segundo comando se bloquea hasta que los Pods se estén ejecutando.

    9. Puedes verificar la instalación si reenvias el puerto web del servidor de Prometheus a tu máquina local.

      kubectl -n monitoring port-forward svc/prometheus-acm 9190
      

      Ahora puedes acceder a la interfaz de usuario web de Prometheus en http://localhost:9190.

    10. Quita el directorio temporal.

      cd ..
      rm -rf acm-monitor
      

Métricas disponibles

Anthos Config Management recopila las siguientes métricas y las pone a disposición de Prometheus. En la columna Etiquetas, se enumeran todas las etiquetas que son aplicables 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 múltiples mediciones, una para cada combinación de valores de etiqueta.

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

Name Tipo Labels Descripción
gkeconfig_importer_cycle_duration_seconds_bucket Histograma status Número de ciclos en los que el importador intentó importar configuraciones al clúster (distribuido en depósitos por la duración de cada ciclo)
gkeconfig_importer_cycle_duration_seconds_count Histograma status Número de ciclos en los que el importador intentó importar configuraciones al clúster (si se ignora la duración)
gkeconfig_importer_cycle_duration_seconds_sum Histograma status Suma de las duraciones de todos los ciclos en los que el importador intentó importar configuraciones al clúster
gkeconfig_importer_namespace_configs Gauge Número de configuraciones de espacios de nombres en el estado actual
gkeconfig_monitor_errors Gauge component Número de errores en el repositorio de configuración agrupados por el componente en el que ocurrieron
gkeconfig_monitor_configs Gauge state Número de configuraciones (de clústeres y espacios de nombres) agrupadas por su estado de sincronización
gkeconfig_monitor_last_import_timestamp Gauge Marca de tiempo de la importación más reciente
gkeconfig_monitor_last_sync_timestamp Gauge Marca de tiempo de la sincronización más reciente
gkeconfig_monitor_sync_latency_seconds_bucket Histograma Número de mediciones de importación a sincronización que se tomaron (distribuidas en depósitos por latencia entre los dos)
gkeconfig_monitor_sync_latency_seconds_count Histograma Número de mediciones de importación a sincronización que se tomaron (si se ignora la latencia entre las dos)
gkeconfig_monitor_sync_latency_seconds_sum Histograma Suma de las latencias de todas las mediciones de importación a sincronización que se tomaron
gkeconfig_syncer_api_duration_seconds_bucket Histograma operation, type, status Número de llamadas realizadas por el sincronizador al servidor de API (distribuidas en depósitos por la duración de cada llamada)
gkeconfig_syncer_api_duration_seconds_count Histograma operation, type, status Número de llamadas realizadas por el importador al servidor de API (si se ignora la duración)
gkeconfig_syncer_api_duration_seconds_sum Histograma operation, type, status Suma de las duraciones de todas las llamadas realizadas por el sincronizador al servidor de API
gkeconfig_syncer_controller_restarts_total Counter source Número total de reinicios de los controladores de configuración del clúster y del espacio de nombres
gkeconfig_syncer_operations_total Counter operation, type, status Número total de operaciones que se realizaron para sincronizar recursos con configuraciones
gkeconfig_syncer_reconcile_duration_seconds_bucket Histograma type, status Número de eventos de conciliación procesados por el sincronizador (distribuidos en depósitos por la duración)
gkeconfig_syncer_reconcile_duration_seconds_count Histograma type, status Número de eventos de conciliación procesados por el sincronizador (si se ignora la duración)
gkeconfig_syncer_reconcile_duration_seconds_sum Histograma type, status Suma de las duraciones de todos los eventos de conciliación procesados por el sincronizador
gkeconfig_syncer_reconcile_event_timestamps Gauge tipo Marcas de los tiempos en que se produjeron eventos de conciliación del sincronizador
Si usas el conector de configuración, puedes encontrar la lista de métricas en Supervisa el conector de configuración con Prometheus.

Si el controlador de políticas está habilitado en tu clúster, las siguientes métricas de adición estarán disponibles (todas con el prefijo gatekeeper_):

Name Tipo Labels Descripción
gatekeeper_audit_duration_seconds Histograma Distribución de duración del ciclo de auditoría
gatekeeper_audit_last_run_time Gauge La marca de tiempo de época desde el último tiempo de ejecución de auditoría, expresado como segundos de punto flotante
gatekeeper_constraint_template_ingestion_count Counter status Número total de acciones de ingestión de las plantillas de restricciones
gatekeeper_constraint_template_ingestion_duration_seconds Histograma status Distribución de la duración de ingestión de las plantillas de restricciones
gatekeeper_constraint_templates Gauge status Número actual de plantillas de restricciones
gatekeeper_constraints Gauge enforcement_action, status Número actual de restricciones
gatekeeper_request_count Counter admission_status Recuento de solicitudes de admisión del servidor de API
gatekeeper_request_duration_seconds Histograma admission_status Distribución de la duración de las solicitudes de admisión
gatekeeper_violations Gauge enforcement_action Número de incumplimientos de auditoría detectados en el último ciclo de auditorías
gatekeeper_watch_manager_intended_watch_gvk Gauge Cantidad de controladores de políticas GroupVersionKinds únicos que se deben estar observando. Esta es una combinación de recursos sincronizados y restricciones.
gatekeeper_watch_manager_watched_gvk Gauge Cantidad de controladores de políticas de GroupVersionKinds únicos que se observan realmente. El objetivo de este es que converja y sea igual a gatekeeper_watch_manager_intended_watch_gvk
gatekeeper_watch_manager_is_running Gauge Si el administrador de supervisión se está ejecutando. Puede ser 1 o 0. Si es 0, no se ingerirán nuevas restricciones ni recursos sincronizados
gatekeeper_watch_manager_last_restart_check_time Gauge La marca de tiempo de época de la última vez que se verificó si se reinició el administrador de supervisión del controlador de políticas. Esto debería ocurrir con frecuencia, en cuestión de segundos. Se expresa en segundos de punto flotante.
gatekeeper_watch_manager_last_restart_time Gauge La marca de tiempo de época de la última vez que se reinició el administrador de supervisión del controlador de políticas. Se espera que esto suceda cuando el conjunto de recursos que se está supervisando cambia (a causa de la modificación de la configuración de sincronización o del agregado o la eliminación de plantillas de restricciones).
gatekeeper_watch_manager_restart_attempts Counter El número total de veces que se reinició el administrador de supervisión del controlador de políticas. Si el número crecé con rapidez, puede indicar la presencia de oscilaciones.

Procedimientos de depuración de ejemplo

Los siguientes ejemplos ilustran algunos patrones de uso de las métricas de Prometheus, los campos de estado de los objetos y las anotaciones de objetos con el fin de detectar y diagnosticar problemas relacionados con Anthos Config Management. 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 progresivamente para desglosar y diagnosticar la causa raíz del problema.

Consulta la configuración por estado

El proceso monitor proporciona métricas de alto nivel que brindan información útil sobre una vista general de cómo opera Anthos Config Management en el clúster. Puedes ver si ocurrieron errores y, además, puedes configurar alertas para estos.

gkeconfig_monitor_errors

Usa nomos status para mostrar errores

Además de usar las métricas de Prometheus para supervisar el estado de Anthos Config Management en tus clústeres, puedes usar el comando nomos status, que imprime errores de todos tus clústeres en la línea de comandos.

Consulta operaciones de importación y sincronización por estado

Anthos Config Management utiliza un proceso de dos pasos para aplicar configuraciones desde el repositorio a un clúster. La métrica gkeconfig_monitor_errors está etiquetada por componente para que puedas ver en qué ubicación se produjo un error.

gkeconfig_monitor_errors{component="importer"}
gkeconfig_monitor_errors{component="syncer"}

También puedes verificar las métricas de los procesos del importador y el sincronizador.

gkeconfig_importer_cycle_duration_seconds_count{status="error"}
gkeconfig_syncer_reconcile_duration_seconds_count{status="error"}

Comprueba el estado del objeto de configuración

Anthos Config Management define dos objetos de Kubernetes personalizados: ClusterConfig y NamespaceConfig. Estos objetos definen un campo de estado que contiene información sobre el último cambio que se aplicó a la configuración y los errores que ocurrieron. Por ejemplo, si hay un error en un espacio de nombres llamado shipping-dev, puedes verificar el estado de la NamespaceConfig correspondiente.

kubectl get namespaceconfig shipping-dev -o yaml

Comprueba la anotación token de un objeto

Es posible que desee saber cuándo fue la última vez que Anthos Config Management actualizó un objeto de Kubernetes administrado. Cada objeto administrado se anotó con el hash de la confirmación de Git la última vez que se modificó, así como con la ruta a la configuración que contenía la modificación.

kubectl get clusterrolebinding namespace-readers
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    configmanagement.gke.io/source-path: cluster/namespace-reader-clusterrolebinding.yaml
    configmanagement.gke.io/token: bbb6a1e2f3db692b17201da028daff0d38797771
  name: namespace-readers
...

Para obtener más información, consulta las etiquetas y las anotaciones.

¿Qué sigue?