Anthos Config Management usa Prometheus para recopilar y mostrar métricas relacionadas con sus procesos.
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 Usa Prometheus.
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 la recopilación, o bien
Usa el operador de Prometheus que proporciona CoreOS junto con los siguientes manifiestos que recopilarán todas las métricas de Anthos Config Management cada 10 segundos.
Crea un directorio temporal para guardar los archivos de manifiesto.
mkdir acm-monitor cd acm-monitor
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 llamadomonitoring
en su lugar. Para usar un espacio de nombres diferente, reemplázalo cada vez que veasmonitoring
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 para otros recursos en el manifiesto.# kustomization.yaml resources: - bundle.yaml namespace: monitoring patchesStrategicMerge: - patch-crb.yaml
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 denamespace
en los manifiestos de YAML de los pasos anteriores.kubectl create namespace monitoring
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 las CRD estén disponibles en el clúster.
Crea el manifiesto para los recursos necesarios a fin de configurar un servidor de Prometheus que recopile 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
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 estén en ejecución.
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-acm 9190
Ahora puedes acceder a la IU web de Prometheus en
http://localhost:9190
.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 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 gkeconfig_
.
Nombre | Tipo | Etiquetas | Descripción |
---|---|---|---|
gkeconfig_importer_cycle_duration_seconds_bucket |
Histograma | status | Cantidad de ciclos en los que el importador intentó importar archivos de configuración al clúster (distribuido en depósitos por la duración de cada ciclo) |
gkeconfig_importer_cycle_duration_seconds_count |
Histograma | status | Cantidad de ciclos en los que el importador intentó importar archivos de configuración 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 archivos de configuración al clúster |
gkeconfig_importer_namespace_configs |
Indicador | Cantidad de archivos de configuración de espacios de nombres en el estado actual | |
gkeconfig_monitor_errors |
Indicador | component | Cantidad de errores en el repositorio de archivos de configuración agrupados por el componente en el que ocurrieron |
gkeconfig_monitor_configs |
Indicador | state | Cantidad de archivos de configuración (de clústeres y espacios de nombres) agrupados por su estado de sincronización |
gkeconfig_monitor_last_import_timestamp |
Indicador | Marca de tiempo de la importación más reciente | |
gkeconfig_monitor_last_sync_timestamp |
Indicador | Marca de tiempo de la sincronización más reciente | |
gkeconfig_monitor_sync_latency_seconds_bucket |
Histograma | Cantidad de mediciones de importación a sincronización que se tomaron (distribuidas en depósitos por latencia entre las dos) | |
gkeconfig_monitor_sync_latency_seconds_count |
Histograma | Cantidad 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 | Cantidad de llamadas realizadas por el sincronizador al servidor de la API (distribuidas en depósitos por la duración de cada llamada) |
gkeconfig_syncer_api_duration_seconds_count |
Histograma | operation, type, status | Cantidad de llamadas realizadas por el importador al servidor de la 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 la API |
gkeconfig_syncer_controller_restarts_total |
Contador | source | Cantidad total de reinicios de los controladores de archivos de configuración del clúster y del espacio de nombres |
gkeconfig_syncer_operations_total |
Contador | operation, type, status | Cantidad total de operaciones que se realizaron para sincronizar recursos con archivos de configuración |
gkeconfig_syncer_reconcile_duration_seconds_bucket |
Histograma | type, status | Cantidad 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 | Cantidad 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 |
Indicador | type | Marcas de tiempo en las que se produjeron eventos de conciliación del sincronizador |
Si el controlador de políticas está habilitado en el clúster, las siguientes métricas de adición estarán disponibles (todas con el prefijo gatekeeper_
):
Nombre | Tipo | Etiquetas | Descripción |
---|---|---|---|
gatekeeper_audit_duration_seconds |
Histograma | Distribución de la duración del ciclo de auditoría | |
gatekeeper_audit_last_run_time |
Indicador | 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 |
Contador | status | Cantidad total de acciones de transferencia de las plantillas de restricciones |
gatekeeper_constraint_template_ingestion_duration_seconds |
Histograma | status | Distribución de la duración de transferencia de las plantillas de restricciones |
gatekeeper_constraint_templates |
Indicador | status | Cantidad actual de plantillas de restricciones |
gatekeeper_constraints |
Indicador | enforcement_action, status | Cantidad actual de restricciones |
gatekeeper_request_count |
Contador | 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 |
Indicador | enforcement_action | Cantidad de incumplimientos de auditoría detectados en el último ciclo de auditorías |
gatekeeper_watch_manager_intended_watch_gvk |
Indicador | Cantidad de GroupVersionKinds únicos que el controlador de políticas debe observar. Esta es una combinación de restricciones y recursos sincronizados. No implementado por el momento | |
gatekeeper_watch_manager_watched_gvk |
Indicador | Cantidad de GroupVersionKinds únicos que el controlador de políticas observa en realidad. El objetivo es que converja y sea igual a gatekeeper_watch_manager_intended_watch_gvk. No implementado por el momento | |
gatekeeper_sync |
Indicador | kind, status | Cantidad de recursos que se replicaron en la caché del OPA |
gatekeeper_sync_duration_seconds |
Histograma | Distribución de la duración de la sincronización de objetos | |
gatekeeper_sync_last_run_time |
Indicador | La última vez que se sincronizó un recurso |
Procedimientos de depuración de ejemplo
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 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 de manera progresiva para desglosar y diagnosticar la causa raíz del problema.
Consulta archivos de configuración por estado
El proceso monitor
proporciona métricas de alto nivel que brindan estadísticas útiles generales sobre cómo funciona Anthos Config Management en el clúster. Puedes ver si se produjeron 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 los 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 usa un proceso de dos pasos para aplicar la configuración desde el repositorio a un clúster. La métrica gkeconfig_monitor_errors
está etiquetada por componente para que puedas ver dónde se produjeron los errores.
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 del NamespaceConfig correspondiente.
kubectl get namespaceconfig shipping-dev -o yaml
Verifica la anotación token
de un objeto
Se recomienda que sepas 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 de acceso 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 Etiquetas y anotaciones.
Próximos pasos
- Prueba la guía de inicio rápido.
- Obtén información sobre la visualización los registros de Anthos Config Management.