Ver registros de flota

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

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

Información general

Los registros de flota te permiten ver los registros de toda la flota o de permisos de equipo específicos. Los permisos son una función de gestión de equipos que te permite definir subconjuntos de registros de flota y otros recursos por equipos, y asociar cada permiso a uno o varios clústeres que formen parte de una flota. Para obtener más información sobre los ámbitos, consulta Gestionar equipos de tu flota.

Puedes ver dos tipos de registros de flota:

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

    • k8s_container
    • k8s_pod
    • k8s_node
    • k8s_cluster
    • k8s_control_plane_components
  • Registros de permisos de flota: registros de contenedores y pods de aplicaciones propiedad de un equipo implementadas en un permiso de flota específico con varios espacios de nombres a nivel de flota.

Ver los registros del ámbito de la flota es opcional. Si no quieres configurar la gestión de equipos, puedes usar el registro de flotas para ver los registros predeterminados.

Los registros se pueden enrutar a diferentes segmentos de registros del proyecto host de la flota con diferentes vistas para el control de acceso. El periodo de conservación predeterminado de un segmento de registros es de 30 días. Puedes configurar este periodo si es necesario.

Hay dos modos admitidos para 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 otro proyecto, sus registros no se conservarán en el proyecto original. Google Cloud

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

Antes de empezar

  1. Si ya has creado manualmente contenedores, receptores y filtros de exclusión de Cloud Logging, asegúrate de que los nombres que les has asignado no entren en conflicto con las restricciones de nomenclatura de los registros de flotas. Si hay un conflicto de nombres, ponte en contacto con el equipo de Asistencia antes de continuar.

  2. Asegúrate de que los clústeres cuyos registros quieras ver se hayan registrado en la flota que hayas elegido.

  3. Si aún no la has instalado, instala la CLI de Google Cloud siguiendo 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 tu proyecto host de la 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:

Preparar ámbitos, espacios de nombres y cargas de trabajo

Si quieres ver los registros del ámbito de la flota, tendrás que crear un ámbito de flota y un espacio de nombres de flota, además de preparar las cargas de trabajo para la recogida de registros.

Antes de continuar, define el proyecto predeterminado de la CLI de Google Cloud ejecutando el siguiente comando:

gcloud config set project FLEET_HOST_PROJECT_ID

Crear ámbitos y espacios de nombres

Si quiere ver los registros a nivel de ámbito y aún no ha configurado los ámbitos, siga las instrucciones que se indican en el artículo Gestionar equipos de su flota para crear ámbitos, añadir clústeres a ámbitos y configurar espacios de nombres de la flota.

Preparar cargas de trabajo

Para ver los datos de registro de tus aplicaciones, debes desplegar 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 tanto si decides ver los registros predeterminados como los registros del ámbito de la flota o ambos. Aquí tienes 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, puede que se produzca un error si no se ha podido crear el espacio de nombres de la flota 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 la carga de trabajo:

  kubectl create namespace NAMESPACE_NAME
  

Habilitar el registro de flotas

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

gcloud

  • Puedes habilitar el registro de flotas mediante la CLI de Google Cloud especificando los campos de configuración de la función en un archivo JSON o YAML. A continuación se muestra un ejemplo de configuración para el registro de flotas en formato JSON:

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

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

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

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

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

  • Añade la configuración que hayas elegido a un archivo JSON y actualiza la flota:

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

Sustituye 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 gestionar la función de observabilidad de la flota, importa la función a Terraform ejecutando el siguiente comando:
terraform import google_gke_hub_feature.feature projects/FLEET_HOST_PROJECT_ID/locations/global/features/fleetobservability

Por ejemplo, puedes añadir el siguiente bloque a tu 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 están habilitados con los modos COPY o MOVE, como se muestra en el ejemplo anterior, se crea un receptor de registro con el prefijo fleet-o11y-. Este sumidero de registro se crea en el Google Cloud proyecto para enrutar los registros de destino del proyecto de clúster al proyecto host de la flota.

Cuando fleet_scope_logs_config está habilitado, también se crea un segmento 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 Google Cloud original, mientras que los registros del ámbito de la flota se enviarán al proyecto host de la flota y no se conservarán en el proyecto Google Cloud .

Comprueba que la especificación de la función se haya actualizado:

   gcloud container fleet fleetobservability describe
  

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

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'

Los cambios que se hagan en la especificación fleetobservability pueden tardar unos minutos en aplicarse.

Configurar permisos de registro entre proyectos

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

  1. Para obtener las credenciales de la cuenta de servicio de los receptores de 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 devuelve un error que indica que no se encuentra el receptor de registro, prueba a volver a ejecutar el comando al cabo de un minuto o dos. 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. Asigna el rol roles/logging.bucketWriter a la cuenta de servicio obtenida:

    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 obtenida en el 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"
    

Conceder acceso a los registros a un equipo

En esta sección se describe cómo conceder acceso a los usuarios para que puedan ver los registros de contenedores y de pods.

  1. Obtén la política de gestión de identidades y accesos del 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. Añade una condición de gestión de identidades y accesos que permita a la cuenta de usuario ver los datos del bucket de registro que has creado. Aquí tienes un ejemplo para ver los registros de contenedores y los registros 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 gestión de identidades y accesos:

    gcloud projects set-iam-policy FLEET_HOST_PROJECT_ID output.json
    

Para ver más opciones sobre cómo conceder acceso, consulta Controlar el acceso a una vista de registro.

Ver registros de flota

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

Registros predeterminados

Para ver todos los registros predeterminados del bucket _Default en el proyecto host de tu flota, rellena 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 y de pods del ámbito de la flota

Los operadores de servicios pueden ver los registros de los espacios de nombres a los que tienen acceso. Para ver los registros de todos los espacios de nombres de un ámbito de flota específico, sigue estos pasos:

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

    Ir a Equipos

  2. Haz clic en el ámbito del equipo cuyos registros quieras ver y, a continuación, en la pestaña Registros.

  3. Selecciona Registros de contenedor o Registros de pod para filtrar la vista de registros.

Para ver los registros de un espacio de nombres específico de tu ámbito, sigue estos pasos:

  1. En la página Equipos, con el ámbito de tu equipo seleccionado, haz clic en la pestaña Espacios de nombres.
  2. Haga clic en el espacio de nombres cuyos registros quiera ver y, a continuación, en la pestaña Registros.
  3. Selecciona Registros de contenedor o Registros de pod para filtrar la vista de registros.

También puedes ver los registros del contenedor rellenando las variables de la siguiente URL, copiándola y pegándola en el 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 de un ámbito de flota específico, rellena 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%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.

Inhabilitar el registro de flotas

Para inhabilitar la función de registro de flotas, sigue estos pasos:

gcloud

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

    {
      "loggingConfig": {}
    }
    
  2. Actualiza la especificación de la función fleetobservability:

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

Terraform

En la configuración de Terraform, actualice todos los modos de 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"
          }
        }
      }
    }
  }

Comprueba que la especificación de la función se haya actualizado:

   gcloud container fleet fleetobservability describe
  

En el resultado se 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'
  

Los cambios que se hagan en la especificación fleetobservability pueden tardar unos minutos en aplicarse.

Después de inhabilitar el registro de la flota, los receptores de registro y los filtros de exclusión se eliminarán de tus proyectos. Sin embargo, se conservarán todos los segmentos de registro creados para el ámbito y todas las vistas de registro creadas en el segmento de registro. Para eliminar el bucket de registro de tu proyecto host de flota, consulta Eliminar un bucket.

Actualizar el periodo de conservación de los contenedores de registros

El periodo de conservación predeterminado de un segmento de registros es de 30 días. Para actualizar este periodo, 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 ámbito de la flota.

  • RETENTION_DAYS es el número de días del nuevo periodo de conservación. Para ver más opciones sobre cómo configurar los segmentos de registro, consulta Gestionar segmentos.

Si amplías el periodo de conservación de un contenedor, las reglas de conservación se aplicarán a partir de ese momento y no de forma retroactiva. Los registros no se pueden recuperar una vez que finaliza el periodo de conservación aplicable.

Referencia de la API

En esta sección se proporciona información sobre los campos que puede añadir al objeto fleetobservability.

fleetobservability

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

Campo Descripción Esquema Opcional
loggingConfig

Especifica si la función de registro de flotas está habilitada en toda la flota.

Si no se especifica, la función de registro de la flota se inhabilita para toda la flota.

loggingConfig Verdadero

loggingConfig

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

Campo Descripción Esquema Opcional
defaultConfig Define el comportamiento de enrutamiento de registros de los registros predeterminados de la flota. routingConfig Verdadero
fleetScopeLogsConfig Define el comportamiento de enrutamiento de registros de los registros del ámbito de la flota. routingConfig Verdadero

routingConfig

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

Campo Descripción Esquema Opcional
modo

Se especifica para habilitar el enrutamiento de registros. Si no se especifica o se indica MODE_UNSPECIFIED, se inhabilita el enrutamiento de registros.

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

Si se define como MOVE, los registros se moverán al proyecto de destino.

Cadena; uno de los siguientes valores: MOVE, COPY y MODE_UNSPECIFIED Verdadero

Restricciones en los 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, no debes usar estos nombres al crear tus propios cubos de registro, sumideros y filtros de exclusión.

Función habilitada Objeto creado Nombre usado por la observabilidad de la flota.
defaultConfig Fregadero fleet-o11y-FLEET_PROJECT_NUMBER-default
Filtro de exclusión. fleet-o11y-FLEET_PROJECT_NUMBER-default-exclusion. Este nombre está reservado en el receptor _Default del proyecto de clúster.
fleetScopeLogsConfig Segmento de registros fleet-o11y-scope-SCOPE_NAME
  • Vista de registros de los registros de contenedores del segmento
  • fleet-o11y-scope-SCOPE_NAME-k8s_container
  • Vista de registros de los registros de pods del segmento
  • fleet-o11y-scope-SCOPE_NAME-k8s_pod
    Fregadero fleet-o11y-FLEET_PROJECT_NUMBER-scope-SCOPE_NAME
    Filtro de exclusión fleet-o11y-FLEET_PROJECT_NUMBER-scope-exclusion

    Solución de problemas

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

    Notificación por correo sobre un error de configuración del receptor

    Si has recibido un correo con el asunto [ACTION REQUIRED] Cloud Logging sink configuration error in <Your GCP Project>, significa que la cuenta de servicio de tu sumidero de registros no tiene permiso para escribir registros en el destino del sumidero. Para solucionar este problema, siga los pasos que se indican en Permisos de registro entre proyectos.

    Mensaje de error desconocido de la interfaz de usuario de Cloud Logging

    Si ves el siguiente error en la interfaz de usuario de Cloud Logging, comprueba que las variables project_id y scope que has introducido en la URL sean correctas.

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

    Error de suscripción 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.