Как использовать многострочный и json кодек одновременно в logstash?
Я хочу получать сообщения журнала в формате json. И мне также нужно объединить журналы, начинающиеся с пробела (для отправки следов стека в том же письме), с ранее найденными журналами.
Из официальной документации сайта, для первой работы необходим кодек "json". А для второй работы необходим кодек "многострочный".
Как выполнить обе работы одновременно?
Вот пример журнала
2014-06-17 14:47:22,490 DEBUG [-] com.tigerit.evr.util.EvrAuthManager (EvrAuthManager.java:61) - User details are good and ready to go
А вот пример трассировки стека -
com.bea.core.repackaged.springframework.beans.factory.BeanCreationException: Dependency injection failure: can't find the bean definition about class interface javax.jms.Queue; nested exception is com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.jms.Queue] is defined: No beans of type javax.jms.Queue; owner=com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@1364679d: display name [com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@1364679d]; startup date [Wed Jun 18 10:10:36 BDT 2014]; parent: com.bea.core.repackaged.springframework.context.support.GenericApplicationContext@61932006
at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.applyInjections(Jsr250Metadata.java:244)
at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.inject(Jsr250Metadata.java:226)
at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBrokerImpl.injection(EjbComponentCreatorBrokerImpl.java:112)
at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBrokerImpl.getBean(EjbComponentCreatorBrokerImpl.java:70)
at weblogic.ejb.container.injection.EjbComponentCreatorImpl.getBean(EjbComponentCreatorImpl.java:68)
at weblogic.ejb.container.manager.BaseEJBManager.createNewBeanInstance(BaseEJBManager.java:216)
Я хочу добавить строки, начинающиеся с "at", чтобы объединить с предыдущим сообщением журнала.
1 ответ
Вы можете использовать несколько фильтров для данного входа. Например, вы можете использовать многострочный код на входе, как в примере с документом, чтобы объединить строки трассировки стека:
input {
stdin {
codec => multiline {
pattern => "^\s"
what => "previous"
}
}
}
а затем позже в вашем конфигурационном файле вы можете сделать что-то вроде
filter {
if [message] =~ /^{.*}$/ {
json { source => message }
}
}
Таким образом, если вы получите строку, которая начинается / заканчивается скобками, вы можете рассматривать эту строку как json.