Consultas en SQL de muestra

En este documento, se incluyen consultas de muestra sobre entradas de registro que se almacenan en buckets de registros que se actualizaron para usar Log Analytics. En estos buckets, puedes ejecutar consultas en SQL desde la página Análisis de registros en la consola de Google Cloud . Para ver más ejemplos, consulta los repositorios de GitHub de 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 esos temas, consulta la sección Próximos pasos.

Los ejemplos de esta página consultan vistas de registros. Para consultar una vista de Analytics, 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 tu proyecto, y LOCATION y ANALYTICS_VIEW_ID son la ubicación y el nombre de tu vista de Analytics.

Compatibilidad con el lenguaje SQL

Las consultas que se usan en la página Análisis de registros admiten funciones de GoogleSQL, con algunas excepciones.

Los siguientes comandos de SQL no son compatibles con las consultas en SQL que se emiten a través de la página Análisis de registros:

  • Comandos DDL y DML
  • Funciones definidas por el usuario de JavaScript
  • Funciones de BigQuery ML
  • Variables de SQL

Las siguientes opciones solo se admiten cuando consultas un conjunto de datos vinculado con las páginas de BigQuery Studio y Looker Studio, o con la herramienta de línea de comandos de bq:

  • Funciones definidas por el usuario de JavaScript
  • Funciones de BigQuery ML
  • Variables de SQL

Prácticas recomendadas

Para establecer el período de tu búsqueda, te recomendamos que uses el selector de período. Por ejemplo, para ver los datos de la semana anterior, selecciona Últimos 7 días en el selector de períodos. También puedes usar el selector de rango de tiempo para especificar una hora de inicio y una de finalización, especificar una hora para ver alrededor y cambiar las zonas horarias.

Si incluyes un campo timestamp en la cláusula WHERE, no se usará el parámetro de configuración del selector de período. 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 Funciones de tiempo y Funciones de marca de tiempo.

Antes de comenzar

En esta sección, se describen los pasos que debes completar antes de poder usar Log Analytics.

Configura buckets de registros

Asegúrate de que tus buckets de registros se hayan actualizado para usar el Análisis de registros:

  1. En la consola de Google Cloud , ve a la página Explorador de registros:

    Ir al Almacenamiento de registros

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

  2. Para cada bucket de registros que tenga una vista de registros en la que desees realizar consultas, asegúrate de que la columna Análisis de registros disponibles muestre Abrir. Si se muestra Actualizar, haz clic en Actualizar y completa el diálogo.

Configura roles y permisos de IAM

En esta sección, se describen los roles o permisos de IAM que se requieren para usar Log Analytics:

  • Para obtener los permisos que necesitas para usar Log Analytics y consultar vistas de registros, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

    Puedes restringir un principal a una vista de registros específica agregando una condición de IAM al otorgamiento del rol de Acceso a la vista de registros realizado a nivel del proyecto o agregando una vinculación de IAM al archivo de política de la vista de registros. Para obtener más información, consulta Controla el acceso a una vista de registros.

    Estos son los mismos permisos que necesitas para ver las entradas de registro en la página del Explorador de registros. Para obtener información sobre los roles adicionales que necesitas para consultar vistas en buckets definidos por el usuario o para consultar la vista _AllLogs del bucket de registros _Default, consulta Roles de Cloud Logging.

  • Para obtener los permisos que necesitas para consultar vistas de Analytics, pídele a tu administrador que te otorgue el rol de IAM de Usuario de Observability Analytics (roles/observability.analyticsUser) en tu proyecto.

Cómo usar las búsquedas en esta página

  1. En la consola de Google Cloud , ve a la página Análisis de registros:

    Ir a Análisis de registros

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

  2. En el panel Consulta, haz clic en  SQL y, luego, copia y pega una consulta en el panel de consulta en SQL.

    Antes de copiar una consulta, en la cláusula FROM, reemplaza los siguientes campos

    • PROJECT_ID: Es el identificador del proyecto.
    • LOCATION: Es la ubicación de la vista de registros o la vista de estadísticas.
    • BUCKET_ID: Es el nombre o el ID del bucket de registros.
    • LOG_VIEW_ID: Es el identificador de la vista de registros, que se limita a 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 para una vista de registro:

    FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
    

    Los ejemplos de registros en esta página consultan una vista de registro. Para consultar una vista de Analytics, usa el siguiente formato de ruta de acceso: `analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`. En la expresión anterior, PROJECT_ID es el ID de tu proyecto, y LOCATION y ANALYTICS_VIEW_ID son la ubicación y el nombre de tu vista de Analytics.

Para usar las consultas que se muestran en este documento en la página de BigQuery Studio o la herramienta de línea de comandos de bq, edita la cláusula FROM y, luego, ingresa la ruta de acceso al conjunto de datos vinculado. Por ejemplo, para consultar la vista _AllLogs en el conjunto de datos vinculado llamado mydataset que se encuentra en el proyecto myproject, la ruta de acceso es myproject.mydataset._AllLogs.

Casos de uso habituales

En esta sección, se enumeran varios casos de uso comunes que pueden ayudarte a crear tus consultas personalizadas.

Cómo mostrar las entradas de registro en el bucket de registros 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

Extrae el valor del campo por expresión regular

Para extraer un valor de una cadena con 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.

Para las coincidencias de subcadenas, como la consulta anterior, el uso de la función CONTAINS_SUBSTR genera una consulta más eficiente.

Filtra entradas de registro

Para aplicar un filtro a tu consulta, agrega una cláusula WHERE. La sintaxis que usas en esta cláusula depende del tipo de datos del campo. En esta sección, se proporcionan varios ejemplos para diferentes tipos de datos.

Cómo filtrar entradas de registro por tipo de carga útil

Las entradas de registro pueden tener uno de los 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 tipo 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 búsqueda, los campos json_payload y proto_payload se renderizan en JSON, por lo que puedes navegar por ellos.

Cómo filtrar los 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 período. Sin embargo, también puedes especificar 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 Funciones de tiempo y Funciones de marca de tiempo.

Filtrar por recurso

Para filtrar los datos de registro por recurso, agrega 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 tus datos de registro por gravedad, agrega 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 tus entradas de registro por el campo 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 es 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 tus datos de registro por nombre de registro, agrega 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 de acceso al recurso:

    -- Matches log entries that have the following log id.
    WHERE log_id = "cloudaudit.googleapis.com/data_access"
    

Cómo 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 dentro 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, ya que se almacenan en una entrada de registro. A continuación, se muestra un ejemplo del campo de recursos:

{
   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 tienen 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 tienen 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

Cómo filtrar por un campo dentro 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 con 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 prueba si el valor del campo de estado es NULL. La segunda cláusula prueba si existe el campo de estado. Supongamos que una vista de registro contiene dos entradas de registro. Para una entrada de registro, el campo json_payload tiene el siguiente formato:

{
    status: {
        measureTime: "1661517845"
    }
}

Para 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 de registro.

Agrupa y agrega entradas de registro

En esta sección, se basa en los ejemplos anteriores y se ilustra cómo puedes agrupar y agregar entradas de registro. Si no especificas una agrupación, pero sí una agregación, se imprimirá un resultado porque SQL trata todas las filas que satisfacen la cláusula WHERE como un grupo.

Todas las expresiones SELECT deben incluirse en los campos de grupo o agregarse.

Agrupa las 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 en 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.

Agrupa las entradas de registro por recurso

La siguiente consulta muestra cómo agrupar las entradas de registro por el tipo de recurso y, luego, contar la cantidad de entradas de registro en 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

Agrupa las entradas de registro por gravedad

La siguiente consulta muestra cómo agrupar las entradas de registro por gravedad y, luego, contar la cantidad de entradas de registro en 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

Agrupa las entradas de registro por su log_id

La siguiente consulta muestra cómo agrupar las entradas de registro por ID de registro y, luego, contar la cantidad de entradas de registro en 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 promedio de las solicitudes HTTP por URL

La siguiente consulta ilustra cómo agrupar las entradas de registro por la URL y la ubicación de la solicitud HTTP, y, luego, contar la cantidad de entradas de registro en 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 el promedio de bytes enviados para una prueba de subred

La siguiente consulta muestra cómo agrupar las entradas de registro según la ubicación especificada en las etiquetas de recursos y, luego, calcular la cantidad de entradas de registro en 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 Funciones de JSON y Funciones de conversión.

Cuenta las entradas de registro con un campo que coincide con un patrón

Para devolver la substring 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 ejemplos adicionales, consulta la documentación de REGEXP_EXTRACT.

En esta sección, se describen dos enfoques que puedes usar para buscar en varias columnas de la vista que consultas:

  • Búsquedas basadas en tokens: Especificas la ubicación de la búsqueda, una consulta de búsqueda y, luego, usas la función SEARCH. Dado que la función SEARCH tiene reglas específicas sobre cómo se buscan los datos, te recomendamos que leas la documentación de SEARCH.

  • Búsquedas basadas en subcadenas: Proporcionas la ubicación de la búsqueda, un literal de cadena y, luego, usas la función CONTAINS_SUBSTR. El sistema realiza una prueba que no distingue mayúsculas de minúsculas para determinar si el literal de cadena existe en una expresión. La función CONTAINS_SUBSTR devuelve TRUE cuando existe el literal de cadena y FALSE en caso contrario. El valor de búsqueda debe ser un literal STRING, pero no el literal NULL.

La siguiente consulta conserva solo 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

Cuando se omiten las comillas inversas en la cadena de consulta, esta se divide 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, podrías reemplazar el filtro en el 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 en la vista de registro, mientras que la instrucción original solo busca en el campo log_id de las entradas de registro.

Para realizar 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", "feliz" y "días":

  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 llamadas 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.

Por ejemplo, la siguiente consulta recupera todas las entradas del registro de auditoría de acceso a los datos con una dirección IP específica cuyos registros de fecha y hora se encuentran en un período específico. Por último, la consulta ordena los resultados y, luego, 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

Consulta varias vistas

Las instrucciones de consulta analizan una o más tablas o expresiones y muestran las filas de resultados calculados. Por ejemplo, puedes usar instrucciones de consulta para combinar los resultados de las instrucciones SELECT en diferentes tablas o conjuntos de datos de diversas maneras y, luego, seleccionar las columnas de los datos combinados.

Cuando consultas varias vistas, estas deben residir 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 encuentran en la multirregión us. Sin embargo, si la ubicación de una vista es global, esa vista puede residir en cualquier ubicación física. Por lo tanto, es posible que fallen las uniones entre dos vistas que tienen la ubicación de global.

Cómo unir dos vistas de registro por el ID de seguimiento

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

Consulta dos vistas de registros con una instrucción de unión

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

Cómo quitar entradas de registro duplicadas

El Análisis de registros no quita las entradas de registro duplicadas antes de que se ejecute una consulta. Este comportamiento es diferente al que se produce cuando consultas entradas de registro con el Explorador de registros, que quita las entradas duplicadas comparando los nombres de los registros, las marcas de tiempo y los campos de ID de inserción.

Puedes usar la validación a nivel de la fila para quitar las entradas de registro duplicadas.

Para obtener más información, consulta Solución de problemas: Hay entradas de registro duplicadas en mis resultados de Log Analytics.

¿Qué sigue?

Para obtener información sobre cómo enrutar y almacenar entradas de registro, consulta los siguientes documentos:

Para ver la documentación de referencia de SQL, consulta los siguientes documentos: