Base de datos Core: Sintaxis de la consulta

Document created by RSA Information Design and Development on Feb 9, 2017
Version 1Show Document
  • View in full screen mode
  

En este tema se describe la sintaxis de las consultas en la base de datos. Hay tres mecanismos principales para realizar consultas en la base de datos, las llamadas query, values y msearch en la carpeta /sdk de cada servicio Core.

La llamada query devuelve elementos de metadatos de la base de datos de metadatos, posiblemente mediante el uso del índice para una recuperación rápida.

La llamada values devuelve grupos de valores de metadatos únicos ordenados según algunos criterios. Está optimizada para devolver un subconjunto de los valores únicos según una función de agregación tal como conteo.

La llamada msearch toma como su entrada los términos de búsqueda de texto y devuelve las sesiones que coinciden con los términos de búsqueda.  Puede buscar dentro de los índices, los metadatos, los paquetes crudos o los registros crudos.

Sintaxis de la consulta

El mensaje de consulta tiene la siguiente sintaxis:

 query-params = size-param, space, query-param, {space, start-meta-param}, {space, end-meta-param};
size-param = "size=", ? integer between 0 and 1,677,721 ? ;
query-param = "query=", query-string ;
start-meta-param = "id1=", metaid ;
end-meta-param = "id2=", metaid ;
metaid = ? any meta ID from the meta database ? ;

Los parámetros id1, id2 y size forman un mecanismo de paginación para el retorno de una gran cantidad de resultados de la base de datos. Su uso beneficia principalmente a los desarrolladores que escriben aplicaciones directamente contra la base de datos de Security Analytics Core. Normalmente, los resultados se devuelven en el orden de los datos más antiguos a los más recientes (los ID de metadatos más altos son siempre más recientes). Para devolver los resultados del más reciente al más antiguo, invierta los ID de tal manera que id1 sea mayor que id2. Esto tiene una leve pérdida de rendimiento, ya que la cláusula where debe estar completamente evaluada antes de que el procesamiento en orden inverso pueda comenzar.

Cuando el tamaño se deja fuera o se establece en cero, el sistema retrocede todos los resultados sin paginación. En el caso de la interfaz RESTful, esto da lugar a que se devuelva la respuesta completa con codificación fragmentada. El protocolo nativo devuelve los resultados a través de varios mensajes.

El parámetro query es una cadena de comandos de consulta con su propia sintaxis específica de Security Analytics:

 query-string = select-clause {, where-clause} {, group-by-clause {, order-by-clause } } ;
select-clause = "select ", ( "*" | meta-or-aggregate {, meta-or-aggregate} ) ;
where-clause = " where ", { where-criteria } ;
meta-or-aggregate = meta_key | aggregate_func, "(", meta_key, ")" ;
aggregate_func = "sum" | "count" | "min" | "max" | "avg" | "distinct" | "first" | "last" | "len" | "countdistinct" ;
group-by-clause = " group by ", meta-key-list
meta-key-list = meta_key {, meta-key-list}
order-by-clause = " order by ", order-by-column
order-by-column = meta-or-aggregate { "asc" | "desc" } {, order-by-column}

La cláusula select permite especificar * para devolver todos los metadatos en todas las sesiones que coincidan con la cláusula where, o un conjunto de nombres de campos de metadatos y funciones de agregado para seleccionar un subconjunto de los metadatos con cada sesión.

Las funciones de agregación tienen el siguiente efecto en el conjunto de resultados de las consultas.

                                                   
FunciónResultado
sumAgrega todos los valores de metadatos juntos; solo funciona con números
countEl total de campos de metadatos que se han devuelto
minEl valor mínimo que se ve
máx.El valor máximo que se ve
avgEl valor promedio para el número
distinctDevuelve una lista de todos los valores únicos que se ve
countdistinctDevuelve la cantidad de valores únicos obtenidos.  Countdistinct es equivalente a la cantidad de metadatos que habría devuelto la función distinct.
firstDevuelve el primer valor que se ve
lastDevuelve el último valor que se ve
lenConvierte todos los valores de campo a una longitud UInt32 en lugar de devolver el valor real. Esta longitud es el número de bytes para almacenar el valor real, no la longitud de la estructura almacenada en la base de datos de metadatos. Por ejemplo, la palabra “NetWitness” devuelve una longitud de 10. Todos los campos IPv4, como ip.src, devuelven 4 bytes.

Cláusulas where

La cláusula where es una especificación de filtro que permite seleccionar sesiones de la recopilación mediante el índice.

Sintaxis:

 where-criteria = criteria-or-group, { space, logical-op, space, criteria-or-group } ;
criteria-or-group = criteria | group ;
criteria = meta-key, ( unary-op | binary-op meta-value-ranges ) ;
group = ["~"], "(" where-clause ")" ;
logical-op = "&&" | "||" ;
unary-op = "exists" | "!exists" ;
binary-op = "=" | "!=" | "<" | ">" | ">=" | "<=" | "begins" | "contains" | "ends" | "regex" ;
meta-value-ranges = meta-value-range, { ",", meta-value-range } ;
meta-value-range = (meta-value | "l" ), [ "-", ( meta-value | "u" ) ] ;
meta-value = number | ( '"' text '"' ) | ip-address | mac-address | ( '"' date-time '"' ) ;

Cuando se especifican criterios de regla, se espera que la parte valor de metadatos de la cláusula coincida con el tipo de metadatos especificados por la clave de metadatos. Por ejemplo, si la clave es ip.src, el valor de metadatos debe ser una dirección IPv4.

Operadores de consulta

En la tabla siguiente se describe la función de cada operador.

                                                               
OperadorFunción
=Coincide con sesiones que contienen exactamente el mismo valor de metadatos. Si se especifica un rango de valores, cualquiera de los valores se considera una coincidencia.
!=Coincide con todas las sesiones que no coincidirían con la misma cláusula como si estuvieran escritas con el operador =.
<En el caso de valores numéricos, coincide con sesiones que contienen metadatos con el valor numérico menor que el lado derecho. Si el lado derecho es un rango, se considera el primer valor del rango. Si se especifican varios rangos, el comportamiento es indefinido. Para metadatos de texto, se realiza una comparación lexicográfica.
<=El mismo comportamiento que <, pero las sesiones que contienen metadatos que igualan exactamente el valor también se consideran coincidencias.
>Similar al operador <, pero coincide con sesiones en las cuales el valor numérico es mayor que el lado derecho. Si el lado derecho es un rango, se considera el último valor del rango para la comparación.
>=El mismo comportamiento que >, pero las sesiones que contienen metadatos que igualan exactamente el valor también se consideran coincidencias.
beginsCoincide con sesiones que contienen valor de metadatos de texto que comienzan con los mismos caracteres que el lado derecho.
endsCoincide con sesiones que contienen metadatos de texto que terminan con los mismos caracteres que el lado derecho.
containsCoincide con sesiones que contienen metadatos de texto que incluyen la subcadena dada en el lado derecho.
regexCoincide con sesiones que contienen metadatos de texto que coinciden con la expresión regular dada en el lado derecho. El análisis de la expresión regular se maneja mediante boost::regex.
existsCoincide con sesiones que contienen cualquier valor de metadatos con la clave de metadatos dada.
!existsCoincide con sesiones que no contienen valor de metadatos con la clave de metadatos dada.
lengthCoincide con sesiones que contienen valores de metadatos de texto de cierta longitud.  La expresión en el lado derecho debe ser un número no negativo.

Valores de texto

El sistema espera valores de texto entre comillas. Aunque las cadenas que no están entre comillas pueden funcionar, los valores expresados pueden interpretarse ambiguamente como números o fechas.

También es importante colocar entre comillas cualquier valor de texto que pueda contener - para que no se interprete como un rango.

Direcciones IP

Las direcciones IP se pueden expresar mediante representaciones de texto estándar para las direcciones IPv4 e IPv6. Además, la consulta puede usar la notación CIDR para expresar un rango de direcciones. Si se usa la notación CIDR, se expande al rango de valores equivalente.

Direcciones MAC

Una dirección MAC se puede especificar mediante una notación de dirección MAC estándar: aa:bb:cc:dd:ee:ff

Expresiones de fecha y hora

En Security Analytics Core, las fechas se representan mediante tiempo Unix, que es la cantidad de segundos desde el 1 de enero de 1970 UTC. En las consultas, se puede expresar el tiempo como esta cantidad de segundos, o puede usar la representación de cadena. La representación de cadena para la fecha y la hora es YYYY-mmm-DD HH:MM:SS. Una abreviatura de tres letras representa el mes. También puede expresar el mes como un número de dos dígitos, 01–12.

Se espera que todas las horas que se expresan en las consultas estén en UTC.

Valores de rango especiales

Generalmente, los rangos se expresan con la sintaxis "smallest" - "largest", pero hay algunos valores especiales de marcador de posición que puede usar en las expresiones de rango. Puede usar la letra l para representar el límite inferior de todos los valores de metadatos como el inicio del rango, y u para representar el límite superior. Los límites se determinan mirando el valor de metadatos menor o mayor que se encuentra en el índice de todos los valores de metadatos que ya ingresaron en el índice.

Nota: Si usa la etiqueta l o u, no debe estar entre comillas.

Por ejemplo, la expresión time = "2014-may-20 11:57:00" - u coincidiría con todas las horas desde el 20 de mayo de 2014 a las 11:57:00 h hasta la hora más reciente que se encuentra en la recopilación.

Observe que es fácil confundir una expresión de rango con una cadena de caracteres. Asegúrese de que los valores de texto que contienen - estén entre comillas y que los guiones dentro de las expresiones de rango no estén dentro de texto entre comillas.

Cláusula Group By (desde 10.5)

La API de consulta tiene la capacidad de generar grupos agregados a partir de los resultados de una llamada query. Esto se hace mediante una cláusula GROUP BY en la consulta.  Cuando se especifica GROUP BY, el conjunto de resultados para la consulta se subdivide en grupos.  Cada grupo de resultados se identifica de manera única con los valores de metadatos que se indican en la cláusula group by. 

Por ejemplo, considere la consulta select count(ip.dst). Esta consulta devuelve un conteo de todos los metadatos ip.dst en la base de datos. Sin embargo, si agrega una cláusula group by como esta: select count(ip.dst) group by ip.src, la consulta devuelve un conteo de los metadatos ip.dst que se encuentran para cada ip.src único.

A partir de Security Analytics versión 10.5, puede utilizar hasta seis campos de metadatos en una cláusula group by.

La cláusula group by tiene en parte la misma funcionalidad que la llamada values, pero ofrece una cantidad considerablemente mayor de grupos avanzados a expensas de tiempos de consulta más prolongados. La producción de los resultados de una consulta agrupada implica leer los metadatos de la base de datos de metadatos de todas las sesiones que coinciden con la cláusula WHERE, mientras que una llamada values puede producir sus agregados con tan solo leer el índice.

La cláusula select define el contenido de cada grupo que devuelve la consulta. Esta cláusula puede contener cualquiera las funciones de agregado o de los campos de metadatos seleccionados. Si se seleccionan múltiples agregados, el resultado de la función de agregado se define para cada grupo. Si se seleccionan campos no agregados, los campos de metadatos se devuelven en lotes para cada grupo.

El conjunto de resultados de una consulta group by se codifica con las siguientes reglas:

  1. Todos los metadatos asociados a un grupo se entregan con el mismo número de grupo.
  2. Los primeros metadatos que se devuelven al grupo identifican la clave del grupo. Por ejemplo, si la cláusula group by especifica group by ip.src, el primer metadatos de cada grupo será un ip.src.
  3. Los metadatos no agregados normales se devuelven después de la clave del grupo, pero todos tendrán el mismo número de grupo que los metadatos de clave del grupo.
  4. A continuación se devuelven los campos de metadatos de resultados agregados para cada grupo.
  5. Todos los campos dentro de un grupo se devuelven juntos. Los diversos resultados de grupos no se entrelazarán.

Si falta uno de los metadatos GROUP BY en una de las sesiones que coincidieron con la cláusula where, ese campo de metadatos se trata como NULO en lo que respecta a ese grupo. Cuando se devuelven los resultados para ese grupo, las partes con valor NULO de la clave del grupo se omitirán de los resultados del grupo, puesto que la base de datos no tiene el concepto de NULO.

La semántica de una consulta GROUP BY difiere de una base de datos como SQL en términos de los campos de metadatos que se devuelven. En las bases de datos SQL, debe seleccionar explícitamente las columnas Agrupar por en la cláusula select si desea que se devuelvan en el conjunto de resultados. La base de datos de Security Analytics Core devuelve siempre implícitamente las columnas de grupo en primer lugar.

Una consulta con una cláusula GROUP BY respeta el parámetro de tamaño del conjunto de resultados, si se proporciona uno. Sin embargo, debido a la naturaleza de la agrupación, impone una carga adicional en el llamador para paginar y reformar grupos en caso de que se solicite un conjunto de resultados de tamaño fijo. Por esta razón, no debe especificar un tamaño de resultados explícito cuando se hace una llamada group by. Cuando no se especifica un tamaño explícito, el conjunto de resultados completo se entrega como resultados parciales.

En la siguiente tabla se describen los parámetros de configuración que debe respetar la base de datos y que limitan el impacto en los I/O o en la memoria de una consulta group by.

                   
ParámetroFunción
/sdk/config/max.query.groupsEste es el límite de la cantidad de grupos que se pueden mantener en la memoria para calcular agregados. Este parámetro permite limitar el uso total de la memoria de la consulta.
/sdk/config/max.where.clause.sessionsEste es el límite de la cantidad de sesiones desde la cláusula where que se pueden procesar en una consulta. Este parámetro permite configurar un límite de la cantidad de sesiones que se deben leer desde las bases de datos de sesiones y metadatos para resolver una consulta.

Cláusula Order By (desde 10.5)

Se puede agregar una cláusula order by a una consulta que contiene una cláusula group by. Esta cláusula hace que el conjunto de resultados agrupados se devuelva de manera ordenada.

Una cláusula order by consta de un conjunto de elementos de clasificación en orden ascendente o descendente. El orden se puede aplicar a cualquiera de los campos de datos que se devolverá en el conjunto de resultados. Esto incluye los metadatos que especifica la cláusula select, los resultados de las funciones de agregado que especifica esta misma cláusula o los campos de metadatos de group by.

La cláusula order by puede ordenar muchas columnas. No hay un límite en la cantidad de columnas Ordenar por que se permiten en la consulta, pero existe un límite práctico que consiste en que cada una de las columnas Ordenar por debe hacer referencia a algo que devolvieron las cláusulas select o group by.  La clasificación de múltiples columnas se impone de manera lexicográfica, lo cual significa que si dos grupos tienen valores iguales para la primera columna, se clasifican por las segundas columnas. Si son iguales en la segunda columna, se clasifican por la tercera y así sucesivamente para la cantidad de columnas Ordenar por que se proporcionan.

La base de datos de Security Analytics Core es única en el sentido de que cada uno de los grupos de resultados que devuelve una consulta puede tener muchos valores para una selección.  Por ejemplo, es posible seleccionar todos los metadatos que coinciden con un tipo de metadatos y organizarlos en grupos, y es posible usar la función distinct() para devolver grupos de valores de metadatos distintos. Si una cláusula order by hace referencia a uno de los campos del grupo que tiene múltiples valores, el orden de clasificación se aplica de la siguiente manera:

  1. Dentro de cada grupo, los campos con múltiples valores coincidentes se ordenan por la cláusula de orden
  2. Todos los grupos se clasifican mediante la comparación de la primera aparición del campo ordenado que se encuentra dentro de cada grupo

La cláusula order by solo está disponible en consultas que tienen una cláusula group by, puesto que se requieren grupos para organizar los campos de metadatos en los registros distintos. Si desea clasificar una consulta arbitraria como si no se aplicara agrupación, use group by sessionid. Esto garantiza que los resultados se devuelven en grupos de sesiones o eventos distintos.

Las cláusulas group by se devuelven naturalmente en orden de clave de grupo ascendente, pero se puede usar una cláusula order by para devolver grupos en otro orden.

Si una columna order by no especifica asc o desc, el orden predeterminado es ascendente.

Ejemplos:

 select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst)
select countdistinct(ip.dst) GROUP BY ip.src ORDER BY countdistinct(ip.dst) desc
select countdistinct(ip.dst),sum(size) GROUP BY ip.src ORDER BY sum(size) desc, countdistinct(ip.dst)
select sum(size) GROUP BY ip.src, ip.dst ORDER BY ip.dst desc
select user.dst,time GROUP BY sessionid ORDER BY user.dst
select * GROUP BY sessionid ORDER BY time

Llamada Values

El índice proporciona una función values de bajo nivel para acceder a los valores de metadatos únicos que se almacenaron en el índice. Esta función permite a los desarrolladores realizar operaciones más avanzadas en grupos de valores de metadatos únicos.

Sintaxis de parámetros de la llamada values:

 values-params = field-name-param, space, where-param, space, size-param, {space, flags-param} {space, start-meta-param}, {space, end-meta-param}, {space, threshold-param}, {space, aggregate-func-param}, {space, aggregate-field-param}, {space, min-param}, {space, max-param} ;
field-name-param = "fieldName=", meta-key ;
where-param = "where=", where-clause ;
size-param = "size=", ? integer between 1 and 1,677,721 ? ;
start-meta-param = ? same as query message ?
end-meta-param = ? same as query message ?
flags-param = "flags=", {values-flag, {"," values-flag} } ;
values-flag = "sessions" | "size" | "packets" | "sort-total" | "sort-value" | "order-ascending" | "order-descending" ;
threshold-flag = "threshold=", ? non-negative integer ? ;
aggregate-func-param = "aggregateFunction=", { aggregate-func-flag } ;
aggregate-func-flag = "count" | "sum" ;
aggregate-field-param = "aggregateFieldName=", meta-key ;
min-param = "min=", meta-value ;
max-param = "max=", meta-value ;

La llamada values proporciona la función de devolver un conjunto de valores de metadatos únicos para una clave de metadatos determinada. Para cada valor único, la llamada values puede proporcionar un conteo total de agregación. El parámetro de indicadores controla la función que se utiliza para generar el total.

Parámetros

En la siguiente tabla se describe la función de cada parámetro.

                                               
ParámetroFunción
fieldNameEste es el nombre de la clave de metadatos para la cual recupera valores únicos. Por ejemplo, si fieldName es ip.src, esta función devuelve los valores de IP de origen únicos de la recopilación.
dondeEsta es una cláusula where que filtra el conjunto de sesiones para el cual se devuelven los valores únicos. Por ejemplo, si fieldName es ip.src, y la cláusula where es ip.src = 192.168.0.0/16, solo se devuelven los valores en el rango de 192.168.0.0 a 192.168.255.255. Para obtener información sobre la sintaxis de la cláusula where, consulte Cláusulas where.
tamañoEl tamaño del conjunto de valores únicos para devolver. Esta función está optimizada para devolver un pequeño subconjunto de los posibles valores únicos en la base de datos.
id1, id2Estos parámetros opcionales limitan el alcance de la búsqueda de valores únicos a una región específica de la base de metadatos y el índice. Establecer los parámetros id1 e id2 en un rango limitado de la base de datos de metadatos es muy importante para realizar búsquedas rápidamente en recopilaciones grandes.
flagsLos indicadores controlan cómo se clasifican y totalizan los valores. Los indicadores se describen en la siguiente sección Indicadores de valores.
thresholdLa configuración del parámetro de umbral permite que la llamada values realice un acceso directo para la recopilación del total asociado a cada valor una vez que se alcanza el umbral. El usuario que llama, cuando proporciona un umbral, puede reducir la cantidad de elementos de índice y metadatos que se debe recuperar de la base de datos. Si el parámetro de umbral se omite o se establece en 0, no se utiliza esta optimización.
aggregateFunctionParámetro opcional que se usa para cambiar el comportamiento predeterminado de conteo de sesiones, paquetes o tamaños a conteo o resumen del campo numérico definido por aggregateFieldName. Se deben especificar ambos parámetros cuando se define alguno. Transmita sum o count para especificar el comportamiento que se ejecutará.
aggregateFieldNameEl campo de metadatos en el cual realizar aggregateFunction. Se deben especificar ambos parámetros, aggregateFunction y aggregateFieldName, cuando el indicador de agregación está configurado. Realizar una llamada values utilizando una de las funciones de agregación puede ser significativamente más lento que una llamada values que recopila totales de sesiones, paquetes o tamaños. El motivo de esto es que cada sesión que coincide con la cláusula where debe recuperarse de la base de datos de metadatos. Este escaneo hace que una gran parte de la consulta esté en el límite de I/O de los volúmenes de base de datos de metadatos. El tiempo que tarda la ejecución de una llamada de valores agregados es linealmente proporcional a la cantidad de sesiones que coinciden con la cláusula where.
min, maxEl valor mínimo y máximo que debería devolver la llamada. Estos parámetros se usan para iterar (o paginar) en una cantidad de valores extremadamente grande, generalmente más valores que aquellos que podrían devolver una sola llamada. Se usan principalmente en conjunto con las marcas sort-value,sort-ascending, de tal modo que el valor más alto devuelto se use en una llamada posterior como el valor del parámetro min. Los valores son exclusivos. Si se especificó min=“rsa” y rsa es un valor válido, no se devolverá rsa, sino que se devolverá el siguiente valor más alto.

Indicadores de valores

El parámetro de indicadores controla la forma en que funciona la llamada values. Hay tres grupos de indicadores que corresponden a los diferentes modos de funcionamiento, como se muestra en la siguiente tabla.

                       
MarcaDescripción
sessions, size, packetsLa llamada values permite especificar uno de estos indicadores para determinar cómo se calcula el total de cada valor. Si el indicador es sessions, la llamada values devuelve un conteo de las sesiones que contienen cada valor. Si el indicador es size, la llamada values totaliza el tamaño de todas las sesiones que contienen cada valor único e informa el tamaño total de cada valor único. Si el indicador es packets, la llamada values totaliza la cantidad de paquetes de todas las sesiones que contienen cada valor único e informa el total de cada valor único.
sort-total, sort-valueEstos indicadores controlan cómo se clasifican los resultados. Si el indicador es sort-total, el conjunto de resultados se clasifica por orden de los totales recopilados. Si el indicador es sort-value, los resultados se devuelven por orden según el orden de clasificación de los valores.
order-ascending, order-descendingEstos indicadores controlan el orden de clasificación del conjunto de resultados. Por ejemplo, si se clasifica por total en orden descendente, en primer lugar se devuelven los valores con el total mayor.

Ejemplo de llamada values

La vista Navegación en Security Analytics usa ampliamente la llamada values. La vista predeterminada genera llamadas que se ven como esto:

 /sdk/values id1=198564099173 id2=1542925695937 size=20 flags=sessions,sort-total,order-descending threshold=100000 fieldName=ip.src where="time=\"2014-May-20 13:12:00\"-\"2014-May-21 13:11:59\"" 

En este ejemplo, la vista Navegación solicita valores únicos para ip.src. Solicita valores únicos de ip.src en el rango de tiempo dado. Solicita el conteo de sesiones que coinciden con cada ip.src, y los resultados son los 20 valores ip.src principales cuando se clasifica por el conteo total de sesiones en orden descendente. Además, la vista Navegación tiene un rango de ID de metadatos para proporcionar una pista de optimización al motor de consulta.

Llamada Msearch

El índice proporciona una función msearch de bajo nivel para realizar búsquedas de texto de todos los tipos de metadatos. Este tipo de búsqueda no requiere que los usuarios definan sus consultas en términos de tipos de metadatos conocidos. En su lugar, busca coincidencias en todas las partes de la base de datos. Msearch se usa en la búsqueda de texto de la vista Eventos. Consulte el tema Filtrar y buscar resultados en la vista Eventos de la Guía de Investigation y Malware Analysis para obtener detalles acerca de las formas de búsqueda aceptadas y ejemplos.

msearchParámetros:

 msearch-params = search-param, {space, where-param}, {space, limit-param}, {space, flags-param};
search-param = "search=", ? free-form search string ? ;
where-param = "where=", ? optional where clause ? ;
limit-param = "limit=", ? optional session scan limit ? ;
flags = "flags=", {msearch-flag, {"," msearch-flag} };
msearch-flag = "sp" | "sm" | "si" | "ci" | "regex" ;

El algoritmo msearch funciona de la siguiente manera:

  1. Se identifica un conjunto de sesiones del índice mediante la búsqueda de la intersección de tres conjuntos:
    • (Conjunto 1) Todas las sesiones de la base de datos
    • (Conjunto 2) Sesiones que coinciden con el parámetro de la cláusula where
    • (Conjunto 3) Si se especifica la marca si, sesiones con valores indexados que coinciden con el parámetro de cadena de búsqueda.
  2. Si la búsqueda especifica el parámetro sm, se leen todos los metadatos del conjunto de sesiones identificado en el paso 1 y se escanean para ver si coinciden con el parámetro de cadena de búsqueda. Los metadatos se leerán desde el servicio más cercano al punto donde se ejecutó la búsqueda. Por ejemplo, si la búsqueda se realiza en un Broker, los metadatos se pueden leer desde el Concentrator más cercano al Broker, pero si se realiza en un Archiver, se leerán desde el propio Archiver.
  3. Si la búsqueda especifica el parámetro sp, se leen todas las entradas de paquetes o registros crudos del conjunto de sesiones identificado en el paso 1 y se escanean para ver si coinciden con el parámetro de cadena de búsqueda. Los paquetes se leerán desde el servicio más cercano al punto donde se ejecutó la búsqueda. Por ejemplo, si la búsqueda se realiza en un Concentrator, los datos de paquetes se leerán desde el Decoder, pero si se realiza en un Archiver, se leerán desde el propio Archiver.
  4. Las coincidencias de los pasos 2 y 3 se devuelven a medida que se encuentran hasta el punto en el cual se alcanza el parámetro limit. Limit especifica la cantidad máxima de sesiones para las cuales se escanearán metadatos y datos de paquetes. Si no se especifica, se escanea el conjunto de sesiones completo determinado en el paso 1.

Marcas Msearch

                               
MarcaDescripción
spEscanea datos de paquetes crudos
smEscanea todos los metadatos
siRealiza búsquedas de índice para todos los parámetros de búsqueda antes de escanear metadatos
ciLleva a cabo una búsqueda que no distingue mayúsculas de minúsculas. Los resultados devueltos conservan las mayúsculas y las minúsculas.
regexTrata el parámetro de búsqueda como una expresión regular. Se puede especificar solo una expresión regular, pero esta puede ser arbitrariamente compleja.

Modo de búsqueda de índice de Msearch

El uso del modo de búsqueda de índice, que se especifica mediante la marca si, hace que los resultados se devuelvan de manera mucho más rápida que con cualquier otro modo. La principal limitación de este modo es que solo devuelve coincidencias en términos de texto que coinciden con valores de metadatos indexados por valor.

  • El parámetro si se debe combinar con la marca sm. El parámetro si implica que la búsqueda solo obtiene coincidencias con metadatos indexados. 
  • El parámetro si se puede utilizar con búsquedas regex; sin embargo, solo habrá coincidencias con valores indexados de texto. Las direcciones IP y los números no coincidirán con regex.

Consejos para Msearch

  • Utilice siempre la cláusula where para especificar un rango de tiempo para la búsqueda.  
  • Para buscar rangos de direcciones IP, debe especificarlas en la cláusula where.
  • Utilice el parámetro limit cuando no use el modo de búsqueda de índice. Sin él, las bases de datos de metadatos y paquetes leerán una cantidad excesiva de datos.

Procedimientos almacenados

Las llamadas query y values proporcionan más funcionalidad de búsqueda de bajo nivel. Para los casos de uso más avanzados, existen procedimientos almacenados en el nivel de servidor.

Uso de comillas en la sintaxis de una consulta

El analizador de consultas no distingue si se usan comillas simples o dobles en una declaración de consulta. Un valor entre comillas simples o dobles se trata como metadatos de texto.

El analizador de consultas intenta encontrar sentido a lo que se agrega en la declaración. No es muy estricto en cuanto a lo que aceptará.

Por ejemplo:

reference.id=4752

Esta cláusula identifica las sesiones que tienen un valor de metadatos reference.id con un valor _numeric_ de 4752.

reference.id='4752' o reference.id="4752"

Esta cláusula identifica las sesiones que tienen un valor de metadatos reference.id con un valor _string_ de "4752".

Sin embargo, el motor de consultas compara de manera implícita como iguales los números y las cadenas que parecen números cuando los valores son semánticamente iguales. Por lo tanto, funciona con cualquier sintaxis.

Sin embargo, para lograr el rendimiento más eficiente, siempre es recomendable crear consultas de modo que su sintaxis coincida con los tipos de datos que genera el analizador.

Por ejemplo, si el analizador está creando reference.id como un tipo de datos numérico (como uint32 o uint64), use la sintaxis numérica.

Si está creando reference.id como un tipo de datos de texto, use la sintaxis de cadena.

Previous Topic:Rollover
You are here
Table of Contents > Consultas

Attachments

    Outcomes