Consultar y ver registros

En esta página se proporcionan instrucciones detalladas sobre cómo consultar y visualizar tus registros mediante la interfaz de usuario de Grafana y la API Log Query para obtener información valiosa sobre los eventos y la actividad de tu servicio.

Después de recoger los registros de las cargas de trabajo y los servicios implementados en Google Distributed Cloud (GDC) air-gapped, puedes empezar a analizarlos. Para analizar los registros, puedes visualizarlos y filtrarlos en paneles informativos de Grafana o acceder a ellos directamente desde la API Log Query mediante llamadas HTTP o gRPC para obtener acceso programático.

Puedes acceder a tus registros de dos formas:

  • Paneles de Grafana: consulta información valiosa sobre el registro de actividad de tu proyecto en el panel de registro de tu instancia de Grafana. Este panel le permite consultar y localizar registros específicos, lo que le proporciona una observabilidad de datos detallada y adaptada a sus necesidades. Grafana ofrece una interfaz fácil de usar para filtrar y analizar los datos de tus cargas de trabajo, así como para crear paneles de control y paneles personalizados para obtener una visualización completa.
  • API Log Query: para obtener acceso programático, consulta los registros directamente desde la API Log Query de tu proyecto. La API Log Query es una API no perteneciente a Kubernetes que admite HTTP y gRPC, y que te expone sus propios endpoints. Accede a esta API solo en una organización específica de Distributed Cloud siguiendo los métodos de acceso a la API estándar.

Antes de empezar

Para obtener los permisos que necesitas para consultar y visualizar registros en la interfaz de usuario de Grafana, pide al administrador de gestión de identidades y accesos de tu organización o proyecto que te conceda uno de los roles predefinidos de lector de Grafana de la organización o del proyecto. En función del nivel de acceso y de los permisos que necesites, puedes obtener roles de Grafana en una organización o en un proyecto.

También puedes pedir al administrador de gestión de identidades y accesos de tu proyecto que te conceda el rol de consulta de la API Log Query en el espacio de nombres de tu proyecto para obtener los permisos que necesitas para consultar los registros de la API Log Query.

Para obtener más información sobre estos roles, consulta Preparar permisos de gestión de identidades y accesos.

Consultar y filtrar registros

Selecciona uno de los siguientes métodos para crear consultas y filtrar los registros de las cargas de trabajo de tu proyecto:

Panel de registros de Grafana

En esta sección se describe cómo acceder a los registros mediante el panel de registros de Grafana.

Identificar el endpoint de Grafana

La siguiente URL es el endpoint de la instancia de Grafana de tu proyecto:

  https://GDC_URL/PROJECT_NAMESPACE/grafana

Haz los cambios siguientes:

  • GDC_URL: la URL de tu organización en GDC.
  • PROJECT_NAMESPACE: el espacio de nombres de tu proyecto.

    Por ejemplo, el endpoint de Grafana del proyecto platform-obs de la organización org-1 es https://org-1/platform-obs/grafana.

Ver registros en la interfaz de usuario de Grafana

Registros de consultas en la interfaz de usuario de Grafana:

  1. En la consola de GDC, selecciona tu proyecto.
  2. En el menú de navegación, selecciona Operaciones > Registro.
  3. Haz clic en Ver todo en Grafana Loki.

    Se abrirá una página con tu endpoint de Grafana y se mostrará la interfaz de usuario.

  4. En la interfaz de usuario, haz clic en Explorar Explorar en el menú de navegación para abrir la página Explorar.

  5. En el menú de la barra Explorar, seleccione una fuente de datos para obtener registros según el tipo de universo:

    • Universos de una sola zona: selecciona una de las siguientes fuentes de datos para mostrar los datos de registro de la zona única de tu universo:

      • Registros operativos: muestra los registros operativos.
      • Registros de auditoría: muestra los registros de auditoría.
    • Universos multizona: Grafana puede conectarse a diferentes zonas y mostrar datos de varias zonas. Seleccione una de las siguientes fuentes de datos para mostrar los datos de registro de cualquier zona de su universo, independientemente de la zona en la que haya iniciado sesión:

      • Registros operativos: ZONE_NAME muestra los registros operativos de una zona concreta.
      • Registros de auditoría ZONE_NAME: muestra los registros de auditoría de una zona concreta.

      Además, para tener visualizaciones de datos entre zonas en un solo panel de control y añadir varias zonas a tu consulta, selecciona Mixta como fuente de datos.

  6. Introduce una consulta para buscar registros en el panel Registro mediante expresiones de LogQL (lenguaje de consulta de registros). Puedes completar este paso de cualquiera de las siguientes formas:

    • Usa la interfaz interactiva de creación de consultas. A continuación, haz clic en Ejecutar consulta.
    • Escribe tu consulta directamente en el campo de texto y pulsa Mayús+Intro para ejecutarla.

    En la página se muestran los registros que coinciden con tu consulta. Después de consultar los registros, puedes exportarlos. Haz clic en Exportar para descargar los registros en formato de texto sin formato o CSV. También puedes seleccionar un periodo para los registros.

    La opción Registros de auditoría está seleccionada en la página Explorar para obtener los registros de auditoría.

    Imagen 1. Opción de menú para consultar registros de auditoría desde la interfaz de usuario de Grafana.

    En la figura 1, la opción Registros de auditoría muestra la interfaz que te permite crear consultas desde Grafana para recuperar registros de auditoría.

    Para ver ejemplos de etiquetas y valores para consultar diferentes registros, consulta Ejemplos de consultas y etiquetas.

Selecciona un periodo para los registros

Para consultar registros de un periodo, sigue estos pasos:

  1. En Grafana, haz clic en el menú Selector de hora.

  2. En el menú, realiza una de las siguientes acciones:

    • Selecciona opciones de periodo relativo, como los últimos 30 minutos.
    • Para definir intervalos de tiempo absolutos personalizados, elija fechas y horas específicas en el calendario y haga clic en Aplicar intervalo de tiempo.
  3. También puedes hacer clic en Cambiar configuración de hora para modificar las opciones Zona horaria y Año fiscal de los controles de periodo.

    Los ajustes de hora se guardan en cada panel de control. Para obtener más información sobre las consultas en un periodo, consulta https://grafana.com/docs/loki/latest/reference/api/#query-loki-over-a-range-of-time.

API Log Query

En esta sección se describe cómo acceder a los registros mediante la API Log Query.

Identificar el endpoint de la API Log Query

La API Log Query expone los dos endpoints siguientes para consultar registros de auditoría y operativos:

  • Endpoint del registro de auditoría:

    audit-log-query-api.ORG_DOMAIN
    
  • Endpoint de registro operativo:

    operational-log-query-api.ORG_DOMAIN
    

Sustituye ORG_DOMAIN por el nombre de dominio de la organización. Puedes ver esta propiedad con el comando gdcloud config list. El nombre de dominio debe seguir la sintaxis org-name.zone.google.gdch.com. Por ejemplo, una organización llamada org-1, en la zona zone1 y en un entorno de prueba, tiene un dominio como org-1.zone1.google.gdch.test.

La API Log Query tiene las tres opciones de endpoint siguientes:

  • labels: lista todas las etiquetas de un proyecto.
  • labels/labels/LABEL/values: lista valores de etiquetas específicos de un proyecto.
  • logs: muestra los registros de un proyecto específico.

Para obtener más información, consulta la documentación de la API.

Enviar una consulta

Envía una consulta al endpoint de la API Log Query mediante clientes HTTP o gRPC.

HTTP

Sigue las instrucciones para acceder directamente a la API con un cliente HTTP. Puedes confiar en kubectl para gestionar la autenticación o hacerlo tú mismo.

Consulta la API Log Query mediante clientes HTTP como curl o wget, o bien un cliente HTTP que crees y gestiones. En el siguiente ejemplo se usa la herramienta curl para consultar la API. Puedes usar un formato similar para los comandos de wget:

  1. Autentica la solicitud cURL:

    1. Descarga e instala la CLI de gdcloud.
    2. Define la propiedad core/organization_console_url de gdcloud:

      gdcloud config set core/organization_console_url https://GDC_URL
      

      Sustituye GDC_URL por la URL de una organización de GDC.

    3. Inicia sesión con el proveedor de identidades configurado:

      gdcloud auth login
      
    4. Usa tu nombre de usuario y contraseña para autenticarte e iniciar sesión.

    5. Exporta el token de identidad de la cuenta especificada a una variable de entorno:

      export TOKEN="$($HOME/gdcloud auth print-identity-token --audiences=https://LOG_QUERY_API_ENDPOINT)"
      

      Sustituye LOG_QUERY_API_ENDPOINT por el endpoint de la API Log Query desde el que quieras consultar los registros y el dominio al que quieras conectarte. Por lo tanto, el valor de la marca audiences puede ser, por ejemplo, https://operational-log-query-api.org-1.zone1.google.gdch.test.

      Si el inicio de sesión se realiza correctamente, puedes usar el encabezado de autorización en tu solicitud cURL mediante el comando gdcloud auth print-identity-token. Para obtener más información, consulta gdcloud auth print-identity-token.

  2. Si quieres enumerar todas las etiquetas de un proyecto, envía la siguiente consulta:

    curl -H "Authorization: Bearer ${TOKEN}" \
    https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/labels \
    -H "Content-Type: application/json" -v
    

    Haz los cambios siguientes:

    • LOG_QUERY_API_ENDPOINT: el endpoint de la API Log Query desde el que quieres consultar los registros.
    • PROJECT_NAMESPACE: el espacio de nombres de tu proyecto.
  3. Si quieres enumerar valores de etiquetas específicos de un proyecto, envía la siguiente consulta:

    curl -H "Authorization: Bearer ${TOKEN}" \
    https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/labels/labels/LABEL/values \
    -H "Content-Type: application/json" -v
    

    Haz los cambios siguientes:

    • LOG_QUERY_API_ENDPOINT: el endpoint de la API Log Query desde el que quieres consultar los registros.
    • PROJECT_NAMESPACE: el espacio de nombres de tu proyecto.
    • LABEL: la etiqueta específica de la que quieres consultar el valor.
  4. Si quieres consultar los registros de un proyecto específico, crea una consulta logs_filter e inclúyela en el cuerpo de la solicitud:

    curl -X GET -H "Authorization: Bearer ${TOKEN}" \
    https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/logs \
    -H "Content-Type: application/json" -d \
    '{"logs_filter": {"labels_equal": {"LABEL": "LABEL_VALUE"}}}' -v
    

    Haz los cambios siguientes:

    • LOG_QUERY_API_ENDPOINT: el endpoint de la API Log Query desde el que quieres consultar los registros.
    • PROJECT_NAMESPACE: el espacio de nombres de tu proyecto.
    • LABEL: la etiqueta específica de la que quieres consultar los registros.
    • LABEL_VALUE: el valor de la etiqueta por el que quieres consultar los registros.

    Consulta la documentación de la API para ver todas las opciones de creación de una consulta logs_filter.

gRPC

gRPC es compatible con muchos lenguajes de programación y proporciona un método de comunicación más eficiente que los clientes HTTP.

Para consultar registros mediante gRPC, debes cumplir los siguientes requisitos previos:

  • Crea tu propia biblioteca de cliente basada en los búferes de protocolo proporcionados por Google.
  • Implementa la autenticación en el cliente.
  • Implementa reintentos.

Para obtener información sobre los búferes de protocolo, consulta la documentación de la API.

En el siguiente ejemplo se muestra cómo consultar registros desde un programa Go mediante un cliente gRPC no autenticado. En el ejemplo se da por hecho que has creado un paquete de Golang que incluye un archivo de compilación de Bazel para importar dependencias de código:

  1. Guarda el siguiente código en un programa de Go llamado client.go:

    package main
    import (
            "context"
            "crypto/tls"
            "flag"
            "fmt"
            "google.golang.org/grpc/credentials"
            "google.golang.org/grpc/metadata"
            pb "<import path to generated log query api protos>/pkg/apis/public/logging/v1/proto"
            "google.golang.org/grpc"
    )
    
    var serverAddr = flag.String("server", "localhost:8080", "server address")
    
    func main() {
            flag.Parse()
            tc := credentials.NewTLS(&tls.Config{InsecureSkipVerify: true})
            conn, err := grpc.Dial(*serverAddr, grpc.WithTransportCredentials(tc))
    
            if err != nil {
                    panic(error.Error(fmt.Errorf("create client connection failed: %v", err)))
            }
            defer conn.Close()
    
            c := pb.NewLogsClient(conn)
            md := metadata.Pairs("clienttest", "test")
            ctx := metadata.NewOutgoingContext(context.Background(), md)
    
            err = listLabels(ctx, c, "project-foo")
            if err != nil {
                    panic(error.Error(err))
            }
    
            if err := listLabelValues(ctx, c, "project-foo", "resource-bar"); err != nil {
                    panic(error.Error(err))
            }
    
            if err := listLogs(ctx, c, "project-foo", &pb.ListLogsFilter{
                    LabelsEqual:    map[string]string{"resource-bar": "resource-bar-value"},
                    OrderAscending: true,
            }); err != nil {
                    panic(error.Error(err))
            }
    }
    
    // List all labels for a project.
    
    func listLabels(ctx context.Context, c pb.LogsClient, project string) error {
            lbr := &pb.ListLabelsRequest{
                    Parent:   project,
                    PageSize: 1000, // PageSize can be configured to limit the number of responses per page.
            }
            resp, err := c.ListLabels(ctx, lbr)
            if err != nil {
                    return fmt.Errorf("list labels: %v", err)
            }
            fmt.Printf("%v", resp)
            return nil
    }
    
    // List specific label values for a project.
    
    func listLabelValues(ctx context.Context, c pb.LogsClient, project string, label string) error {
            lbr := &pb.ListLabelValuesRequest{
                    Parent:   project,
                    Label:    label,
                    PageSize: 1000, // PageSize can be configured to limit the number of responses per page.
            }
            resp, err := c.ListLabelValues(ctx, lbr)
            if err != nil {
                    return fmt.Errorf("list label values: %v", err)
            }
            fmt.Printf("%v", resp)
            return nil
    }
    
    // List logs for a specific project.
    
    func listLogs(ctx context.Context, c pb.LogsClient, project string, lf *pb.ListLogsFilter) error {
            lbr := &pb.ListLogsRequest{
                    Parent:     project,
                    LogsFilter: lf,
                    PageSize:   5, // PageSize can be configured to limit the number of responses per page.
            }
            resp, err := c.ListLogs(ctx, lbr)
            if err != nil {
                    return fmt.Errorf("list logs: %v", err)
            }
            fmt.Printf("logs: %v", resp)
            return nil
    }
    
  2. Ejecuta el programa Go:

    go run PATH_TO_API/client.go -server=LOG_QUERY_API_ENDPOINT:443
    

    Haz los cambios siguientes:

    • PATH_TO_API: la ruta al archivo de la API.
    • LOG_QUERY_API_ENDPOINT: el endpoint de la API Log Query desde el que quieres consultar los registros.

    Si no se especifica la marca del servidor, la solicitud predeterminada llega a localhost.

Consultas y etiquetas de ejemplo

Estas son algunas de las etiquetas predeterminadas que puedes usar para consultar registros:

  • cluster: el nombre del clúster.
  • namespace: el espacio de nombres de tu proyecto.
  • node: el nombre del nodo.
  • pod: el nombre del pod.
  • container: el nombre del contenedor.

En los siguientes ejemplos de código se muestra el uso de etiquetas y valores para consultar diferentes registros:

  • Selecciona los registros del servidor:

    {cluster="admin", namespace="kube-system", resources="k8s_container", container="kube-apiserver"}
    
  • Selecciona los registros de auditoría del clúster:

    {cluster="admin", resources="k8s_audit"}