【问题标题】:How to use multiline and json codec at the same time in logstash?如何在logstash中同时使用多行和json编解码器?
【发布时间】:2014-06-17 10:39:00
【问题描述】:

我想接收 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”开头的行以与之前的日志消息合并。

【问题讨论】:

  • 您能否提供一些日志示例来说明您的要求?
  • @Alcanzar ,已编辑问题。 :)

标签: json multiline logstash logstash-logback-encoder


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多