Usa registros exportados

En esta página, se explica cómo puedes encontrar y utilizar tus entradas de registro exportadas en Cloud Storage, BigQuery y Cloud Pub/Sub.

A fin de ver una descripción general sobre la exportación de registros, consulta Descripción general de la exportación de registros.

Para conocer cómo exportar tus registros, consulta las siguientes páginas:

Cloud Storage

Para ver tus registros exportados en Cloud Storage, sigue estos pasos:

  1. Ve al navegador de Cloud Storage en GCP Console:

    Navegador de Cloud Storage

    1. Selecciona el depósito que utilizas para la exportación de registros.

Consulta Organización de Cloud Storage para obtener detalles sobre cómo se organizan los registros en el depósito.

Disponibilidad de registros exportados

Si no ves ningún registro exportado, consulta las métricas del sistema de exportación. Estas métricas del sistema de exportación te pueden decir cuántas entradas de registro se exportan y cuántas se descartan debido a errores. Si las métricas del sistema de exportación indican que no se exportó ninguna entrada de registro, consulta el filtro de exportación para verificar que las entradas de registro que coincidan con tu filtro hayan llegado recientemente a Stackdriver Logging:

Ir a la página Exportaciones de registros

Las entradas de registro se guardan en depósitos de Cloud Storage en lotes por hora. Es posible que se necesiten entre 2 y 3 horas para que aparezca la primera entrada.

Organización de registros exportados

Cuando exportas registros a un depósito de Cloud Storage, Stackdriver Logging escribe un conjunto de archivos en el depósito. En el directorio, los archivos tienen una organización jerárquica según el tipo de registro y fecha. El tipo de registro puede ser un nombre simple como syslog o uno compuesto como appengine.googleapis.com/request_log. Si estos registros se almacenarán en un depósito llamado my-gcs-bucket, entonces los directorios se nombrarían como en el siguiente ejemplo:

my-gcs-bucket/syslog/YYYY/MM/DD/
my-gcs-bucket/appengine.googleapis.com/request_log/YYYY/MM/DD/

Un único depósito puede contener registros de varios tipos de recursos.

Stackdriver Logging no garantiza la duplicación de las entradas de registro desde receptores que contengan filtros idénticos o superpuestos; las entradas de registro desde esos receptores pueden escribirse varias veces en un depósito de Cloud Storage.

Los directorios hoja (DD/) contienen varios archivos, cada uno de los cuales contiene entradas de registro exportados por un período especificado en el nombre del archivo. Los archivos están fragmentados y sus nombres terminan en un número fragmentado, Sn o An (n=0, 1, 2,…). Por ejemplo, a continuación, se muestran dos archivos que pueden almacenarse dentro del directorio my-gcs-bucket/syslog/2015/01/13/:

08:00:00_08:59:59_S0.json
08:00:00_08:59:59_S1.json

Estos dos archivos juntos contienen las entradas de registro syslog correspondientes a todas las instancias durante la hora que comienza a las 0800 UTC. Las marcas de tiempo de las entradas de registro se expresan en UTC (Horario universal coordinado).

A fin de obtener todas las entradas de registro, debes leer todos los fragmentos de cada período; en este caso, los fragmentos de archivos 0 y 1. La cantidad de fragmentos de archivos escritos puede cambiar para cada período en función de la cantidad de entradas de registro.

Dentro de los archivos fragmentados individuales, las entradas de registro se almacenan como una lista de objetos LogEntry. A fin de conocer una entrada syslog de ejemplo, consulta tipo LogEntry en esta página.

Ten en cuenta que el orden de clasificación de las entradas de registro dentro de los archivos no es uniforme, ni está garantizado.

BigQuery

A fin de ver tus registros exportados en BigQuery, sigue estos pasos:

  1. Ve a la IU de BigQuery en GCP Console:

    Ir a la IU de BigQuery

  2. Selecciona el conjunto de datos utilizado como destino de tu receptor.

  3. Selecciona una de las tablas del conjunto de datos. Las entradas de registro se pueden ver en la pestaña Detalles, o puedes consultar la tabla para que muestre tus datos.

A fin de obtener más información, consulta Organización de la tabla y descubre cómo se organizan las tablas, y Exporta registros y el esquema de BigQuery para descubrir cómo se nombran los campos de las entradas de registro.

Disponibilidad de BigQuery

Si no ves ningún registro exportado, consulta las métricas del sistema de exportación. Estas métricas del sistema de exportación te pueden decir cuántas entradas de registro se exportan y cuántas se descartan debido a errores. Si las métricas del sistema de exportación indican que no se exportó ninguna entrada de registro, consulta el filtro de exportación para verificar que las entradas de registro que coincidan con tu filtro hayan llegado recientemente a Stackdriver Logging:

Ir a la página Exportaciones de registros

Las entradas se guardan en BigQuery en lotes. Pueden pasar varios minutos hasta que aparezca la primera entrada.

Organización de la tabla

Cuando exportas registros a un conjunto de datos de BigQuery, Stackdriver Logging crea tablas con fechas para contener las entradas de registro exportadas. Las entradas de registro se ubican en tablas cuyos nombres se basan en los nombres de registro y las marcas de tiempo de las entradas1. En la siguiente tabla, se muestran ejemplos sobre cómo se asignan los nombres de registros y las marcas de tiempo con los nombres de la tabla:

Nombre del registro Marca de tiempo de la entrada del registro1 Nombre de la tabla de BigQuery
syslog 2017-05-23T18:19:22.135Z syslog_20170523
apache-access 2017-01-01T00:00:00.000Z apache_access_20170101
compute.googleapis.com/activity_log 2017-12-31T23:59:59.999Z compute_googleapis_com_activity_log_20171231

1: Las marcas de tiempo de las entradas de registro se expresan en UTC (Horario universal coordinado)

Esquemas y campos

Los esquemas de tablas de BigQuery para los registros exportados se basan en la estructura del tipo LogEntry y el contenido de las cargas útiles del registro. A fin de ver el esquema de la tabla, selecciona una tabla con entradas de registro exportadas en la IU web de BigQuery.

El esquema de la tabla de BigQuery utilizado para representar cargas útiles de entradas de registro complejas puede ser confuso y, en el caso de registros de auditoría exportados, se utilizan algunas reglas especiales de denominación. A fin de obtener más información, consulta Esquema de BigQuery para registros exportados.

Consultas

A fin de obtener ejemplos de consultas que involucren registros de auditoría exportados en BigQuery, lee Consultas de registros de auditoría de BigQuery.

Verifica la Referencia de consulta para obtener más información sobre las consultas de BigQuery. Las Funciones de comodines de la tabla son especialmente útiles, ya que permiten realizar consultas en varias tablas; también lo es el Operador Flatten, que permite mostrar datos de campos repetidos.

Una consulta de registros de Compute Engine de ejemplo

La siguiente consulta de BigQuery recupera entradas de registro de días y tipos de registros múltiples:

  • La consulta busca en los últimos tres días de los registros syslog y apache-access. La consulta se hizo el 23 de febrero de 2015 y comprende todas las entradas de registro recibidas el 21 y el 22 de febrero, además de las entradas de registro recibidas el 23 de febrero hasta el momento en que se emitió la consulta.

  • La consulta recupera los resultados de una única instancia de Compute Engine 1554300700000000000.

  • La consulta ignora el tráfico desde el verificador de estado del extremo de Stackdriver Monitoring, Stackdriver_terminus_bot.

SELECT
  timestamp AS Time,
  logName as Log,
  textPayload AS Message
FROM
  (TABLE_DATE_RANGE(my_bq_dataset.syslog_,
    DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), CURRENT_TIMESTAMP())),
  (TABLE_DATE_RANGE(my_bq_dataset.apache_access_,
    DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), CURRENT_TIMESTAMP()))
WHERE
  resource.type == 'gce_instance'
  AND resource.labels.instance_id == '1554300700000000000'
  AND NOT (textPayload CONTAINS 'Stackdriver_terminus_bot')
ORDER BY time;

A continuación, se muestran algunas filas de ejemplos de resultados:

Row | Time                    | Log                                         | Message
--- | ----------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------
 5  | 2015-02-21 03:40:14 UTC | projects/project-id/logs/syslog             | Feb 21 03:40:14 my-gce-instance collectd[24281]: uc_update: Value too old: name = 15543007601548826368/df-tmpfs/df_complex-used; value time = 1424490014.269; last cache update = 1424490014.269;
 6  | 2015-02-21 04:17:01 UTC | projects/project-id/logs/syslog             | Feb 21 04:17:01 my-gce-instance /USR/SBIN/CRON[8082]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
 7  | 2015-02-21 04:49:58 UTC | projects/project-id/logs/apache-access      | 128.61.240.66 - - [21/Feb/2015:04:49:58 +0000] "GET / HTTP/1.0" 200 536 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
 8  | 2015-02-21 05:17:01 UTC | projects/project-id/logs/syslog             | Feb 21 05:17:01 my-gce-instance /USR/SBIN/CRON[9104]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
 9  | 2015-02-21 05:30:50 UTC | projects/project-id/log/syslogapache-access | 92.254.50.61 - - [21/Feb/2015:05:30:50 +0000] "GET /tmUnblock.cgi HTTP/1.1" 400 541 "-" "-"

Una consulta de registros de App Engine de ejemplo

La siguiente consulta de BigQuery recupera consultas de App Engine fallidas del último mes:

SELECT
  timestamp AS Time,
  protoPayload.host AS Host,
  protoPayload.status AS Status,
  protoPayload.resource AS Path
FROM
  (TABLE_DATE_RANGE(my_bq_dataset.appengine_googleapis_com_request_log_,
    DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), CURRENT_TIMESTAMP()))
WHERE
  protoPayload.status != 200
ORDER BY time

A continuación, algunos de los resultados:

Row | Time                    | Host                                  | Status | Path
--- | ----------------------- | ------------------------------------- | ------ | ------
 6  | 2015-02-12 19:35:02 UTC | default.my-gcp-project-id.appspot.com |    404 | /foo?thud=3
 7  | 2015-02-12 19:35:21 UTC | default.my-gcp-project-id.appspot.com |    404 | /foo
 8  | 2015-02-16 20:17:19 UTC | my-gcp-project-id.appspot.com         |    404 | /favicon.ico
 9  | 2015-02-16 20:17:34 UTC | my-gcp-project-id.appspot.com         |    404 | /foo?thud=%22what???%22

Cloud Pub/Sub

A fin de ver tus registros exportados a medida que se transmiten con Cloud Pub/Sub, sigue estos pasos:

  1. Ve a la página de Cloud Pub/Sub en GCP Console.

    Ir a Cloud Pub/Sub

  2. Encuentra o crea una suscripción al tema utilizado para la exportación de registros y extrae una entrada de registro de ella. Posiblemente tengas que esperar que se publique una nueva entrada de registro.

Consulta Organización de registros exportados para obtener detalles sobre cómo se organizan los registros.

Disponibilidad de registros exportados

Si no ves ningún registro exportado, consulta las métricas del sistema de exportación. Estas métricas del sistema de exportación te pueden decir cuántas entradas de registro se exportan y cuántas se descartan debido a errores. Si las métricas del sistema de exportación indican que no se exportó ninguna entrada de registro, consulta el filtro de exportación para verificar que las entradas de registro que coincidan con tu filtro hayan llegado recientemente a Stackdriver Logging:

Ir a la página Exportaciones de registros

Cuando exportas registros a un tema de Cloud Pub/Sub, Stackdriver Logging publica cada entrada de registro como un mensaje de Cloud Pub/Sub ni bien Stackdriver Logging recibe la entrada de registro.

Organización de registros exportados

El campo data de cada mensaje es un objeto LogEntry codificado en base64. Como ejemplo, un suscriptor de Cloud Pub/Sub podría extraer el siguiente objeto de un tema que recibe entradas de registro. El objeto que se muestra contiene una lista con un solo mensaje, aunque Cloud Pub/Sub podría mostrar diferentes mensajes si hay diferentes entradas de registro disponibles. El valor data (cerca de 600 caracteres) y el valor ackId (cerca de 200 caracteres) se acortaron para facilitar la lectura del ejemplo:

{
 "receivedMessages": [
  {
   "ackId": "dR1JHlAbEGEIBERNK0EPKVgUWQYyODM...QlVWBwY9HFELH3cOAjYYFlcGICIjIg",
   "message": {
    "data": "eyJtZXRhZGF0YSI6eyJzZXZ0eSI6Il...Dk0OTU2G9nIjoiaGVsbG93b3JsZC5sb2cifQ==",
    "attributes": {
     "compute.googleapis.com/resource_type": "instance",
     "compute.googleapis.com/resource_id": "123456"
    },
    "messageId": "43913662360"
   }
  }
 ]
}

Si decodificas el campo data y lo formateas, obtienes el siguiente objeto LogEntry:

{
  "log": "helloworld.log",
  "insertId": "2015-04-15|11:41:00.577447-07|10.52.166.198|-1694494956",
  "textPayload": "Wed Apr 15 20:40:51 CEST 2015 Hello, world!",
  "timestamp": "2015-04-15T18:40:56Z",
  "labels": {
    "compute.googleapis.com\/resource_type": "instance",
    "compute.googleapis.com\/resource_id": "123456"
  },
  "severity": "WARNING"
  }
}

Objetos de entradas de registro

Las entradas de registro de Stackdriver Logging son objetos de tipo LogEntry. En la siguiente tabla, se muestran los campos más importantes de la entrada de registros:

Es habitual que todas las entradas de registro con un [LOG_ID] particular tengan el mismo formato. Cada tipo de registro documenta el contenido de su campo de carga útil. Consulta el índice de registros de Stackdriver Logging para ver ejemplos. A continuación, se muestran ejemplos de entradas de registro:

syslog

syslog de Compute Engine es un tipo de registro personalizado producido por un agente de registro, google-fluentd, que se ejecuta en instancias de máquinas virtuales:

{
  logName: "projects/my-gcp-project-id/logs/syslog",
  timestamp: "2015-01-13T19:17:01Z",
  resource: {
    type: "gce_instance",
    labels: {
      instance_id: "12345",
      zone: "us-central1-a",
      project_id: "my-gcp-project-id"
    }
  },
  insertId: "abcde12345",
  textPayload: "Jan 13 19:17:01 my-gce-instance /USR/SBIN/CRON[29980]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)"
}

request_log

request_log de App Engine posee entradas de registro que contienen campos protoPayload con objetos de tipos RequestLog:

{
  logName: "projects/my-gcp-project-id/logs/appengine.googleapis.com%2Frequest_log",
  timestamp: "2015-01-13T19:00:39.796169Z",
  resource: {
    type: "gae_app",
    labels: {
      module_id: "default",
      zone: "us6",
      project_id: "my-gcp-project-id",
      version_id: "20150925t173233"
    }
  }
  httpRequest: {
    status: 200
  }
  insertId: "abcde12345",
  operation: {
    id: "abc123",
    producer: "appengine.googleapis.com/request_id",
    first: true,
    last: true
  }
  protoPayload: {
    @type: "type.googleapis.com/google.appengine.logging.v1.RequestLog"
    versionId: "20150925t173233",
    status: 200,
    startTime: "2017-01-13T19:00:39.796169Z",
    # ...
    appId: "s~my-gcp-project-id",
    appEngineRelease: "1.9.17",
  }
}

activity

El registro activity es un registro de auditoría de actividad de administrador. Su carga útil es una representación JSON del tipo AuditLog:

{
 logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity"
 timestamp: "2017-04-22T13:41:32.245Z"
 severity: "NOTICE"
 resource: {
  type: "gce_instance"
  labels: {
   instance_id: "2403273232180765234"
   zone: "us-central1-b"
   project_id: "my-gcp-project-id"
  }
 }
 insertId: "54DC1882F4B49.A4996C2.6A02F4C1"
 operation: {
  id: "operation-1492868454262-54dc185e9a4f0-249fe233-f73d472a"
  producer: "compute.googleapis.com"
  last: true
 }
 protoPayload: {
  @type: "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail: "649517127304@cloudservices.gserviceaccount.com"
  }
  requestMetadata: {…}
  serviceName: "compute.googleapis.com"
  methodName: "v1.compute.instances.delete"
  resourceName: "projects/my-gcp-project-id/zones/us-central1-b/instances/abc123"
 }
}

Entradas de registro tardías

Las entradas de registro exportadas se guardan en depósitos de Cloud Storage en lotes por hora. Es posible que se necesiten entre 2 y 3 horas para que aparezca la primera entrada. Los fragmentos de archivos de registros exportados con el sufijo An ("Anexar") contienen entradas de registro tardías.

Además, App Engine combina diversas subentradas de tipo google.appengine.logging.v1.LogLine (también llamadas AppLog o AppLogLine) bajo una entrada de registro principal de tipo google.appengine.logging.v1.RequestLog para la solicitud que provoca la actividad de registro. Cada línea de registro cuenta con un "ID de solicitud" que define la entrada principal. El visor de registros muestra las líneas de registros con la solicitud de entradas de registro. Stackdriver Logging intenta incluir todas las líneas de registros en un lote con la solicitud original, incluso si la marca de tiempo los colocaría en el siguiente lote. Si eso no es posible, a la entrada de registro de la solicitud podrían faltarle algunas líneas de registro, y podría haber líneas de registro "huérfanas" sin una solicitud en el próximo lote. Si esta posibilidad te parece importante, prepárate para volver a conectar las partes de la solicitud cuando proceses los registros.

Integración de terceros con Cloud Pub/Sub

Stackdriver Logging es compatible con la integración de registros con terceros. Consulta Integración de Stackdriver para conocer una lista actualizada de integraciones.

Exportas tus registros mediante un tema de Cloud Pub/Sub y el tercero se suscribe al mismo tema para recibir tus registros.

A fin de realizar la integración, prepárate para realizar pasos como los siguientes:

  1. Obtén del tercero un nombre de cuenta de servicio de Google Cloud Platform (GCP) creado a partir de su proyecto de GCP. Por ejemplo, 12345-xyz@developer.gserviceaccount.com. Utilizas este nombre para darle permiso al tercero a recibir tus registros.

  2. En tu proyecto que contiene los registros,

    Habilita las API

  3. Crea un tema de Pub/Sub. A fin de hacer esto, configura un receptor de registro o sigue estos pasos:

    1. Ve a la lista de temas de Pub/Sub.
    2. Selecciona Crear tema y, a continuación, ingresa un nombre de tema. Por ejemplo, projects/my-project-id/topics/my-pubsub-topic. Exportarás tus registros a este tema.
    3. Selecciona Crear.
    4. Autoriza a Stackdriver Logging a exportar registros al tema. Consulta Establece permisos para Cloud Pub/Sub.
  4. Autoriza al tercero a suscribirse a tu tema:

    1. Permanece en la lista de temas de Pub/Sub de tu proyecto en GCP Console.
    2. Selecciona tu nuevo tema.
    3. Selecciona Permisos.
    4. Ingresa el nombre de la cuenta de servicio del tercero.
    5. En el menú Selecciona una función, selecciona Suscriptor de Pub/Sub.
    6. Selecciona Agregar.
  5. Bríndale al tercero el nombre de tu tema de Cloud Pub/Sub. Por ejemplo, projects/my-project-number/topics/my-pubsub-topic. Debe suscribirse al tema antes de que tú comiences la exportación.

  6. Comienza a exportar los registros una vez que el tercero se haya suscrito al tema:

    1. En el proyecto que contiene los registros que deseas exportar, haz clic en Crear exportación, que se encuentra sobre el cuadro de filtro y búsqueda. Esto abrirá el panel Editar exportación (Edit Export):

      Edita el panel de exportación

    2. Ingresa un Nombre del receptor (Sink Name).

    3. En el menú Servicio del receptor (Sink Service), selecciona Cloud Pub/Sub.

    4. En el menú Destino del receptor (Sink Destination), selecciona el tema de Cloud Pub/Sub al cual está suscrito el tercero.

    5. Selecciona Crear receptor (Create Sink) para comenzar la exportación.

    6. Aparecerá un cuadro de diálogo con la leyenda Se creó el receptor. Esto indica que tu receptor de exportación se creó correctamente con permisos para escribir futuros registros coincidentes con el destino que seleccionaste.

El tercero debería comenzar a recibir las entradas de los registros de inmediato.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Stackdriver Logging
¿Necesitas ayuda? Visita nuestra página de asistencia.