Empezando con elk formato catalina.out


(Cristian Valor) #1

Hola a todos, estoy teniendo problemas para entender del todo como funciona elk.

El catalina loguea de la siguiente manera
May 19, 2016 7:14:42 PM com.sun.xml.ws.transport.http.HttpAdapter fixQuotesAroundSoapAction
INFO: Received WS-I BP non-conformant Unquoted SoapAction HTTP header:
sendResponseStatus 530 SPA not supported by the object
java.lang.Throwable

Usando el debbuger de grok llegué a la siguiente fórmula que me ayudaría a parsearlo como quiero
%{MONTH} +%{MONTHDAY}, %{YEAR} %{TIME} %{WORD} %{JAVACLASS} %{WORD:message}\n%{LOGLEVEL:loglevel}: %{DATA}\n%{DATA}\n

Luego para indexarlo y mapearlo en elk lo estoy haciendo de la siguiente manera
curl -XPUT http://localhost:9200/fdbtest -d '
{
"mappings" : {
"default" : {
"properties" : {
"timestamp": {
"type": "date",
"format": "MMM dd, YYYY hh:mm:ss"
},
"JavaClass": {
"type": "string","index":"not_analyzed"
},
"methodName":{
"type":"string","index":"not_analyzed"
},
"message": {
"type": "string"
},
"loglevel": {
"type": "string"
},
"extradata": {
"type": "string"
}
}
}
}
}
';

Luego en kibana me está apareciendo el siguiente mensaje cuando quiero visualizar los datos

    "Discover: An error occurred with your request. Reset your inputs and try again. "

No se si estoy equivocandome en algún paso o si no estoy entendiendo del todo como funciona ELK, si alguien me puede ayudar o orientar sería genial,
Gracias.

Saludos,
Cristian


(Gabriel Moskovicz) #2

Hola Cristian,

Este problema puede estar en multiples lugares. Lo primero que debes fijarte es, utilizando el Developer Console de Chrome cual es el request que Kibana esta haciando a Elasticsearch. Luego, recomiendo utilizar curl y hacer un replay de la llamada que esta haciendo Kibana.

Luego, hay que verificar que los datos esten en Elasticsearch. Para eso recomiendo hacer un search a fdbtest y fijarse la cantidad de resultados que nos devuelve.

Hazme saber si esto ayuda.

Saludos!


(Cristian Valor) #3

Gabriel, gracias por tu pronta respuesta.

Realizando lo que me recomendaste he encontrado que aparentemente tengo error al parsear, no encuentra mapeo para [timestamp].
Parse Failure [No mapping found for [timestamp] in order to sort on]
Igualmente, la verdad, sigo sin entender donde está el problema.

Utilizando search de elastic me aparcen hits 0.
Esto quiere decir que las nuevas lineas de mi log no se están logrando indexar en elasticsearch?

Saludos,
Cristian


(Gabriel Moskovicz) #4

Cristian,

Correcto, si hacer un search aparece 0, quiere decir que las lineas de logs no se estan enviando a Elasticsearch. Estimo que el error es que no hay documentos y aun no puede ser utilizado en Kibana.

Te propongo concentrarte primero en verificar que Logstash a Elasticsearch funcione, y luego centrarte en Kibana. Si te puedes asegurar que los documentos esten en Elasticsearch, luego en Kibana podras simplemente configurar el index-pattern y hacerlo funcionar.

Saludos!


(Cristian Valor) #5

Gabriel,
Gracias por tu orientación,

Una última consulta. Para que todo funcione en orden mi pattern definido en logstash tiene que matchear 100% con mi índice y mapeo en elasticsearch para que las lineas de logs queden indexadas? (actualmente mi solución no lo hace)

En orden de corroborar esto solo puedo consultar lo logs de elasticsearch?

Saludos,
Cristian


(Gabriel Moskovicz) #6

No necesariamente. Por ejemplo, si no configuras dynamic en el mapping/template, el log va a ser indexado, con sus propiedades creadas dinamicas si el mapping es incorrecto. De todas maneras lo mejor es utilizar stdout the output en Logstash, y luego stdin como input.

Luego en el input copias y pegas una linea, o multiple lineas de logs y modificas el filter hasta tener el output que deseas. utilizando stdout { codec => rubydebug } va a devolver un jsonn que tu puedes indexar en Elasticsearch.

LUego de objtener el json deseado, lo ideal seria con SENSE o curl agregar el json manualmente y verificar que fue indexado con las propiedades que tu quieres. Luego reemplazas los input y output por la entrada deseada (file) y luego Elasticsearch, y esto deberia fluir.

Saludos


(Cristian Valor) #7

Gracias por iluminarme el camino de esa manera Gabriel, me has ahorrado horas de darme contra el teclado.

Saludos


(Gabriel Moskovicz) #8

Un gusto! Espero que haya sido de ayuda. Saludos!


(David F.) #9

Necesitas configurar correctamente el parseo para logs multilinea, no te hace falta cambiar los mappings, con una correcta configuración en logstash (si es que lo usas) es suficiente te lo digo por qué yo lo tengo configurado correctamente y funciona genial


(MANUEL GUAREÑO JIMENEZ) #10

Hola compañeros!!
Yo voy a empezar a intentar integrarlo todo para usarlo como análisis y recolección de logs.
Los filebeats, logstash y elasticsearch ya están montados y en comunicación...

Podrías @dfr0 indicarnos (en mi caso si es que filtras la multilinea con filebeat, sino en logstash) como lo has conseguido configurar?

Me recomendaron hacerlo mediante filebeat, con expresiones regulares pero me está resultando un autentico infierno.

Si no, creeme que cualquier ayuda es bienvenida e infinitamente agradecida :smiley:
Mi versión en todo el paquete es la 5.2.0*


(David F.) #11

la multilinea la configuré para tomcat y efectivamente en mi caso lo hice con logstash.

Busco la configuración y te la paso


(David F.) #12

Genial, no llegué a la versión 5 por temas de java 8 pero da igual porque al final es lo mismo.

Tiene varias configuraciones diferentes en tu entorno y todas ellas requieren un parseo de logstash.

1- interpretar los syslog que reciab de las máquinas
2- interpretar los logs multilinea de tomcat (app java)
3- interpretar los logs de las máquinas windows, en estas además tendrás que instalar un programita para que envie los logs a el syslog/SIEM (osea tu logstash o elasticsearch)
4- para configurar los roles de los diferentes usuarios tienes que usar o shield (de pago) o un plugin de elasticsearch que se llama REST

Tengo bastante idea porque estuve pegandome con esto casi un año entero :slight_smile: lo que no tengo es mucho tiempo ahora para subir configuraciones y revisarlas pero puedo ir mirando de vezs en cuando para ayudarte en lo que sepa.

Empieza buscando como parsear con logstash, y mirate como configurar REST, por cierto te recomiendo encarecidamente que no bajes los paquetes y los compiles, tira de los repos oficiales y también te recomiendo que no vayas actualizando los paquetes de filebeat, kibana, elasticsearch o logstash ya que entre versiones muchos parametros, configuraciones y sobretodo los indices de elasticsearch te pueden dar problemas.


(system) #13