Игорь, благодарю за ссылку, date filter помог. Но, похоже, я все еще чего-то не понимаю, поэтому попробую попросить вашей помощи еще раз. Дело в том, что не все мои логи, после прохождения фильтра, попадают в эластик. При этом в logstahs-plain, при запуске, logstash ошибок не выдает.
пример лога:
2019-04-27T06:03:44.720Z {name=srv} CLIENT RESPONSE : {"username":"user5","userId":000000055,"accessToken":"token-555","refreshToken":"token-1234","corporateCustomerId":123456788,"error":null}
2019-04-27T06:03:45.118Z {name=srv} CLIENT RESPONSE : {"username":"user5","userId":0000056,"accessToken":"token-token","refreshToken":"token-789","corporateCustomerId":123456789}
2019-05-25T23:59:23.017Z {name=dns-name.ru} {"tags":["response"],"duration":1,"path":"/health","host":"dns-name.ru","code":"200"}
2019-05-25T23:59:23.017Z {name=srv} 23:59:23.017 [reactor-http-epoll-11] INFO LogMessage - {"tags":["response"],"duration":1,"path":"/health","host":"dns-name.ru","code":"200"}
2019-04-27T08:17:48.759Z {name=srv} 08:17:48.759 [parallel-24] INFO LogMessage - {"tags":["request","service","payment-service"],"path":"/payments/bulk/state","host":"host-ip","url":"http://host-ip/payments/bulk/state?userId=00000004&paymentIds=000000000000000"}
2019-05-25T21:29:17.454Z {name=srv} 21:29:17.454 [reactor-http-epoll-11] TRACE serviceRequestLogger - CLIENT RESPONSE : {"username":"user3","userId":000002,"accessToken":"456-token","refreshToken":"token-678","corporateCustomerId":00000000}
2019-05-25T22:07:15.565Z {name=srv} 22:07:15.565 [reactor-http-epoll-11] TRACE serviceRequestLogger - CLIENT RESPONSE : {"username":"user2","userId":00000002,"accessToken":"token-123","refreshToken":"456-token","corporateCustomerId":0000000000}
2019-05-25T22:07:15.219Z {name=srv} CLIENT RESPONSE : {"username":"user","userId":0000000,"accessToken":"token123","refreshToken":"123-token","corporateCustomerId":0000000,"error":null}
Жирным я отметил логи, которые не попадают в эластик.
Для обработки я написал следующий грок:
%{TIMESTAMP_ISO8601:timestamp} {name=%{DATA:beat.name}} (%{TIME:time} [%{DATA:thread}] %{DATA:logtype} ( %{DATA:logger}|%{DATA:logger}) (- CLIENT RESPONSE : %{GREEDYDATA:msg}|- %{GREEDYDATA:msg})|CLIENT RESPONSE : %{GREEDYDATA:msg}|%{GREEDYDATA:msg})
Который парсит любую из строк лога, если проверять ее в грок дебаггере.
Но, как уже было сказано выше, в logstash он пропускает некоторые строки.
Ниже конфиг из logstash pipeline:
input {
file {
#type => "log"
path => "/home/touch/log-file"
tags => ["recovery"]
start_position => "beginning"
sincedb_path => "/home/touch/sincedb_access"
}
}
filter {
if "recovery" in [tags] {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \{name=(%{DATA:beat.name})\} (%{TIME:time} \[%{DATA:thread}\] %{DATA:level} ( %{DATA:logger}|%{DATA:logger}) (- CLIENT RESPONSE : %{GREEDYDATA:msg}|- %{GREEDYDATA:msg})|CLIENT RESPONSE : %{GREEDYDATA:msg}|%{GREEDYDATA:msg})" }
}
date {
match => ["timestamp", "ISO8601", "YYYY-MM-dd HH:mm:ss,SSS"]
}
json {
source => "msg"
}
#mutate {
# remove_field => ["msg"]
# replace => { "[host][name]" => "%{[beat][name]}" }
#}
}
}
output {
if "recovery" in [tags] {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "example-file.log"
}
}
}
Я уже второй день бьюсь над этой проблемой, и у меня кончились идеи. Если совсем убрать json фильтр, то все логи попадают в эластик, но лог, понятное дело, "сырой". Т.е. проблема, видимо, на этапе работы json фильтра.