Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何使用Logstash处理多个异构输入?_Logging_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash_Graylog2 - Fatal编程技术网 elasticsearch,logstash,graylog2,Logging,elasticsearch,Logstash,Graylog2" /> elasticsearch,logstash,graylog2,Logging,elasticsearch,Logstash,Graylog2" />

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

Logging 如何使用Logstash处理多个异构输入?,logging,elasticsearch,logstash,graylog2,Logging,elasticsearch,Logstash,Graylog2,假设您有两种不同类型的日志,例如技术日志和业务日志,您需要: 原始技术日志可以使用gelf输出路由到graylog2服务器 json业务日志可以使用专用的elasticsearch\u http输出存储到elasticsearch集群中 我知道,例如,使用Syslog NG,配置文件允许定义几个不同的输入,然后可以在分派之前分别处理这些输入;什么Logstash似乎无法完成。即使一个实例可以使用两个特定的配置文件启动,所有日志都采用相同的通道,并应用相同的处理 我应该运行尽可能多的实例,因为

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

  • 原始技术日志可以使用
    gelf
    输出路由到graylog2服务器
  • json业务日志可以使用专用的
    elasticsearch\u http
    输出存储到elasticsearch集群中
我知道,例如,使用
Syslog NG
,配置文件允许定义几个不同的输入,然后可以在分派之前分别处理这些输入;什么
Logstash
似乎无法完成。即使一个实例可以使用两个特定的配置文件启动,所有日志都采用相同的通道,并应用相同的处理

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

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

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

在logstash配置文件中,可以使用不同的参数指定每个输入。 然后在过滤器中,您可以使用它来区分不同的处理, 在输出端,您还可以使用“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
    }
}

希望这能帮助您:)

我认为logstash在输入部分只能读取2个文件。试试下面的方法

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
 file {
            type => "business1"
            path => "/home/business/log1"
    }
} 

我将标记用于多个文件输入:

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}"
        }
    }
}

您还可以在过滤器和输出定义中使用
type
属性(使用相同的
type=>“value”
语法),这将稍微减少配置文件中的额外格式。示例:根据文档:将“类型”字段添加到此输入处理的所有事件。类型主要用于过滤器激活。该类型存储为事件本身的一部分,因此您也可以使用该类型在web界面中搜索它。当我在输出中使用
type=>“value”
时,显示了以下消息:“您正在使用stdout中设置的不推荐的配置设置“type”。不推荐的设置将继续工作,但计划在将来从日志存储中删除。您可以使用新的条件实现相同的行为,例如:
if[type]=”sometype“{stdout{…}}
”我收回我以前的评论:请注意,如果输入中已有类型字段,则
type
属性将不适用。这是一个特殊的属性,它不会覆盖,并且有文档记录。我用橡皮筋打开了一张票,他们建议我使用
标签
添加字段
,而不是
类型
@BornToCode,我不太明白。你是说Ben的密码有问题吗?或者,如果日志路径是同一个文件,它就不起作用了?什么情况下它不起作用?@BenLim OP不接受你的答案,但我发现它对你很有帮助,并且投票支持你。你应该接受Ben Lim的正确答案!这比公认的答案要好:它允许在logstash中输入多个filebeat。在这种情况下,“type”属性被设置为“log”,无法修改。但这不是用最后一个标记(bbb)覆盖标记吗?然后,在if statemet中,如果标记是数组或单个字符串,那么两个if都可以工作。所以从逻辑上来说这是不正确的,但可能logstash内部有不同的逻辑,如果'sYup,遇到相同的'issue'