Я пытаюсь объяснить лучше: У меня этот многострочный журнал. Ниже я показываю файл с 3-х бревен, она начинается с «INFO» и закончить «</диалог>»:Анализ многострочных журналов: строка + xml
INFO 05-01-16 08:06:01 [http-nio-8080-exec-8] (AbstractServer.java:454) -
<dialogue>
<server>FirstLog</server>
<duration>311</duration>
[...]
</dialogue>
INFO 05-01-16 08:06:02 [http-nio-8080-exec-8] (AbstractServer.java:454) -
<dialogue>
<server>SecondLog</server>
<duration>500</duration>
[...]
</dialogue>
INFO 05-01-16 08:06:03 [http-nio-8080-exec-8] (AbstractServer.java:454) -
<dialogue>
<server>ThirdLog</server>
<duration>100</duration>
[...]
</dialogue>
Я использую этот фильтр:
if [type] == "oldLogs" {
multiline {
pattern => "^%{LOGLEVEL}"
what => "previous"
negate => "true"
}
grok {
patterns_dir => "./patterns"
match => ["message", "(?m)%{LOGLEVEL:level} %{TIMESTAMP_ISO8601:timestamp} \[%{PROG:msg_1}\] \(%{JAVAFILE:file}:%{NUMBER:line}\) \-%{GREEDYDATA:msg_3}"]
}
xml {
store_xml => "false"
source => "msg_3"
xpath =>[
"/dialogue/server/text()" ,"server",
"/dialogue/duration/text()" ,"duration",
[...]
]
}
}
я я могу разбирать журналы JAVA и xml. Но с моими фильтрами (сообщение выше) logstash не может определить, где находится конец моих журналов </dialog>.
Выход выглядеть следующим образом:
"message" =><dialogue>\n<server>FirstLog</server>\n<duration>311</duration>\n[...]\n</dialogue>\nINFO 05-01-16 08:06:02 [http-nio-8080-exec-8] (AbstractServer.java:454) -\n<dialogue>\n<server>SecondLog</server>\n<duration>500</duration>\n[...]\n</dialogue>\nINFO 05-01-16 08:06:03 [http-nio-8080-exec-8] (AbstractServer.java:454) -\n<dialogue>\n<server>ThirdLog</server>\n<duration>100</duration>\n[...]\n</dialogue>
"level" => "INFO",
"timestamp" => "05-01-16 08:06:01",
"msg_1" => "http-nio-8080-exec-8",
"file" => "AbstractServer.java",
"xmldata" => <dialogue>\n<server>FirstLog</server>\n<duration>311</duration>\n[...]\n</dialogue>\nINFO 05-01-16 08:06:02 [http-nio-8080-exec-8] (AbstractServer.java:454) -\n<dialogue>\n<server>SecondLog</server>\n<duration>500</duration>\n[...]\n</dialogue>\nINFO 05-01-16 08:06:03 [http-nio-8080-exec-8] (AbstractServer.java:454) -\n<dialogue>\n<server>ThirdLog</server>\n<duration>100</duration>\n[..]\n</dialogue>
"server" => [ [0] "FirstLog" ],
"duration" => [ [0] "311"
и logstash является разбор только первый журнал XML и не рассматривает другие 2. Мой конечный результат должен быть:
{
"message" => <dialogue>\n<server>FirstLog</server>\n<duration>311</duration>\n[...]\n</dialogue>
"level" => "INFO",
"timestamp" => "05-01-16 08:06:01",
"msg_1" => "http-nio-8080-exec-8",
"file" => "AbstractServer.java",
"xmldata" => <dialogue>\n<server>FirstLog</server>\n<duration>311</duration>\n[...]\n</dialogue>
"server" => [ [0] "FirstLog" ],
"duration" => [ [0] "311"
}
{
"message" => <dialogue>\n<server>SecondLog</server>\n<duration>500</duration>\n[...]\n</dialogue>
"level" => "INFO",
"timestamp" => "05-01-16 08:06:02",
"msg_1" => "http-nio-8080-exec-8",
"file" => "AbstractServer.java",
"xmldata" =><dialogue>\n<server>SecondLog</server>\n<duration>500</duration>\n[...]\n</dialogue>
"server" => [ [0] "SecondLog" ],
"duration" => [ [0] "500"
}
{
"message" => <dialogue>\n<server>ThirdLog</server>\n<duration>100</duration>\n[...]\n</dialogue>
"level" => "INFO",
"timestamp" => "05-01-16 08:06:03",
"msg_1" => "http-nio-8080-exec-8",
"file" => "AbstractServer.java",
"xmldata" => <dialogue>\n<server>ThirdLog</server>\n<duration>100</duration>\n[...]\n</dialogue>
"server" => [ [0] "ThirdLog" ],
"duration" => [ [0] "100"
}
Я надеюсь, это яснее, и у кого-то есть время, чтобы дать мне еще несколько советов.
С уважением
У кого-то есть ключ? – sanfrareau