如何在logstash中同时使用多行和json编解码器?

时间:2014-06-17 10:39:01

标签: json multiline logstash logstash-logback-encoder

我想以json格式接收日志消息。而且我还需要将以空格开头的日志(在同一封电子邮件中发送堆栈跟踪)与以前找到的日志合并。

从官方网站文档中,对于第一份工作,所需的编解码器是" json"。对于第二项工作,所需的编解码器是" multiline"。

如何同时执行这两项工作?

这是一个示例日志

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)

我想添加以"开头的行"与先前的日志消息合并。

1 个答案:

答案 0 :(得分:1)

您可以在给定输入上使用多个过滤器。例如,您可以在文档示例中使用输入上的多行代码来合并堆栈跟踪行:

input {
  stdin {
    codec => multiline {
      pattern => "^\s"
      what => "previous"
    }
  }
}

然后在配置文件中,您可以执行类似

的操作
filter {
    if [message] =~ /^{.*}$/ {
        json { source => message }
    }
}

因此,如果您获得以大括号开头/结尾的行,则可以将该行视为json。