Especificación del lenguaje de consulta de registro
Utilice componentes de sintaxis de consulta con búsquedas personalizadas del modo avanzado en la página Buscar de Registro.
Consulte también Consultas de búsqueda avanzada y Búsquedas guardadas para obtener más información.
Componentes de la consulta
El procesamiento del lenguaje de consulta de registro se basa en un modelo de flujo de datos. Cada consulta puede hacer referencia a uno o más logs y produce un juego de datos de tabla como resultado. El lenguaje de consulta proporciona varios operadores para buscar, filtrar y agregar logs estructurados y no estructurados.
Una consulta de registro incluye los siguientes componentes:
Flujos de log
search <log_stream> (,? <log_stream>)*
El lenguaje de consulta recupera entradas de log del ámbito que proporcione y crea un flujo de log que puede filtrar, agregar y visualizar.
Flujo de log:
<log_stream> := "<compartment_ocid> ( /<log_goup_ocid> ( /<log_object_ocid> )? )?"
Ejemplos:
search "compartmentOcid/logGroupNameOrOcid/logNameOrOcid"
search "compartmentOcid/logGroupNameOrOcid"
search "compartmentOcid"
search "compartmentOcid/logGroupNameOrOcid/logNameOrOcid", "compartmentOcid_2/logGroupNameOrOcid_2", "compartmentOcid_3"
Campos
search "..."
| select event as EventName
Los campos tienen la notación JSON; por lo tanto, los caracteres especiales deben estar entre comillas.
Fields: <field_name> := <identifier> (DOT <identifier>)*
Para el identificador:
<identifier> := a-zA-Z_[a-zA-Z_0-9]* | ('"' (~'"' | '""')* '"')
Ejemplos:
- type
- data.message
- data.request.URL
- "tipo"
- "datos"."mensaje"
- "datos.mensaje" (no es lo mismo que "datos"."mensaje")
- data."$event"
- data."nombre"
- data."ejemplo de comillas dobles ("") de escape "
Tipos de datos
El lenguaje de consulta soporta los siguientes tipos de datos clave. Estos son 8 bytes (largos y dobles).
Para obtener más información sobre la representación de los valores de los tipos correspondientes, consulte Caracteres literales.
- Cadenas
- Números (enteros, de punto flotante)
- Matrices
- Booleanos
- Registros de hora
- Intervalos
Expresiones de flujo
Todas las expresiones que producen un flujo son expresiones de flujo. Las expresiones de flujo se pueden formar con los siguientes operadores:
Expresiones de pleca
Una pleca (|) aplica un operador del lado izquierdo a una expresión de flujo situada del lado derecho. La expresión de pleca es una expresión de flujo.
El operador en el lado derecho de una pleca debe consumir solo un flujo (por ejemplo, operaciones de agregación, filtros).
search "application"
| where level = 'ERROR'
>>
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4}
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5}
Operadores
Operadores tabulares
Un operador tabular crea o modifica un flujo de log filtrando o cambiando las entradas del log. Consulte también la notación de sintaxis de BNF. A continuación se indican los operadores tabulares:
search
search "compartmentOCID/loggroup1/logname1" "compartmentOCID/loggroup2/logname2" "compartmentOCID/loggroup3/logname3"
where
Filtra el flujo de log actual mediante una expresión booleana.
search "application"
| where level = 'ERROR'
>>
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4}
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5}
where
es opcional:
search "application"
| level = 'ERROR'
A continuación se incluyen algunas comparaciones de ejemplo con números y comparaciones de campos booleanos:
| data.statusCode = 200
| data.isPar
Puede realizar una búsqueda de texto completo especificando un filtro en todo el contenido del log. Una búsqueda de logContent
devuelve cualquier línea de log en la que un valor coincida con su cadena. Esta funcionalidad soporta comodines. Por ejemplo:
search "application"
| where logContent = 'ERROR' -- returns log lines with a value matching "ERROR"
search "application"
| where logContent = '*ERROR*' -- returns log lines with a value containing "ERROR"
top
<top> := top [0-9]+ by <expr>
Ejemplos:
top 3 by datetime
top 3 by *
top 3 by (a + b)
Un número de filas debe ser un entero positivo constante y se debe proporcionar una expresión de ordenación.
search "application"
| top 3 by impact
>>
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4}
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
sort
Ordena el flujo de log actual por las columnas especificadas, en orden ascendente (por defecto) o descendente. El operador utiliza las palabras clave "DESC" y "ASC" para especificar el tipo de orden. La ordenación por defecto es asc
.
<sort> := sort by <sort_expr> (, <sort_expr>)*
<sort_expr> := <expr> (asc | desc)?
Ejemplo:
search "application"
| sort by impact desc
>>
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4}
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
{"timestamp": "2019-01-03T00:05:33", "level":"WARNING", "host":"host2", "message":"reached 70% file size limit... ", "impact":1}
{"timestamp": "2019-01-03T00:04:05", "level":"INFO", "host":" host1", "message":"host list updated..."}
{"timestamp": "2019-01-03T00:06:59", "level":"INFO", "host":" host2", "message":"fs clean up started..."}
Se puede utilizar más de una columna para especificar el orden:
search "application"
| sort by host, impact desc
>>
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4}
{"timestamp": "2019-01-03T00:05:33", "level":"WARNING", "host":"host2", "message":"reached 70% file size limit... ", "impact":1}
{"timestamp": "2019-01-03T00:06:59", "level":"INFO", "host":" host2", "message":"fs clean up started..."}
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
{"timestamp": "2019-01-03T00:04:05", "level":"INFO", "host":" host1", "message":"host list updated..."}
dedup
Procesa el flujo de log actual filtrando todos los duplicados por columnas especificadas. Si se especifica más de una columna, todas las columnas deben estar delimitadas por comas.
<dedup> := dedup <expr> (, <expr>)
Ejemplos:
search "application"
| dedup host
>>
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
{"timestamp": "2019-01-03T00:05:33", "level":"WARNING", "host":"host2", "message":"reached 70% file size limit... ", "impact":1}
search "application"
| dedup host, impact
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2}
{"timestamp": "2019-01-03T00:05:33", "level":"WARNING", "host":"host2", "message":"reached 70% file size limit... ", "impact":1}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4}
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5}
select
Aplica una serie de expresiones escalares con nombre al flujo de log actual. Consulte summarize
para obtener una versión de agregación de select
.
<select> := select <select_expr> (, <select_expr>)*
<select_expr> := ( * | <expr> (as <identifier>)? )
Ejemplo:
search "application"
| select level, host, impact+10 as impact, timestamp
>>
{"level":"ERROR", "host":"host1", "impact": 12, "timestamp": "2019-01-03T00:04:01"}
{"level":"INFO", "host":" host1", "timestamp": "2019-01-03T00:04:05"}
{"level":"WARNING", "host":"host2", "impact": 11, "timestamp": "2019-01-03T00:05:33"}
{"level":"ERROR", "host":"host2", "impact": 14, "timestamp": "2019-01-03T00:06:39"}
{"level":"ERROR", "host":"host2", "impact": 15, "timestamp": "2019-01-03T00:06:59"}
{"level":"INFO", "host":" host2", "timestamp": "2019-01-03T00:06:59"}
extend
Amplía el flujo de log actual con una columna calculada.
<extend> := extend <expr> (as <identifier>)?
Ejemplo:
search "application"
| extend concat(host, 'us.oracle.com') as fqn
>>
{"timestamp": "2019-01-03T00:04:01", "level":"ERROR", "host":"host1", "message":"download failed...", "impact":2, "fqn": "host1.us.oracle.com"}
{"timestamp": "2019-01-03T00:04:05", "level":"INFO", "host":" host1", "message":"host list updated...", "fqn": "host1.us.oracle.com"}
{"timestamp": "2019-01-03T00:05:33", "level":"WARNING", "host":"host2", "message":"reached 70% file size limit... ", "impact":1, "fqn": "host2.us.oracle.com"}
{"timestamp": "2019-01-03T00:06:39", "level":"ERROR", "host":"host2", "message":"reached 90% file size limit... ", "impact":4, "fqn": "host2.us.oracle.com"}
{"timestamp": "2019-01-03T00:06:59", "level":"ERROR", "host":"host2", "message":"reached 95% file size limit... ", "impact":5, "fqn": "host2.us.oracle.com"}
{"timestamp": "2019-01-03T00:06:59", "level":"INFO", "host":" host2", "message":"fs clean up started...", "fqn": "host2.us.oracle.com"}
Operadores escalares
Los operadores escalares se aplican a valores individuales.
Las operaciones aritméticas son las siguientes:
+
-
*
/
Los operadores booleanos son los siguientes:
and
or
Operador unitario:
-(<expr>)
Los operadores de comparación son los siguientes (solo expresiones numéricas):
<expr> > <expr>
<expr> >= <expr>
<expr> <= <expr>
<expr> < <expr>
<expr> = <expr>
<expr> != <expr>
Comparación de cadenas:
<expr> = <expr>
Funciones:
not (<expr>)
contains_ci/contains_cs (<expr>, <expr>, (true | false))
El último parámetro es sensible a mayúsculas/minúsculas.
rounddown (<expr>, '[0-9]+(d | h | m | s)')
El último parámetro es el intervalo de tiempo en días, horas, minutos o segundos.
time_format(datetime, <format>)
Formatear una hora a una cadena
concat (<axpr>, <expr>)
upper (<expr>)
lower (<expr>)
substr (<expr>, [0-9]+ (, [0-9]+)?)
El segundo argumento es el índice de inicio, mientras que el tercer argumento es opcional, es decir, el número de caracteres que debe tener.
isnull (<expr>)
isnotnull (<expr>)
Operador de agregación
count
Calcula un número de filas en el flujo de log actual:
search "application"
| count
>>
{"count": 6}
summarize
Agrupa el flujo de log actual por las columnas especificadas y el intervalo de tiempo, y agrega mediante expresiones con nombre. Si no se han especificado columnas de agrupación, summarize
se agrega en todo el flujo.
search "application"
| summarize count(impact) as impact by level, rounddown(datetime, '1m') as timestamp
Columnas especiales
logContent
logContent
es una columna especial que representa el texto de todo el mensaje original. Por ejemplo:
search "application"
| where logContent = '*ERROR*' -- returns log lines with a value containing "ERROR"
Comentarios
Tanto los comentarios de una sola línea como de varias líneas están soportados; por ejemplo:
search "application"
| count -- this is a single line comment
/* this is a
multi-line
comment
*/
Identificadores
Los identificadores son los nombres de todas las entidades disponibles en la consulta. Un identificador puede hacer referencia a un campo del flujo de log actual o a un parámetro definido al principio de la consulta. Los identificadores tienen el siguiente formato:
name: \$?[a-zA-Z_][a-zA-Z_0-9]*
Por ejemplo: level
, app_severity
, $level
.
El formato entre comillas permite símbolos especiales en los nombres (excepto las comillas dobles):
name: "[^"]+"
Por ejemplo: "opc-request-id"
, "-level"
.
Todas las referencias de parámetro comienzan con un signo de dólar ($
), por ejemplo: $level
.
Caracteres literales
Tipo | Ejemplos |
---|---|
cadena | 'hello', 'world\'!' |
patrón de comodín | "acc-*" |
entero | -1, 0, +200 |
flotante | 1.2, 0.0001, 1.2e10 |
matriz | [1, 2, 3, 4], [] |
intervalo | 3h, 2m |
anulable | null |
Funciones
Las funciones escalares son las siguientes:
isnull(expr1)
concat(expr1, ...)
Las funciones de agregación son las siguientes:
sum(expr1)
avg(expr1)
min(expr1)
max(expr1)
count()
: cuenta un número de filas.count(expr)
: cuenta una serie de valoresexpr
no nulos.first(expr1)
last(expr1)
Parámetros del sistema
Se reservan todos los parámetros con el prefex
"query.". Los parámetros soportados son los siguientes:
Nombre | Tipo | Ejemplo | Descripción |
---|---|---|---|
query.from |
Cadena con fecha y hora en formato ISO 8601. | '2007-04-05T14:30' | Especifica la hora de inicio de la ventana de consulta. |
query.to |
Cadena con fecha y hora en ISO 8601. | '2007-04-05T14:30+05:00' | Especifica la hora de finalización de la ventana de consulta. |