with tutorial elasticsearch logstash

elasticsearch - tutorial - logstash kibana



Eliminar campo de evento por patrĂ³n (2)

Así que estoy usando una pila ELK estándar para analizar los registros de acceso de Apache, lo cual está funcionando bien, pero estoy buscando dividir los parámetros de URL como campos, usando el filtro KV, para permitirme escribir mejores consultas.

Mi problema es que esa aplicación que estoy analizando tiene parámetros generados dinámicamente que generan "caché", lo que lleva a decenas de miles de ''campos'', cada uno de los cuales ocurre una vez. ElasticSearch parece tener graves problemas con esto y no tienen ningún valor para mí, por lo que me gustaría eliminarlos. A continuación se muestra un ejemplo del patrón

GET /page?rand123PQY=ABC&other_var=something GET /page?rand987ZDQ=DEF&other_var=something

En el ejemplo anterior, los parámetros que deseo eliminar inician ''rand''. Actualmente mi logstash.conf usa grok para extraer campos de los registros de acceso, seguido de kv para extraer los parámetros de la cadena de consulta:

filter { grok { path => "/var/log/apache/access.log" type => "apache-access" } kv { field_split => "&?" } } filter { grok { path => "/var/log/apache/access.log" type => "apache-access" } kv { field_split => "&?" } } ¿Hay alguna manera de filtrar los campos que coincidan con el patrón rand[A-Z0-9]*=[A-Z0-9]* ? La mayoría de los ejemplos que he visto son campos de orientación por nombre exacto, que no puedo usar. Me pregunté si volvería a clasificar el campo de solicitud en un campo nuevo, ejecutaría KV y luego lo eliminaría. Funcionaría eso?


Si el conjunto de campos que le interesan es conocido y está bien definido, puede establecer el target para el filtro kv , mover los campos interesantes al nivel superior del mensaje con un filtro mutado y eliminar el campo con la clave / valor anidado pares. Creo que esto es más o menos lo que sugeriste al final.

Alternativamente, puedes usar un filtro de rubí :

filter { ruby { code => " event.to_hash.keys.each { |k| if k.start_with?(''rand'') event.remove(k) end } " } }


Sé que esto está fechado y ha sido respondido, pero para cualquiera que lo investigue a partir de 2017. Hay un complemento llamado prune que le permite recortar según los criterios de diferencia, incluidos los patrones.

prune { blacklist_names => ["[0-9]+", "unknown_fields", "tags"] }