如何使用Logstash处理多个异构输入?

Dav*_*vid 92 logging elasticsearch logstash graylog2

假设您有两种非常不同类型的日志,例如技术和业务日志,您需要:

  • 使用gelf输出将原始技术日志路由到graylog2服务器,
  • 使用专用elasticsearch_http输出将json业务日志存储到elasticsearch集群中.

我知道,Syslog-NG例如,配置文件允许定义几个不同的输入,然后可以在分派之前单独处理; 什么Logstash似乎无法做到.即使一个实例可以使用两个特定的配置文件启动,所有日志都采用相同的通道并应用相同的处理...

我应该运行尽可能多的实例,因为我有不同类型的日志吗?

Ben*_*Lim 184

我应该运行尽可能多的实例,因为我有不同类型的日志吗?

没有!您只能运行一个实例来处理不同类型的日志.

在logstash配置文件中,您可以使用不同类型指定每个输入.然后在过滤器中,您可以使用if来区分不同的处理,并且在输出处也可以使用"if"输出到不同的目标.

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
} 
filter {
    if [type] == "technical" {
            # processing .......
    }
    if [type] == "business" {
            # processing .......
    }
}
output {
    if [type] == "technical" {
            # output to gelf
    }
    if [type] == "business" {
            # output to elasticsearch
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮到你 :)

  • 好吧,看起来Ben提供的实际上是实现这一目标的新方法.当我在输出中使用`type =>"value"`时,我显示以下消息:"您正在stdout中使用已弃用的配置设置"type".不推荐的设置将继续有效,但计划从中删除将来的logstash.您可以使用新的条件实现相同的行为,例如:`if [type] =="sometype"{stdout {...}}`." 我撤回了之前的评论.:) (5认同)
  • @BenLim OP不接受你的答案,但我发现它最有帮助,并且投票给你了. (2认同)

Rob*_*ang 14

我使用标签进行多个文件输入:

input {
    file {
        type => "java"
        path => "/usr/aaa/logs/stdout.log"
        codec => multiline {
            ...
        },
        tags => ["aaa"]
    }

    file {
        type => "java"
        path => "/usr/bbb/logs/stdout.log"
        codec => multiline {
                ...
        }
        tags => ["bbb"]
    }
}
output {
    stdout {
        codec => rubydebug
    }
    if "aaa" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "aaa"
            document_type => "aaa-%{+YYYY.MM.dd}"
        }
    }

    if "bbb" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "bbb"
            document_type => "bbb-%{+YYYY.MM.dd}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)