Я пытаюсь проанализировать наши файлы журналов и отправить их в elasticsearch. Проблема в том, что наш клиент S3 вставляет в файл строки, содержащие символы возврата каретки (\ r) вместо символов новой строки (\ n). Конфигурация для входного фильтра файлов с использованием '\ n' в качестве разделителя, что соответствует 99% данных. Когда я запускаю logstash для этих данных, он пропускает последнюю строку, которую я действительно ищу. Это связано с тем, что фильтр ввода файлов обрабатывает символы '\ r' как обычный текст, а не как новую строку. Чтобы обойти это, я пытаюсь использовать фильтр Mutate, чтобы переписать символы '\ r' на '\ n'. Мутация работает, но Грок по-прежнему видит в ней одну большую строку. и _grokparsefailure.
Мои "нормальные" строки файла журнала Grok, как и ожидалось.
Конфиг
input {
file {
path => "/home/pa_stg/runs/2015-12-09-cron-1449666001/run.log"
start_position => "beginning"
sincedb_path => "/data/logstash/sincedb"
stat_interval => 300
type => "spark"
}
}
filter{
mutate {
gsub => ["message", "\r", "
"]
}
grok {
match => {"message" => "\A%{DATE:date} %{TIME:time} %{LOGLEVEL:loglevel} %{SYSLOGPROG}%{GREEDYDATA:data}"}
break_on_match => false
}
}
output{
stdout { codec => rubydebug }
}
Вход
Этот образец из входного файла иллюстрирует проблему. Символы ^ M показывают, как vim отображает возврат каретки '\ r' ('more' скрывает большинство из них). Я оставил строку как есть, чтобы вы могли видеть, что все это отображается в Linux и File Plugin как одна строка текста.
^M[Stage 79:=======> (30 + 8) / 208]^M[Stage 79:============> (49 + 8) / 208]^M[Stage 79:=================> (65 + 8) / 208]^M[Stage 79:=====================> (83 + 8) / 208]^M[Stage 79:===========================> (105 + 8) / 208]^M[Stage 79:===============================> (122 + 8) / 208]^M[Stage 79:====================================> (142 + 8) / 208]^M[Stage 79:=========================================> (161 + 8) / 208]^M[Stage 79:==============================================> (180 + 6) / 208]^M[Stage 79:==================================================> (195 + 3) / 208]^M[Stage 79:=====================================================>(206 + 1) / 208]^M ^M^M[Stage 86:==============> (55 + 8) / 208]^M[Stage 86:===================> (75 + 8) / 208]^M[Stage 86:==========================> (101 + 8) / 208]^M[Stage 86:===============================> (123 + 8) / 208]^M[Stage 86:======================================> (147 + 8) / 208]^M[Stage 86:============================================> (173 + 6) / 208]^M[Stage 86:==================================================> (193 + 3) / 208]^M[Stage 86:=====================================================>(205 + 1) / 208]^M ^M^M[Stage 93:===================> (74 + 8) / 208]^M[Stage 93:===========================> (104 + 8) / 208]^M[Stage 93:==================================> (132 + 8) / 208]^M[Stage 93:========================================> (157 + 9) / 208]^M[Stage 93:================================================> (186 + 6) / 208]^M[Stage 93:=====================================================>(206 + 2) / 208]^M ^M15/12/09 13:03:46 INFO SomethingProcessor$: Something Processor completed
15/12/09 13:04:44 INFO CassandraConnector: Disconnected from Cassandra cluster: int
Выход
{
"message" => "\n[Stage 79:=======> (30 + 8) / 208]\n[Stage 79:============>
(49 + 8) / 208]\n[Stage 79:=================> (65 + 8) / 208]\n[Stage 79:===
==================> (83 + 8) / 208]\n[Stage 79:===========================> (105 + 8
) / 208]\n[Stage 79:===============================> (122 + 8) / 208]\n[Stage 79:====================================>
(142 + 8) / 208]\n[Stage 79:=========================================> (161 + 8) / 208]\n[Stage 79:================
==============================> (180 + 6) / 208]\n[Stage 79:==================================================> (195 + 3) / 208]\n[St
age 79:=====================================================>(206 + 1) / 208]\n
\n\n[Stage 86:==============> (55 + 8) / 208]\n[Stage 86:===================>
(75 + 8) / 208]\n[Stage 86:==========================> (101 + 8) / 208]\n[Stage 86:====
===========================> (123 + 8) / 208]\n[Stage 86:======================================> (147 + 8)
/ 208]\n[Stage 86:============================================> (173 + 6) / 208]\n[Stage 86:========================================
==========> (193 + 3) / 208]\n[Stage 86:=====================================================>(205 + 1) / 208]\n
\n\n[Stage 93:===================> (74 + 8) / 208]\n[S
tage 93:===========================> (104 + 8) / 208]\n[Stage 93:==================================>
(132 + 8) / 208]\n[Stage 93:========================================> (157 + 9) / 208]\n[Stage 93:============================
====================> (186 + 6) / 208]\n[Stage 93:=====================================================>(206 + 2) / 208]\n
\n15/12/09 13:03:46 INFO SomethingProcessor$: Something Processor com
pleted",
"@version" => "1",
"@timestamp" => "2015-12-09T22:16:52.898Z",
"host" => "ip-10-252-1-225",
"path" => "/home/something/pa_stg/runs/2015-12-09-cron-1449666001/run.log",
"type" => "spark",
"tags" => [
[0] "_grokparsefailure"
]
}
Мне нужен Grok, чтобы разобрать эту строку, как новую строку '\ n'. Кто-нибудь знает, как это исправить?
15/12/09 13:03:46 INFO SomethingProcessor$: Something Processor completed