Configurar el registro y la supervisión

GKE en Bare Metal incluye varias opciones de registro y supervisión de clústeres, incluidos servicios administrados basados en la nube, herramientas de código abierto y compatibilidad validada con soluciones comerciales de terceros. En esta página, se explican estas opciones y se proporciona orientación básica sobre cómo seleccionar la solución adecuada para el entorno.

Opciones para GKE en Bare Metal

Tienes varias opciones de registro y supervisión para GKE en Bare Metal:

  • Cloud Logging y Cloud Monitoring, habilitados de forma predeterminada en los componentes del sistema de equipos físicos
  • Prometheus y Grafana están disponibles en Cloud Marketplace.
  • Opciones de configuración validadas con soluciones de terceros

Cloud Logging y Cloud Monitoring

La observabilidad de Google Cloud es la solución de observabilidad integrada de Google Cloud. Ofrece una solución de registro completamente administrada, recopilación de métricas, supervisión, paneles y alertas. Cloud Monitoring supervisa GKE en los clústeres de Bare Metal de manera similar a los clústeres de GKE basados en la nube.

Los agentes se pueden configurar para cambiar el permiso de los registros y la supervisión, así como el nivel de las métricas recopiladas:

  • El permiso de registro y supervisión se puede establecer solo en los componentes del sistema (predeterminado) o en componentes y aplicaciones del sistema.
  • El nivel de métricas recopiladas se puede configurar para un conjunto optimizado de métricas (predeterminado) o métricas completas.

Si deseas obtener más información, consulta Configura agentes de Stackdriver para GKE en Bare Metal en este documento.

Logging y Monitoring proporcionan una solución de observabilidad única, potente, fácil de configurar y basada en la nube. Recomendamos Logging y Monitoring cuando ejecutas cargas de trabajo en GKE en Bare Metal. Para las aplicaciones con componentes que se ejecutan en GKE en Bare Metal y en la infraestructura local estándar, puedes considerar otras soluciones a fin de obtener una vista de extremo a extremo de esas aplicaciones.

Prometheus y Grafana

Prometheus y Grafana son dos productos populares de supervisión de código abierto disponibles en Cloud Marketplace:

  • Prometheus recopila métricas de aplicaciones y sistemas.

  • Alertmanager maneja el envío de alertas con varios mecanismos de alerta diferentes.

  • Grafana es una herramienta de paneles.

Te recomendamos que uses Managed Service para Prometheus, que se basa en Cloud Monitoring, para todas tus necesidades de supervisión. Con el servicio administrado para Prometheus, puedes supervisar los componentes del sistema sin cargo. El servicio administrado para Prometheus también es compatible con Grafana. Sin embargo, si prefieres un sistema de supervisión local puro, puedes instalar Prometheus y Grafana en tus clústeres.

Si instalaste Prometheus de manera local y deseas recopilar métricas de los componentes del sistema, debes darle permiso a tu instancia de Prometheus local para acceder a los extremos de métricas de los componentes del sistema:

  • Vincula la cuenta de servicio de tu instancia de Prometheus al ClusterRole gke-metrics-agent predefinido y usa el token de la cuenta de servicio como credencial para recopilar métricas de los siguientes componentes del sistema:

    • kube-apiserver
    • kube-scheduler
    • kube-controller-manager
    • kubelet
    • node-exporter
  • Usa la clave y el certificado de cliente almacenados en el secreto kube-system/stackdriver-prometheus-etcd-scrape para autenticar la recopilación de métricas de etcd.

  • Crea una NetworkPolicy para permitir el acceso desde tu espacio de nombres a kube-state-metrics.

Soluciones de terceros

Google trabajó con varios proveedores de soluciones de registro y supervisión de terceros para ayudar a que sus productos funcionen bien con GKE en Bare Metal. Entre estos, se incluyen Datadog, Elastic y Splunk. En el futuro, se agregarán más proveedores validados.

Las siguientes guías de soluciones están disponibles para usar soluciones de terceros con GKE en Bare Metal:

Cómo funcionan Logging y Monitoring para GKE en Bare Metal

Cloud Logging y Cloud Monitoring se instalan y se activan en cada clúster cuando creas un nuevo clúster de administrador o de usuario.

Los agentes de Stackdriver incluyen varios componentes en cada clúster:

  • Operador de Stackdriver (stackdriver-operator-*). Administra el ciclo de vida de todos los demás agentes de Stackdriver implementados en el clúster.

  • Recurso personalizado de Stackdriver. Un recurso que se crea de forma automática como parte del proceso de instalación de GKE en Bare Metal.

  • Agente de métricas de GKE (gke-metrics-agent-*). Un DaemonSet basado en el recopilador de OpenTelemetry que realiza scraping de métricas de cada nodo en Cloud Monitoring. También se incluye un DaemonSet de node-exporter y una implementación kube-state-metrics para proporcionar más métricas sobre el clúster.

  • Reenvío de registros de Stackdriver (stackdriver-log-forwarder-*): Es un DaemonSet de bits fluidos que reenvía los registros de cada máquina a Cloud Logging. El reenvío de registros almacena en búfer las entradas de registro en el nodo de forma local y las vuelve a enviar hasta por 4 horas. Si el búfer se llena o si el reenvío de registros no puede acceder a la API de Cloud Logging por más de 4 horas, los registros se descartan.

  • Agente de metadatos de Anthos (stackdriver-metadata-agent-). Una implementación que envía metadatos de recursos de Kubernetes, como pods, implementaciones o nodos a la API de Config Monitoring para Ops. Estos datos se usan para enriquecer las consultas de métricas, ya que te permiten realizar consultas por nombre de implementación, nombre de nodo o incluso nombre de servicio de Kubernetes.

Puedes ver los agentes que instaló Stackdriver mediante la ejecución del siguiente comando:

kubectl -n kube-system get pods -l "managed-by=stackdriver"

El resultado de este comando es similar al siguiente:

kube-system   gke-metrics-agent-4th8r                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-8lt4s                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-dhxld                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-lbkl2                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-pblfk                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-qfwft                                     1/1     Running   1 (40h ago)   40h
kube-system   kube-state-metrics-9948b86dd-6chhh                          1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-5s4pg                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-d9gwv                                         1/1     Running   2 (40h ago)   40h
kube-system   node-exporter-fhbql                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-gzf8t                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-tsrpp                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-xzww7                                         1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-8lwxh                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-f7cgf                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-fl5gf                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-q5lq8                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-www4b                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-xqgjc                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-metadata-agent-cluster-level-5bb5b6d6bc-z9rx7   1/1     Running   1 (40h ago)   40h

Métricas de Cloud Monitoring

Para obtener una lista de las métricas que recopila Cloud Monitoring, consulta Visualiza las métricas de GKE en Bare Metal.

Configura agentes de Stackdriver para GKE en Bare Metal

Los agentes de Stackdriver instalados con GKE en Bare Metal recopilan datos sobre los componentes del sistema con el fin de mantener y solucionar problemas de tus clústeres. En las siguientes secciones, se describen la configuración de Stackdriver y los modos operativos.

Solo componentes del sistema (modo predeterminado)

Luego de la instalación, los agentes de Stackdriver se configuran de forma predeterminada para recopilar registros y métricas, incluidos los detalles de rendimiento (por ejemplo, uso de CPU y memoria) y metadatos similares, de los componentes del sistema que proporciona Google. Esto incluye todas las cargas de trabajo en el clúster de administrador y, en el caso de los clústeres de usuario, las cargas de trabajo en los espacios de nombres del sistema kube-system, gke-system, gke-connect, istio-system y config-management-.

Componentes y aplicaciones del sistema

Para habilitar el registro y la supervisión de la aplicación sobre el modo predeterminado, sigue los pasos que se indican en Habilita el registro y la supervisión de la aplicación.

Métricas optimizadas (métricas predeterminadas)

De forma predeterminada, las implementaciones de kube-state-metrics que se ejecutan en el clúster recopilan e informan un conjunto optimizado de métricas de kube a la observabilidad de Google Cloud (antes conocido como Stackdriver).

Se necesitan menos recursos para recopilar este conjunto optimizado de métricas, lo que mejora el rendimiento general y la escalabilidad.

Para inhabilitar las métricas optimizadas (no recomendado), anula la configuración predeterminada en tu recurso personalizado de Stackdriver.

Usa Managed Service para Prometheus para los componentes del sistema seleccionados

Google Cloud Managed Service para Prometheus forma parte de Cloud Monitoring y está disponible como opción para los componentes del sistema. Entre los beneficios de Managed Service para Prometheus, se incluyen los siguientes:

  • Puedes seguir usando la supervisión existente basada en Prometheus sin alterar las alertas y los paneles de Grafana.

  • Si usas GKE y GKE en Bare Metal, puedes usar el mismo Lenguaje de consulta de Prometheus (PromQL) para las métricas de todos tus clústeres. También puedes usar la pestaña PromQL en el Explorador de métricas de la consola de Google Cloud.

Habilita e inhabilita Managed Service para Prometheus

El servicio administrado para Prometheus está habilitado de forma predeterminada en GKE en Bare Metal.

Si deseas inhabilitar el servicio administrado para Prometheus, sigue estos pasos:

  1. Abre el objeto de Stackdriver llamado stackdriver para editarlo:

    kubectl --kubeconfig CLUSTER_KUBECONFIG --namespace kube-system \
        edit stackdriver stackdriver
    
  2. Agrega la puerta de componente enableGMPForSystemMetrics y establécela en false:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      featureGates:
        enableGMPForSystemMetrics: false
    
  3. Cierra la sesión de edición.

Ver datos de métricas

Cuando enableGMPForSystemMetrics se configura como true, las métricas de los siguientes componentes tienen un formato diferente sobre la forma en que se almacenan y consultan en Cloud Monitoring:

  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • kubelet y cadvisor
  • kube-state-metrics
  • exportador de nodos

En el formato nuevo, puedes consultar las métricas anteriores mediante PromQL o el lenguaje de consulta de Monitoring (MQL):

PromQL

Ejemplo de consulta de PromQL:

histogram_quantile(0.95, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le))

MQL

Para usar MQL, establece el recurso supervisado en prometheus_target, usa el nombre de la métrica con el prefijo kubernetes.io/anthos y agrega el tipo de Prometheus como un sufijo al nombre de la métrica.

fetch prometheus_target
| metric 'kubernetes.io/anthos/apiserver_request_duration_seconds/histogram'
| align delta(5m)
| every 5m
| group_by [], [value_histogram_percentile: percentile(value.histogram, 95)]

Configura paneles de Grafana con el servicio administrado para Prometheus

Para usar Grafana con datos de métricas del servicio administrado para Prometheus, primero debes configurar y autenticar la fuente de datos de Grafana. Para configurar y autenticar la fuente de datos, usa el sincronizador de fuentes de datos (datasource-syncer) para generar credenciales de OAuth2 y sincronizarlas con Grafana a través de la API de fuente de datos de Grafana. El sincronizador de fuentes de datos configura la API de Cloud Monitoring como la URL del servidor de Prometheus (el valor de la URL comienza con https://monitoring.googleapis.com) en la fuente de datos en Grafana.

Sigue los pasos en Cómo realizar consultas con Grafana para autenticar y configurar una fuente de datos de Grafana a fin de consultar datos desde el servicio administrado para Prometheus.

En el repositorio anthos-samples de GitHub, se proporciona un conjunto de paneles de muestra de Grafana. Para instalar los paneles de muestra, haz lo siguiente:

  1. Descarga los archivos JSON de muestra:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples.git
    cd anthos-samples/gmp-grafana-dashboards
    
  2. Si tu fuente de datos de Grafana se creó con un nombre diferente con Managed Service for Prometheus, cambia el campo datasource en todos los archivos JSON:

    sed -i "s/Managed Service for Prometheus/[DATASOURCE_NAME]/g" ./*.json
    

    Reemplaza [DATASOURCE_NAME] por el nombre de la fuente de datos en tu Grafana que apunta al servicio frontend de Prometheus.

  3. Accede a la IU de Grafana desde tu navegador y selecciona + Importar en el menú Paneles.

    Navega a la importación de paneles en Grafana.

  4. Sube el archivo JSON o copia y pega el contenido del archivo y selecciona Cargar. Una vez que se haya cargado correctamente el contenido del archivo, selecciona Importar. De manera opcional, también puedes cambiar el nombre del panel y el UID antes de la importación.

    Importa un panel en Grafana.

  5. El panel importado debería cargarse correctamente si tu GKE en Bare Metal y la fuente de datos están configurados correctamente. Por ejemplo, en la siguiente captura de pantalla, se muestra el panel configurado por cluster-capacity.json.

    Panel de capacidad del clúster en Grafana.

Recursos adicionales

Si deseas obtener más información sobre Managed Service para Prometheus, consulta lo siguiente:

Configura los recursos del componente de Stackdriver

Cuando creas un clúster, GKE en Bare Metal crea automáticamente un recurso personalizado de Stackdriver. Puedes editar la especificación en el recurso personalizado a fin de anular los valores predeterminados para las solicitudes de CPU y memoria y los límites de un componente de Stackdriver, y puedes anular por separado la configuración de métricas optimizada predeterminada.

Anula las solicitudes y los límites predeterminados de CPU y memoria para un componente de Stackdriver

Los clústeres con una alta densidad de Pods generan una sobrecarga de registro y supervisión más alta. En casos extremos, los componentes de Stackdriver pueden informarse cerca del límite de uso de CPU y memoria o, incluso, pueden estar sujetos a reinicios constantes debido a los límites de recursos. En este caso, a fin de anular los valores predeterminados para los requisitos de CPU y memoria de un componente de Stackdriver, sigue estos pasos:

  1. Ejecuta el siguiente comando para abrir tu recurso personalizado de Stackdriver en un editor de línea de comandos:

    kubectl -n kube-system edit stackdriver stackdriver
  2. En el recurso personalizado de Stackdriver, agrega la sección resourceAttrOverride en el campo spec:

    resourceAttrOverride:
          DAEMONSET_OR_DEPLOYMENT_NAME/CONTAINER_NAME:
            LIMITS_OR_REQUESTS:
              RESOURCE: RESOURCE_QUANTITY

    Ten en cuenta que la sección resourceAttrOverride anula todos los límites y solicitudes predeterminados existentes para el componente que especificas. Los siguientes componentes son compatibles con resourceAttrOverride:

    • gke-metrics-agent/gke-metrics-agent
    • stackdriver-log-forwarder/stackdriver-log-forwarder
    • stackdriver-metadata-agent-cluster-level/metadata-agent
    • node-exporter/node-exporter
    • kube-state-metrics/kube-state-metrics

    Un archivo de ejemplo se ve de la siguiente manera:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      anthosDistribution: baremetal
      projectID: my-project
      clusterName: my-cluster
      clusterLocation: us-west-1a
      resourceAttrOverride:
        gke-metrics-agent/gke-metrics-agent:
          requests:
            cpu: 110m
            memory: 240Mi
          limits:
            cpu: 200m
            memory: 4.5Gi
  3. Para guardar los cambios en el recurso personalizado de Stackdriver, guarda y sal del editor de línea de comandos.

  4. Verifica el estado de tu Pod:

    kubectl -n kube-system get pods -l "managed-by=stackdriver"

    Una respuesta para un Pod en buen estado se ve de la siguiente manera:

    gke-metrics-agent-4th8r                1/1     Running   1   40h
  5. Verifica las especificaciones del pod del componente para asegurarte de que los recursos estén configurados correctamente.

    kubectl -n kube-system describe pod POD_NAME

    Reemplaza POD_NAME con el nombre del Pod que acabas de cambiar. Por ejemplo, gke-metrics-agent-4th8r

    La respuesta es similar a la siguiente:

      Name:         gke-metrics-agent-4th8r
      Namespace:    kube-system
      ...
      Containers:
        gke-metrics-agent:
          Limits:
            cpu: 200m
            memory: 4.5Gi
          Requests:
            cpu: 110m
            memory: 240Mi
          ...

Inhabilita las métricas optimizadas

De forma predeterminada, las implementaciones kube-state-metrics que se ejecutan en el clúster recopilan y, luego, informan un conjunto optimizado de métricas de kube a Stackdriver. Si necesitas métricas adicionales, te recomendamos que busques un reemplazo en la lista de métricas de GKE en Bare Metal.

Estos son algunos ejemplos de reemplazos que puedes usar:

Métrica inhabilitada Reemplazos
kube_pod_start_time container/uptime
kube_pod_container_resource_requests container/cpu/request_cores
container/memory/request_bytes
kube_pod_container_resource_limits container/cpu/limit_cores
container/memory/limit_bytes

Para inhabilitar la configuración predeterminada de las métricas optimizadas (no recomendado), haz lo siguiente:

  1. Abre tu recurso personalizado de Stackdriver en un editor de línea de comandos:

    kubectl -n kube-system edit stackdriver stackdriver
  2. Configura el campo optimizedMetrics como false:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
    name: stackdriver
    namespace: kube-system
    spec:
    anthosDistribution: baremetal
    projectID: my-project
    clusterName: my-cluster
    clusterLocation: us-west-1a
    optimizedMetrics: false
    
  3. Guarda los cambios y cierra el editor de la línea de comandos.

Servidor de métricas

El Servidor de métricas es la fuente de las métricas de recursos del contenedor para varias canalizaciones con ajuste de escala automático. El servidor de métricas recupera las métricas de kubelets y las expone a través de la API de Metrics de Kubernetes. El HPA y el VPA usan estas métricas para determinar cuándo activar el ajuste de escala automático. El servidor de métricas se escala mediante el cambio de tamaño del complemento.

En casos extremos en los que la alta densidad del Pod crea demasiada sobrecarga de registro y supervisión, el servidor de métricas podría detenerse y reiniciarse debido a las limitaciones de recursos. En este caso, puedes asignar más recursos al servidor de métricas editando el configmap metrics-server-config en el espacio de nombres gke-managed-metrics-server y cambiando el valor de cpuPerNode y memoryPerNode.

kubectl edit cm metrics-server-config -n gke-managed-metrics-server

El contenido de ejemplo del ConfigMap es el siguiente:

apiVersion: v1
data:
  NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration
    cpuPerNode: 3m
    memoryPerNode: 20Mi
kind: ConfigMap

Después de actualizar el ConfigMap, vuelve a crear los Pods del servidor de métricas con el siguiente comando:

kubectl delete pod -l k8s-app=metrics-server -n gke-managed-metrics-server

Requisitos de configuración para Logging y Monitoring

Existen varios requisitos de configuración para habilitar Cloud Logging y Cloud Monitoring con GKE en Bare Metal. Estos pasos se incluyen en Configura una cuenta de servicio para usar con Logging y Monitoring en la página Habilita servicios de Google y en la siguiente lista:

  1. Se debe crear un lugar de trabajo de Cloud Monitoring dentro del proyecto de Google Cloud. Para ello, haz clic en Monitoring en la consola de Google Cloud y sigue el flujo de trabajo.
  2. Debes habilitar las siguientes API de Stackdriver:

  3. Debes asignar las siguientes funciones de IAM a la cuenta de servicio que usan los agentes de Stackdriver:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor
    • opsconfigmonitoring.resourceMetadata.writer

Precios

No se aplican cargos por los registros y las métricas del sistema de la edición Enterprise de Google Kubernetes Engine (GKE).

En un clúster de GKE en Bare Metal, los registros y las métricas del sistema de la edición Enterprise de Google Kubernetes Engine (GKE) incluyen lo siguiente:

  • Registros y métricas de todos los componentes en un clúster de administrador
  • Registros y métricas de los componentes en estos espacios de nombres en un clúster de usuario: kube-system, gke-system, gke-connect, knative-serving, istio-system, monitoring-system, config-management-system, gatekeeper-system, cnrm-system

Para obtener más información, consulta Precios de observabilidad de Google Cloud.

Si quieres obtener información sobre los créditos de las métricas de Cloud Logging, comunícate con Ventas para obtener información sobre los precios.