Visualizar registros de la flota

En esta página, se describe cómo habilitar y ver los registros de las flotas. Con los registros de flotas, se agregan varios registros y se limita su alcance, lo que te permite analizar el estado de tus aplicaciones en una vista consolidada. Esta página está destinada a los siguientes sitios:

  • Administradores de la plataforma que deseen habilitar el registro de flota y ver los registros en todos los espacios de nombres.
  • Operadores de servicios que desean ver los registros en los espacios de nombres específicos a los que tienen acceso.

Descripción general

Los registros de la flota te permiten ver los registros a nivel de la flota completa o para permisos de equipos específicos. Los permisos son una función de administración de equipos que te permite definir subconjuntos de registros de flotas y otros recursos por equipo, con cada permiso asociado con uno o más clústeres miembros de la flota. Para obtener más información sobre los permisos, consulta Administra equipos para tu flota.

Puedes ver dos tipos de registros de flotas:

  • Registros predeterminados: todos los registros de Kubernetes (excepto los registros de auditoría) que no pertenecen a ningún permiso específico de flota con los siguientes tipos de recursos:

    • k8s_container
    • k8s_pod
    • k8s_node
    • k8s_cluster
    • k8s_control_plane_components
  • Registros de alcance de la flota: registros de contenedores y Pods para aplicaciones que pertenecen a un equipo implementado en un permiso de flota específico con varios espacios de nombres a nivel de la flota.

La visualización de los registros de permisos de la flota es opcional. Si no deseas configurar la administración de equipos, aún puedes usar el registro de flota para ver los registros predeterminados.

Los registros se pueden enrutar a diferentes buckets de registro en el proyecto host de la flota con diferentes vistas para el control de acceso. El período de retención predeterminado de un bucket de registros es de 30 días. Puedes configurar este período si es necesario.

Existen dos modos compatibles con el enrutamiento de registros en los que las flotas contienen clústeres de varios proyectos (registro entre proyectos):

  • MOVE: todos los registros se mueven al proyecto host de la flota. Si un clúster de la flota pertenece a un proyecto diferente, sus registros no se retienen en el proyecto original de Google Cloud.

  • COPY: todos los registros se envían al proyecto host de la flota. Si un clúster de la flota pertenece a un proyecto diferente, sus registros también se conservan en el proyecto original de Google Cloud.

Antes de comenzar

  1. Si ya creaste buckets y receptores de Cloud Logging de forma manual, y configuraste filtros de exclusión, asegúrate de que los nombres que les asignaste a estos objetos no conflicto con las restricciones de denominación de registros de flotas. Si hay un conflicto de nombres, comunícate con el equipo de asistencia antes de continuar.

  2. Asegúrate de que los clústeres cuyos registros deseas ver estén registrados en la flota elegida.

  3. Si aún no lo tienes instalado, instala la CLI de Google Cloud según las instrucciones de instalación. Necesitas la versión 424.0.0 o una posterior para ver los registros de tu flota.

  4. Asegúrate de que el proyecto host de tu flota tenga habilitadas todas las APIs necesarias, incluida la API de Anthos:

    gcloud services enable --project=FLEET_HOST_PROJECT_ID  \
    gkehub.googleapis.com \
    container.googleapis.com \
    connectgateway.googleapis.com \
    cloudresourcemanager.googleapis.com \
    iam.googleapis.com \
    anthos.googleapis.com
    

    Donde:

Prepara permisos, espacios de nombres y cargas de trabajo

Si deseas ver los registros del permiso de la flota, deberás crear un permiso de flota y un espacio de nombres de flota, además de preparar cargas de trabajo para la recopilación de registros.

Antes de continuar, configura el proyecto predeterminado para Google Cloud CLI mediante la ejecución del siguiente comando:

gcloud config set project FLEET_HOST_PROJECT_ID

Crea permisos y espacios de nombres

Si deseas ver los registros a nivel del permiso y aún no configuraste los permisos, sigue las instrucciones en Administra equipos para tu flota para crear permisos, agregar clústeres a permisos y configurar espacios de nombres de la flota.

Prepara cargas de trabajo

Para ver los datos de registro de tus aplicaciones, deberás implementar tus cargas de trabajo en un clúster en el espacio de nombres de la flota configurado en el paso anterior. Este paso se aplica si eliges ver los registros predeterminados, los registros de permisos de la flota o ambos. A continuación, se muestra un ejemplo para configurar tu carga de trabajo:

  apiVersion: v1
  kind: Pod
  metadata:
    name: fleet-example-pod
    namespace: NAMESPACE_NAME
  spec:
    containers:
    - name: count
      image: ubuntu:14.04
      args: [bash, -c,
           'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 1; done']

Después de implementar el recurso, es posible que veas un error si el espacio de nombres de la flota no se pudo crear por algún motivo. En este caso, ejecuta el siguiente comando para volver a crear el espacio de nombres y vuelve a ejecutar el comando de implementación de carga de trabajo:

  kubectl create namespace NAMESPACE_NAME
  

Habilita el registro de flotas

En esta sección, se describe cómo habilitar la función de registro de flota y otorgar acceso al equipo para ver los registros.

gcloud

  • Puedes habilitar el registro de flota mediante Google Cloud CLI si especificas los campos de configuración para la función en un archivo JSON o YAML. Este es un ejemplo de una configuración para el registro de flotas en formato JSON:

    {
      "loggingConfig": {
          "defaultConfig": {
              "mode": "COPY"
          },
          "fleetScopeLogsConfig": {
              "mode": "MOVE"
          }
      }
    }
    

Si quieres ver todos los campos que puedes configurar para esta función, consulta la referencia de la API.

Cuando los campos defaultConfig o fleetScopeLogsConfig se habilitan con los modos COPY o MOVE, como se muestra en el ejemplo anterior, se crea un receptor de registros con el prefijo fleet-o11y-. Este receptor de registros se crea en el proyecto de Google Cloud para enrutar los registros de destino del proyecto del clúster al proyecto host de la flota.

Cuando fleetScopeLogsConfig está habilitado, también se crea un bucket de registro con el nombre fleet-o11y-scope-$SCOPE_NAME en la región global en el proyecto host de la flota, si aún no existe. Ten en cuenta que no puedes cambiar la región del bucket.

En este ejemplo, los registros predeterminados se enviarán al proyecto host de la flota y se conservarán en el proyecto original de Google Cloud, mientras que los registros de alcance de la flota se enviarán al proyecto host de la flota y no se retendrán en el proyecto de Google Cloud.

  • Agrega la configuración elegida a un archivo JSON y actualiza la flota:

    gcloud container fleet fleetobservability update \
            --logging-config=JSON_FILE
    

Reemplaza JSON_FILE por el nombre del archivo.

Terraform

  • La función de observabilidad de la flota está habilitada de forma predeterminada. Si es la primera vez que usas Terraform para administrar la función de observabilidad de la flota, importa la función a Terraform mediante la ejecución del siguiente comando:
terraform import google_gke_hub_feature.feature projects/FLEET_HOST_PROJECT_ID/locations/global/features/fleetobservability

Por ejemplo, puedes agregar el siguiente bloque a la configuración de Terraform:

  resource "google_gke_hub_feature" "feature" {
    name = "fleetobservability"
    location = "global"
    spec {
      fleetobservability {
        logging_config {
          default_config {
            mode = "COPY"
          }
          fleet_scope_logs_config {
            mode = "MOVE"
          }
        }
      }
    }
  }

Cuando los campos default_config o fleet_scope_logs_config se habilitan con los modos COPY o MOVE, como se muestra en el ejemplo anterior, se crea un receptor de registros con el prefijo fleet-o11y-. Este receptor de registros se crea en el proyecto de Google Cloud para enrutar los registros de destino del proyecto del clúster al proyecto host de la flota.

Cuando fleet_scope_logs_config está habilitado, también se crea un bucket de registro con el nombre fleet-o11y-scope-$SCOPE_NAME en el proyecto host de la flota, si aún no existe.

En este ejemplo, los registros predeterminados se enviarán al proyecto host de la flota y se conservarán en el proyecto original de Google Cloud, mientras que los registros de alcance de la flota se enviarán al proyecto host de la flota y no se retendrán en el proyecto de Google Cloud.

Verifica que la especificación de atributos esté actualizada:

   gcloud container fleet fleetobservability describe
  

En el resultado, se muestra la especificación fleetobservability actualizada con la configuración, como en el siguiente ejemplo:

createTime: '2022-09-30T16:05:02.222568564Z'
membershipStates:
  projects/123456/locations/us-central1/memberships/cluster-1:
    state:
      code: OK
      description: Fleet monitoring enabled.
      updateTime: '2023-04-03T20:22:51.436047872Z'
name:
projects/123456/locations/global/features/fleetobservability
resourceState:
  state: ACTIVE
spec:
  fleetobservability:
    loggingConfig:
      defaultConfig:
        mode: COPY
      fleetScopeLogsConfig:
        mode: MOVE
state:
  state: {}
updateTime: '2023-04-03T20:38:17.719596966Z'

Cualquier cambio realizado en la especificación fleetobservability puede tardar unos minutos en aplicarse.

Configura permisos de registro entre proyectos

Esta sección solo es necesaria si registras un clúster en una flota de un proyecto diferente (también conocido como registro entre proyectos). Para enrutar registros de proyectos de clúster al proyecto host de la flota, debes otorgar el rol roles/logging.bucketWriter a la cuenta de servicio de registro de cada proyecto del clúster.

  1. Para obtener las credenciales de la cuenta de servicio de los receptores en los proyectos de clúster, ejecuta el siguiente comando:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud logging sinks --project=GKE_PROJECT_ID describe fleet-o11y-${FLEET_HOST_PROJECT_NUMBER}-default
    

    Si el comando muestra un error que indica que no se puede encontrar el receptor de registros, vuelve a ejecutar el comando después de uno o dos minutos. Puedes ver la cuenta de servicio en el campo writerIdentity de la descripción del receptor, como se muestra en el siguiente ejemplo:

    createTime: '2023-04-06T02:26:54.716195307Z'
    destination:
    logging.googleapis.com/projects/123456/locations/global/buckets/_Default
    filter: xxx
    name: fleet-o11y-default
    updateTime: '2023-04-06T19:03:51.598668462Z'
    writerIdentity:
    serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com
    
  2. Otorga el rol roles/logging.bucketWriter a la cuenta de servicio recuperada:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "SERVICE_ACCOUNT" \
        --role "roles/logging.bucketWriter"
    

    Donde:

    • SERVICE_ACCOUNT es el nombre de la cuenta de servicio recuperada del paso anterior. Por ejemplo:
    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com" \
        --role "roles/logging.bucketWriter"
    

Otorga al equipo acceso a los registros

En la sección, se describe cómo otorgar acceso a los usuarios para ver los registros del contenedor y los registros de Pods.

  1. Obtén la política de IAM para el proyecto de la flota y escríbela en un archivo local en formato JSON:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID --format json > output.json
    
  2. Agrega una condición de IAM que permita que la cuenta de usuario vea los datos del bucket de registros que creaste. Este es un ejemplo para ver los registros de contenedores y de Pods:

    {
      "bindings": [
        {
          "members": [
            "user:USER_ACCOUNT_EMAIL"
          ],
          "role": "roles/logging.viewAccessor",
          "condition": {
              "title": "Bucket reader condition example",
              "description": "Grants logging.viewAccessor role to user USER_ACCOUNT_EMAIL for the fleet-o11y-scope-SCOPE_NAME-k8s_container and fleet-o11y-scope-SCOPE_NAME-k8s_pod log view.",
              "expression":
                "resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_container\" || resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_pod\""
          }
        }
      ],
    }
    
  3. Actualiza la política de IAM:

    gcloud projects set-iam-policy FLEET_HOST_PROJECT_ID output.json
    

Para obtener más opciones sobre cómo otorgar acceso, consulta Controla el acceso a una vista de registros.

Visualizar registros de la flota

Los administradores de la plataforma tienen acceso para ver todos los registros en todos los espacios de nombres.

Registros predeterminados

Para ver todos los registros predeterminados en el bucket _Default de tu proyecto host de flota, completa las variables de la siguiente URL, cópiala y pégala en tu navegador:

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2F_Default%2Fviews%2F_Default?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

Registros de contenedores del permiso de la flota y registros de Pods

Los operadores de servicios pueden ver registros en los espacios de nombres a los que tienen acceso. Para ver los registros de todos los espacios de nombres en un permiso de flota específico, completa los siguientes pasos:

  1. Con el proyecto host de flota seleccionado, ve a la sección Equipos en la consola de Google Cloud.

    Ve a Equipos

  2. Haz clic en el permiso del equipo cuyos registros deseas ver y, luego, en la pestaña Registros.

  3. Selecciona Registros de contenedores o Registros de Pods para filtrar la vista de registros.

Para ver los registros de un espacio de nombres específico en tu permiso, haz lo siguiente:

  1. En la página Equipos, con el alcance de tu equipo seleccionado, haz clic en la pestaña Espacios de nombres.
  2. Haz clic en el espacio de nombres cuyos registros deseas ver y, luego, en la pestaña Registros.
  3. Selecciona Registros de contenedores o Registros de Pods para filtrar la vista de registros.

Como alternativa, para ver los registros del contenedor, completa las variables en la siguiente URL, cópiala y pégala en tu navegador:

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_container?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

Para ver los registros de Pods en un permiso de flota específico, completa las variables en la siguiente URL, cópialas y pégalas en tu navegador:

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_pod?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

Consulta Interfaz del explorador de registros para obtener más información sobre cómo analizar los datos de registro.

Inhabilita el registro de flota

Para inhabilitar la función de registro de flota, completa los siguientes pasos:

gcloud

  1. Guarda la siguiente configuración en un archivo llamado disable_logging_config.json:

    {
      "loggingConfig": {}
    }
    
  2. Actualiza las especificaciones de la característica fleetobservability:

    gcloud container fleet fleetobservability update \
            --logging-config=disable_logging_config.json
    

Terraform

En tu configuración de Terraform, actualiza todos los modos para el enrutamiento de registros a MODE_UNSPECIFIED. A continuación, se muestra un ejemplo:

  resource "google_gke_hub_feature" "feature" {
    name = "fleetobservability"
    location = "global"
    spec {
      fleetobservability {
        logging_config {
          default_config {
            mode = "MODE_UNSPECIFIED"
          }
          fleet_scope_logs_config {
            mode = "MODE_UNSPECIFIED"
          }
        }
      }
    }
  }

Verifica que la especificación de atributos esté actualizada:

   gcloud container fleet fleetobservability describe
  

El resultado muestra la especificación fleetobservability actualizada con tu configuración:

  createTime: '2022-09-30T16:05:02.222568564Z'
  membershipStates:
    projects/123456/locations/global/memberships/cluster-1:
      state:
        code: OK
        description: Fleet monitoring enabled.
        updateTime: '2023-04-03T20:22:51.436047872Z'
  name:
  projects/123456/locations/global/features/fleetobservability
  resourceState:
    state: ACTIVE
  spec:
    fleetobservability:
      loggingConfig: {}
  state:
    state: {}
  updateTime: '2023-04-03T20:38:17.719596966Z'
  

Cualquier cambio realizado en la especificación fleetobservability puede tardar unos minutos en aplicarse.

Después de inhabilitar los registros de flotas, se quitarán de tus proyectos los receptores de registros y los filtros de exclusión. Sin embargo, se conservarán todos los buckets de registro creados para el permiso y las vistas de registro creadas en el bucket de registros. Para borrar el bucket de registros en el proyecto host de tu flota, consulta Borra un bucket.

Actualiza el período de retención de los buckets de registros

El período de retención predeterminado de un bucket de registros es de 30 días. Para actualizar este período, ejecuta el siguiente comando:

gcloud logging buckets update fleet-o11y-scope-SCOPE_NAME --location=global --retention-days=RETENTION_DAYS

Donde:

  • SCOPE_NAME es el nombre del permiso de la flota.

  • RETENTION_DAYS es la cantidad de días del nuevo período de retención. Para obtener más opciones para configurar buckets de registros, consulta Administra buckets.

Si extiendes el período de retención de un bucket, las reglas de retención se aplican en el futuro y no de manera retroactiva. Los registros no se pueden recuperar después de que finaliza el período de retención aplicable.

Referencia de la API

En esta sección, se proporciona información sobre los posibles campos que puedes agregar a tu objeto fleetobservability.

fleetobservability

fleetobservability define la configuración de observabilidad de la flota.

Campo Descripción Esquema Opcional
loggingConfig

Se especifica si el atributo de registro de flota está habilitada para toda la flota.

Si es sin especificar, el atributo de registro de flota está inhabilitada para toda la flota.

loggingConfig Verdadero

loggingConfig

loggingConfig define la configuración de las funciones de registro de flotas en la observabilidad de la flota.

Campo Descripción Esquema Opcional
defaultConfig Configura el comportamiento de enrutamiento de registros para los registros predeterminados de la flota. routingConfig Verdadero
fleetScopeLogsConfig Configura el comportamiento de enrutamiento de registros para los registros de permisos de la flota. routingConfig Verdadero

routingConfig

routingConfig define la configuración del modo de enrutamiento de registros en la función de registro de flotas.

Campo Descripción Esquema Opcional
Standard

Se especifica para habilitar el enrutamiento de registros y, sin especificar, o MODE_UNSPECIFIED para inhabilitar el enrutamiento de registros.

Si se configura en COPY, los registros se copiarán en el proyecto de destino.

Si se configura como MOV, los registros se moverán al proyecto de destino.

String; Uno de los siguientes: MOVE, COPY o MODE_UNSPECIFIED Verdadero

Restricciones de nombres

Cuando la observabilidad de la flota está habilitada, el controlador de observabilidad de la flota reserva los siguientes nombres para los objetos de registro que crea. Para evitar comportamientos no deseados o inesperados, debes evitar usar estos nombres cuando crees tus propios buckets de registros, receptores y filtros de exclusión.

Se habilitó la función Creación de un objeto Nombre que usa la observabilidad de la flota
defaultConfig Receptor fleet-o11y-FLEET_PROJECT_NUMBER-default
Filtro de exclusión. fleet-o11y-FLEET_PROJECT_NUMBER-default-exclusion. Este nombre se reserva en el receptor _Default del proyecto del clúster.
fleetScopeLogsConfig Bucket de registros fleet-o11y-scope-SCOPE_NAME
  • Vista de registros de los registros de los contenedor en el bucket
  • fleet-o11y-scope-SCOPE_NAME-k8s_container
  • Vista de registros de los registros de los Pods en el bucket
  • fleet-o11y-scope-SCOPE_NAME-k8s_pod
    Receptor fleet-o11y-FLEET_PROJECT_NUMBER-scope-SCOPE_NAME
    Filtro de exclusión fleet-o11y-FLEET_PROJECT_NUMBER-scope-exclusion

    Soluciona problemas

    En esta sección, se describe cómo resolver problemas relacionados con el registro de flotas.

    Notificación por correo electrónico sobre el error de configuración del receptor

    Si recibiste un correo electrónico con el título [ACTION REQUIRED] Cloud Logging sink configuration error in <Your GCP Project>, la cuenta de servicio de tu receptor de registros no tiene permiso para escribir registros en el destino del receptor. Para resolver esto, sigue los pasos que se indican en Permisos de registro entre proyectos.

    Mensaje de error desconocido de la IU de Cloud Logging

    Si ves el siguiente error en la IU de Cloud Logging, vuelve a verificar que las variables project_id y scope ingresadas en la URL sean correctas.

    Error: There is an unknown error while executing this operation.
    

    Error de membresía no encontrada

    Es posible que veas el siguiente error:

    ERROR: (gcloud.alpha.container.fleet.memberships.bindings.create) NOT_FOUND: Resource 'parent resource not found for projects/...' was not found
    

    Asegúrate de haber registrado el clúster en una flota.