En el vídeo de esta semana hemos montado un sistema para indexar los logs de cualquier aplicación Java(De hecho, es fácil modificarlo para cualquier aplicación) en ElasticSearch:
El fichero donde definimos el proceso ETL(Estract, Transform & Load) es el siguiente:
input { file { type => "java" path => "/media/albert/datos/tests/liferay-ce-portal-7.2.1-ga2/tomcat-9.0.17/logs/catalina.out" codec => multiline { pattern => "^%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}.*" negate => "true" what => "previous" } } } filter { #If log line contains tab character followed by 'at' then we will tag that entry as stacktrace if [message] =~ "\tat" { grok { match => ["message", "^(\tat)"] add_tag => ["stacktrace"] } } #Grokking Spring Boot's default log format grok { match => [ "message", "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}) %{LOGLEVEL:level} %{NUMBER:pid} --- \[(?<thread>[A-Za-z0-9-]+)\] [A-Za-z0-9.]*\.(?<class>[A-Za-z0-9#_]+)\s*:\s+(?<logmessage>.*)", "message", "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}) %{LOGLEVEL:level} %{NUMBER:pid} --- .+? :\s+(?<logmessage>.*)" ] } #Parsing out timestamps which are in timestamp field thanks to previous grok section date { match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ] } } output { stdout { } elasticsearch { hosts => [ "localhost:9200" ] index => "liferay" } }
Y una vez tenemos nuestro proceso definido solo tenemos que ejecutarlo con la siguiente sentencia:
logstash -f fichero.logstash