Este documento contiene consultas de ejemplo sobre las entradas de registro almacenadas en contenedores de registro que se han actualizado para usar analíticas de registros.
En estos contenedores, puedes ejecutar consultas de SQL desde la página Analíticas de registros de la Google Cloud consola. Para ver más ejemplos, consulta los repositorios de GitHub logging-analytics-samples
y security-analytics
.
En este documento no se describe SQL ni cómo enrutar y almacenar entradas de registro. Para obtener información sobre estos temas, consulta la sección Próximos pasos.
En los ejemplos de esta página se consultan vistas de registro. Para consultar una vista de analíticas, usa el siguiente formato de ruta:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
.
En la expresión anterior, PROJECT_ID
es el ID de su proyecto, y LOCATION
y ANALYTICS_VIEW_ID
son la ubicación y el nombre de su vista de Analytics.
Compatibilidad con el lenguaje SQL
Las consultas que se usan en la página Analíticas de registros admiten funciones de GoogleSQL, con algunas excepciones.
Los siguientes comandos de SQL no se admiten en las consultas de SQL que se envían mediante la página Analíticas de registros:
- Comandos DDL y DML
- Funciones definidas por el usuario de JavaScript
- Funciones de BigQuery ML
- Variables de SQL
Solo se admiten las siguientes opciones cuando se consulta un conjunto de datos vinculado mediante las páginas BigQuery Studio y Looker Studio, o bien mediante la herramienta de línea de comandos bq:
- Funciones definidas por el usuario de JavaScript
- Funciones de BigQuery ML
- Variables de SQL
Prácticas recomendadas
Para definir el periodo de tu consulta, te recomendamos que uses el selector de periodo. Por ejemplo, para ver los datos de la semana pasada, seleccione Últimos 7 días en el selector de intervalo de tiempo. También puedes usar el selector de intervalo de tiempo para especificar una hora de inicio y de finalización, especificar una hora para ver los datos y cambiar la zona horaria.
Si incluye un campo timestamp
en la cláusula WHERE
, no se usará el ajuste del selector de intervalo de tiempo. En el siguiente ejemplo se muestra cómo filtrar por marca de tiempo:
-- Matches log entries whose timestamp is within the most recent 1 hour.
WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
Para obtener más información sobre cómo filtrar por tiempo, consulta las funciones de tiempo y las funciones de marca de tiempo.
Antes de empezar
En esta sección se describen los pasos que debe completar para poder usar Log Analytics.
Configurar segmentos de registros
Comprueba que tus contenedores de registros se hayan actualizado para usar Analíticas de registros:
-
En la Google Cloud consola, ve a la página Almacenamiento de registros:
Ve a Almacenamiento de registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
- En cada contenedor de registro que tenga una vista de registro que quieras consultar, comprueba que en la columna Analíticas de registros disponibles se muestre Abrir. Si se muestra Cambiar a plan superior, haz clic en Cambiar a plan superior y completa el cuadro de diálogo.
Configurar roles y permisos de gestión de identidades y accesos
En esta sección se describen los roles o permisos de gestión de identidades y accesos que se necesitan para usar Log Analytics:
-
Para obtener los permisos que necesitas para usar Log Analytics y consultar vistas de registro, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:
-
Para consultar los segmentos de registros
_Required
y_Default
, sigue estos pasos: Visualizador de registros (roles/logging.viewer
) -
Para consultar todas las vistas de registro de un proyecto, sigue estos pasos:
Usuario con permiso para ver registros (
roles/logging.viewAccessor
)
Puede restringir un principal a una vista de registro específica añadiendo una condición de IAM a la concesión del rol de acceso a la vista de registros que se haya hecho a nivel de proyecto o añadiendo un enlace de IAM al archivo de política de la vista de registro. Para obtener más información, consulta Controlar el acceso a una vista de registro.
Estos son los mismos permisos que necesitas para ver las entradas de registro en la página Explorador de registros. Para obtener información sobre los roles adicionales que necesitas para consultar vistas en segmentos definidos por el usuario o para consultar la vista
_AllLogs
del segmento de registro_Default
, consulta Roles de Cloud Logging. -
Para consultar los segmentos de registros
-
Para obtener los permisos que necesitas para consultar vistas de analíticas, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Usuario de Observabilidad Analytics (
roles/observability.analyticsUser
) en tu proyecto.
Cómo usar las consultas de esta página
-
En la Google Cloud consola, ve a la página Analíticas de registros:
Vaya a Analíticas de registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
En el panel Consulta, haz clic en code SQL y, a continuación, copia y pega una consulta en el panel de consultas SQL.
Antes de copiar una consulta, en la cláusula
FROM
, sustituye los siguientes campos:- PROJECT_ID: identificador del proyecto.
- LOCATION: la ubicación de la vista de registro o de la vista de analíticas.
- BUCKET_ID: nombre o ID del segmento de registro.
- LOG_VIEW_ID: identificador de la vista de registro, que tiene un límite de 100 caracteres y solo puede incluir letras, dígitos, guiones bajos y guiones.
A continuación, se muestra el formato de la cláusula
FROM
de una vista de registro:FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
Las muestras de registro de esta página consultan una vista de registro. Para consultar una vista de analíticas, usa el siguiente formato de ruta:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`
. En la expresión anterior,PROJECT_ID
es el ID de su proyecto, yLOCATION
yANALYTICS_VIEW_ID
son la ubicación y el nombre de su vista de Analytics.
Para usar las consultas que se muestran en este documento en la página BigQuery Studio o para usar la herramienta de línea de comandos bq, edita la cláusula FROM
e introduce la ruta al conjunto de datos vinculado.
Por ejemplo, para consultar la vista _AllLogs
del conjunto de datos vinculado llamado mydataset
que está en el proyecto myproject
, la ruta es
myproject.mydataset._AllLogs
.
Casos prácticos habituales
En esta sección se enumeran varios casos prácticos habituales que pueden ayudarte a crear tus consultas personalizadas.
Mostrar entradas de registro en el segmento de registro predeterminado
Para consultar el bucket _Default
, ejecuta la siguiente consulta:
SELECT
timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload
FROM
`PROJECT_ID.LOCATION._Default._AllLogs`
-- Limit to 1000 entries
LIMIT 1000
Extraer el valor de un campo mediante una expresión regular
Para extraer un valor de una cadena mediante una expresión regular, usa la función
REGEXP_EXTRACT
:
SELECT
-- Display the timestamp, and the part of the name that begins with test.
timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Get the value of jobName, which is a subfield in a JSON structure.
JSON_VALUE(json_payload.jobName) IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20
Para obtener más información, consulta la documentación de REGEXP_EXTRACT
.
En el caso de las coincidencias de subcadenas, como en la consulta anterior, el uso de la función CONTAINS_SUBSTR
da como resultado una consulta más eficiente.
Filtrar entradas de registro
Para aplicar un filtro a la consulta, añade una cláusula WHERE
. La sintaxis que use en esta cláusula depende del tipo de datos del campo. En esta sección se ofrecen varios ejemplos de diferentes tipos de datos.
Filtrar entradas de registro por tipo de carga útil
Las entradas de registro pueden tener uno de estos tres tipos de carga útil. Para filtrar las entradas de registro por el tipo de carga útil, usa una de las siguientes cláusulas:
Cargas útiles de texto
-- Matches log entries that have a text payload. WHERE text_payload IS NOT NULL
Cargas útiles de JSON
-- Matches log entries that have a JSON payload. WHERE json_payload IS NOT NULL
Cargas útiles de Proto
-- Matches log entries that have a proto payload. -- Because proto_payload has a data type of RECORD, this statement tests -- whether a mandatory subfield exits. WHERE proto_payload.type IS NOT NULL
En los resultados de la consulta, los campos json_payload
y proto_payload
se renderizan en JSON, por lo que puedes desplazarte por ellos.
Filtrar datos de registro por marca de tiempo
Para filtrar las entradas de registro por su marca de tiempo, te recomendamos que uses el selector de intervalo de tiempo. Sin embargo, también puedes especificar el timestamp
en la cláusula WHERE
:
-- Matches log entries whose timestamp is within the most recent hour
WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
Para obtener más información sobre cómo filtrar por tiempo, consulta las secciones Funciones de tiempo y Funciones de marca de tiempo.
Filtrar por recurso
Para filtrar los datos de registro por recurso, añade una instrucción resource.type
a la cláusula WHERE
:
-- Matches log entries whose resource type is gce_instance
WHERE resource.type = "gce_instance"
Filtrar por gravedad
Para filtrar los datos de registro por gravedad, añade una instrucción severity
a la cláusula WHERE
:
-- Matches log entries whose severity is INFO or ERROR
WHERE severity IS NOT NULL AND severity IN ('INFO', 'ERROR')
También puedes filtrar las entradas de registro por severity_number
, que es un número entero. Por ejemplo, la siguiente cláusula coincide con todas las entradas de registro cuyo nivel de gravedad sea al menos NOTICE
:
-- Matches log entries whose severity level is at least NOTICE
WHERE severity_number IS NOT NULL AND severity_number > 200
Para obtener información sobre los valores enumerados, consulta LogSeverity
.
Filtrar por nombre de registro
Para filtrar los datos de registro por nombre de registro, añade una instrucción log_name
o log_id
a la cláusula WHERE
:
El nombre del registro especifica la ruta del recurso:
-- Matches log entries that have the following log ID. WHERE log_name="projects/cloud-logs-test-project/logs/cloudaudit.googleapis.com%2Factivity"
El ID de registro omite la ruta del recurso:
-- Matches log entries that have the following log id. WHERE log_id = "cloudaudit.googleapis.com/data_access"
Filtrar entradas de registro por etiqueta de recurso
Las etiquetas de recursos se almacenan como una estructura JSON. Para filtrar por el valor de un campo de una estructura JSON, usa la función JSON_VALUE
:
SELECT
timestamp, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Matches log entries whose resource type is gce_instance and whose zone is
-- us-central1-f. Because resource has data type JSON, you must use JSON_VALUE
-- to get the value for subfields, like zone.
resource.type = "gce_instance" AND
JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC
La consulta anterior se basa en el formato de las etiquetas de recursos, tal como se almacenan en una entrada de registro. A continuación, se muestra un ejemplo del campo de recurso:
{
type: "gce_instance"
labels: {
instance_id: "1234512345123451"
project_id: "my-project"
zone: "us-central1-f"
}
}
Para obtener información sobre todas las funciones que pueden recuperar y transformar datos JSON, consulta Funciones JSON.
Filtrar por solicitud HTTP
Para consultar solo las entradas de registro que tengan un campo de solicitud HTTP, usa la siguiente cláusula:
-- Matches log entries that have a HTTP request_method field.
-- Don't compare http_request to NULL. This field has a data type of RECORD.
WHERE http_request.request_method IS NOT NULL
También puedes usar la instrucción IN
:
-- Matches log entries whose HTTP request_method is GET or POST.
WHERE http_request.request_method IN ('GET', 'POST')
Filtrar por estado HTTP
Para consultar solo las entradas de registro que tengan un estado HTTP, usa la siguiente cláusula:
-- Matches log entries that have an http_request.status field.
WHERE http_request.status IS NOT NULL
Filtrar por un campo de un tipo de datos JSON
Para consultar solo las entradas de registro cuando el subcampo de un campo con un tipo de datos JSON tiene un valor específico, extrae el valor mediante la función JSON_VALUE
:
-- Compare the value of the status field to NULL.
WHERE JSON_VALUE(json_payload.status) IS NOT NULL
La cláusula anterior es ligeramente diferente de la siguiente:
-- Compare the status field to NULL.
WHERE json_payload.status IS NOT NULL
La primera cláusula comprueba si el valor del campo de estado es NULL
. La segunda cláusula comprueba si existe el campo de estado. Supongamos que una vista de registro contiene dos entradas de registro. En una entrada de registro, el campo json_payload
tiene el siguiente formato:
{
status: {
measureTime: "1661517845"
}
}
En la otra entrada de registro, el campo json_payload
tiene una estructura diferente:
{
@type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
jobName: "projects/my-project/locations/us-central1/jobs/test1"
relativeUrl: "/food=cake"
status: "NOT_FOUND"
targetType: "APP_ENGINE_HTTP"
}
La cláusula WHERE json_payload.status IS NOT NULL
coincide con ambas entradas de registro.
Sin embargo, la cláusula WHERE JSON_VALUE(json_payload.status) IS NOT NULL
solo coincide con la segunda entrada del registro.
Agrupar y agregar entradas de registro
En esta sección se amplían los ejemplos anteriores y se muestra cómo puedes agrupar y agregar entradas de registro. Si no especifica una agrupación, pero sí una agregación, se imprimirá un resultado porque SQL trata todas las filas que cumplen la cláusula WHERE
como un grupo.
Todas las expresiones SELECT
deben incluirse en los campos de grupo o agregarse.
Agrupar entradas de registro por marca de tiempo
Para agrupar los datos por marca de tiempo, usa la función TIMESTAMP_TRUNC
, que trunca una marca de tiempo a una granularidad especificada, como HOUR
:
SELECT
-- Truncate the timestamp by hour.
TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
JSON_VALUE(json_payload.status) AS status,
-- Count the number log entries in each group.
COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Matches log entries that have a status field whose value isn't NULL.
json_payload IS NOT NULL AND JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY
-- Group by hour and status
hour,status
ORDER BY hour ASC
Para obtener más información, consulta la documentación de TIMESTAMP_TRUNC
y las funciones de fecha y hora.
Agrupar entradas de registro por recurso
La siguiente consulta muestra cómo agrupar las entradas de registro por tipo de recurso y, a continuación, contar el número de entradas de registro de cada grupo:
SELECT
-- Count the number of log entries for each resource type
resource.type, COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
GROUP BY resource.type
LIMIT 100
Agrupar entradas de registro por gravedad
La siguiente consulta muestra cómo agrupar las entradas de registro por gravedad y, a continuación, contar el número de entradas de registro de cada grupo:
SELECT
-- Count the number of log entries for each severity.
severity, COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100
Agrupar las entradas de registro por su log_id
La siguiente consulta muestra cómo agrupar las entradas de registro por ID de registro y, a continuación, contar el número de entradas de registro de cada grupo:
SELECT
-- Count the number of log entries for each log ID.
log_id, COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100
Calcula la latencia media de las solicitudes HTTP por URL.
La siguiente consulta muestra cómo agrupar las entradas de registro por URL de solicitud HTTP y ubicación, y, a continuación, contar el número de entradas de registro de cada grupo:
SELECT
-- Compute the average latency for each group. Because the labels field has a
-- data type of JSON, use JSON_VALUE to get the value of checker_location.
JSON_VALUE(labels.checker_location) AS location,
AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
-- Matches log entries when the request_method field is GET.
http_request IS NOT NULL AND http_request.request_method IN ('GET')
GROUP BY
-- Group by request URL and location
http_request.request_url, location
ORDER BY location
LIMIT 100
Calcula la media de bytes enviados en una prueba de subred.
La siguiente consulta muestra cómo agrupar las entradas de registro por la ubicación especificada en las etiquetas de recursos y, a continuación, calcular el número de entradas de registro de cada grupo:
SELECT
-- Compute the average number of bytes sent per location. Because labels has
-- a data type of JSON, use JSON_VALUE to get the value of the location field.
-- bytes_sent is a string. Must cast to a FLOAT64 before computing average.
JSON_VALUE(resource.labels.location) AS location,
AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
resource.type = "gce_subnetwork" AND json_payload IS NOT NULL
GROUP BY
-- Group by location
location
LIMIT 100
Para obtener más información, consulta las funciones JSON y las funciones de conversión.
Contar las entradas de registro con un campo que coincida con un patrón
Para devolver la subcadena que coincide con una expresión regular, usa la función
REGEXP_EXTRACT
:
SELECT
-- Extract the value that begins with test.
-- Count the number of log entries for each name.
REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
COUNT(*) AS count
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20
Para ver más ejemplos, consulta la documentación de REGEXP_EXTRACT
.
Búsqueda en varias columnas
En esta sección se describen dos métodos que puedes usar para buscar en varias columnas de la vista que estás consultando:
Búsquedas basadas en tokens: especifica la ubicación de búsqueda y una consulta de búsqueda, y, a continuación, usa la función
SEARCH
. Como la funciónSEARCH
tiene reglas específicas sobre cómo se buscan los datos, te recomendamos que leas la documentación deSEARCH
.Búsquedas basadas en subcadenas: proporcionas la ubicación de búsqueda, una cadena literal y, a continuación, usas la función
CONTAINS_SUBSTR
. El sistema realiza una prueba que no distingue entre mayúsculas y minúsculas para determinar si el literal de cadena existe en una expresión. La funciónCONTAINS_SUBSTR
devuelveTRUE
cuando existe el literal de cadena yFALSE
en caso contrario. El valor de búsqueda debe ser un literalSTRING
, pero no el literalNULL
.
Búsqueda basada en tokens en una vista de registro
La siguiente consulta solo conserva las filas que tienen un campo que coincide exactamente con "35.193.12.15":
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID` AS t
WHERE
-- Search data access audit logs for the IP address that matches 35.193.12.15.
-- The use of backticks prevents the string from being tokenized.
proto_payload IS NOT NULL AND
log_id = "cloudaudit.googleapis.com/data_access" AND
SEARCH(t,"`35.193.12.15`")
ORDER BY timestamp ASC
LIMIT 20
Si se omiten las comillas inversas en la cadena de consulta, esta se dividirá según las reglas definidas en la documentación de SEARCH
.
Por ejemplo, cuando se ejecuta la siguiente instrucción, la cadena de consulta se divide en cuatro tokens: "35", "193", "12" y "15":
SEARCH(t,"35.193.12.15")
La instrucción SEARCH
anterior coincide con una fila cuando un solo campo coincide con los cuatro tokens. El orden de los tokens no importa.
Puedes incluir varias instrucciones SEARCH
en una consulta. Por ejemplo, en la consulta anterior, puedes sustituir el filtro del ID de registro por una instrucción como la siguiente:
SEARCH(t,"`cloudaudit.googleapis.com/data_access`")
La instrucción anterior busca en todos los campos de las entradas de registro de la vista de registro, mientras que la instrucción original solo busca en el campo log_id
de las entradas de registro.
Para hacer varias búsquedas en varios campos, separa las cadenas individuales con un espacio. Por ejemplo, la siguiente instrucción coincide con las filas en las que un campo contiene "Hello World", "happy" y "days":
SEARCH(t,"`Hello World` happy days")
Por último, puedes buscar campos específicos en lugar de buscar en una tabla completa. Por ejemplo, la siguiente instrucción solo busca en las columnas text_payload
y json_payload
:
SEARCH((text_payload, json_payload) ,"`35.222.132.245`")
Para obtener información sobre cómo se procesan los parámetros de la función SEARCH
, consulta la página de referencia de BigQuery Funciones de búsqueda.
Búsqueda de subcadenas en una vista de registro
Por ejemplo, la siguiente consulta obtiene todas las entradas de registro de auditoría de acceso a los datos con una dirección IP específica cuyas marcas de tiempo se encuentran en un intervalo de tiempo concreto. Por último, la consulta ordena los resultados y muestra los 20 más antiguos:
SELECT
timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
`PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID` AS t
WHERE
-- Search data access audit logs for the IP address that matches 35.193.12.15.
-- CONTAINS_SUBSTR performs a contains-test.
proto_payload IS NOT NULL AND
log_id = "cloudaudit.googleapis.com/data_access" AND
CONTAINS_SUBSTR(t,"35.193.12.15")
ORDER BY timestamp ASC
LIMIT 20
Consultar varias vistas
Las instrucciones de consulta analizan una o varias tablas o expresiones y devuelven las filas de resultados calculadas. Por ejemplo, puede usar instrucciones de consulta para combinar los resultados de instrucciones SELECT
en diferentes tablas o conjuntos de datos de varias formas y, a continuación, seleccionar las columnas de los datos combinados.
Cuando consultas varias vistas, estas deben estar en la misma ubicación. Por ejemplo, si dos vistas se encuentran en la ubicación us-east1
, una consulta puede consultar ambas vistas. También puedes consultar dos vistas que se encuentren en la us
multirregión. Sin embargo, si la ubicación de una vista es global
, esa vista puede estar en cualquier ubicación física. Por lo tanto, es posible que no se puedan realizar combinaciones entre dos vistas que tengan la ubicación global
.
Unir dos vistas de registro por el ID de traza
Para combinar información de dos tablas, usa uno de los operadores de unión:
SELECT
-- Do an inner join on two tables by using the span ID and trace ID.
-- Don't join only by span ID, as this field isn't globally unique.
-- From the first view, show the timestamp, severity, and JSON payload.
-- From the second view, show the JSON payload.
a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_1` a
JOIN `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_2` b
ON
a.span_id = b.span_id AND
a.trace = b.trace
LIMIT 100
Consultar dos vistas de registro con una instrucción UNION
Para combinar los resultados de dos o más instrucciones SELECT
y descartar las filas duplicadas, usa el operador UNION
. Para conservar las filas duplicadas, usa el operador UNION ALL
:
SELECT
timestamp, log_name, severity, json_payload, resource, labels
-- Create a union of two log views
FROM(
SELECT * FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_1`
UNION ALL
SELECT * FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_2`
)
-- Sort the union by timestamp.
ORDER BY timestamp ASC
LIMIT 100
Eliminar entradas de registro duplicadas
Log Analytics no elimina las entradas de registro duplicadas antes de ejecutar una consulta. Este comportamiento es diferente al que se produce cuando consultas entradas de registro mediante el Explorador de registros, que elimina las entradas duplicadas comparando los campos de nombre de registro, marca de tiempo e ID de inserción.
Puedes usar la validación a nivel de fila para eliminar las entradas de registro duplicadas.
Para obtener más información, consulta Solucionar problemas: hay entradas de registro duplicadas en mis resultados de Log Analytics.
Siguientes pasos
Para obtener información sobre cómo enrutar y almacenar entradas de registro, consulta los siguientes documentos:
- Crear un segmento de registro
- Actualizar un contenedor para usar Analíticas de registros
- Vincular un contenedor de registro a un conjunto de datos de BigQuery
- Configurar y gestionar sumideros
Para consultar la documentación de referencia de SQL, consulta los siguientes documentos: