Не удалось выполнить анализ трассировки стека Logstash Tomcat - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь проанализировать некоторые журналы Tomcat с помощью logstash, вот пример данных:

 07-05-19 11:24:32 INFO  [XmlWebApplicationContext] Closing Root WebApplicationContext: startup date [Wed Apr 10 15:58:07 CEST 2019]; root of context hierarchy" >> /var/lib/docker/volumes/test1/_data/tomcat.misc.log
 09-05-19 10:25:00 WARN  [BasicResourcePool] com.mchange.v2.resourcepool.BasicResourcePool@74f26dc -- Acquisition Attempt Failedclear! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
    org.postgresql.util.PSQLException: Connection to ii refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:265)
            at com.mchange.v2.async.ThreadPoolAsynchronousRunner .run(ThreadPoolAsynchronousRunner.java:696)
    Caused by: java.net.ConnectException: Network is unreachable (connect failed)
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:144)
            ... 13 more

Я видел в других темах, что многоканальный плагин и шаблоны полезны:

Файл шаблона:

JAVA_TRACE (^.+Exception: .+)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)

Файл конфигурации Logstash:

input {
        udp{
                port => 12201
        }
        tcp{
                port => 12201
                codec => multiline {
                        patterns_dir => ["/conf/patterns"]
                        pattern => "^%{JAVA_TRACE}"
                        negate => "true"
                        what => "previous"
                }
        }
}

filter{
                grok{
                        patterns_dir => ["/conf/patterns"]
                        match => {message => ["(^%{DATE_EU:date} %{TIME:time} %{LOGLEVEL})"]}
                        tag_on_failure => ["failed"]
                }
}

output{
        elasticsearch{
                hosts => ["elasticsearch:9200"]
                index => "tomcat_misc"
        }
}

Просто для информации, вот мой конфиг клиента syslog-ng:

source s_test{
        wildcard-file(
                base-dir("/tmp")
                filename-pattern("*log")
                flags(no-parse)
                );
};

template no_header{
        template("$MSG\n");
        template_escape(no);
};

destination d_siem{
        tcp(X.X.X.X port(12201) template(no_header));
};

log {
        source(s_test);
        destination(d_siem);
};

Проблема в том, что, когда я использую этот конфиг, простые строки хорошо анализируются, но строки трассировки стека возвращают «сбойный» тафг, как будто они не интерпретируются в многоканальном кодеке. Например, строка «at com. [...]. Run» сохраняется как одна строка журнала, а не как часть многострочных журналов.

Я проверил на сайте регулярных выражений, что мой шаблон JAVA_TRACE является правильным и совпадает с моими трассировками стека, поэтому я не понимаю, почему кодек не работает ... у кого-нибудь есть идея?

Спасибо за помощь

...