Answers:
是否应该运行与具有不同类型的日志一样多的实例?
没有!您只能运行一个实例来处理不同类型的日志。
在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
}
}
希望这可以帮到你 :)
type
属性(具有相同的type => "value"
语法),这些属性应略微减少配置文件中的额外格式。示例:gist.github.com/fairchild/3030472每个文档:在此输入处理的所有事件中添加“类型”字段。类型主要用于过滤器激活。该类型存储为事件本身的一部分,因此您也可以使用该类型在Web界面中进行搜索。
type => "value"
在输出中使用时,显示以下消息:“您正在使用在stdout中设置的已弃用的配置设置“类型”。已弃用的设置将继续起作用,但计划在将来从logstash中删除。您可以实现新条件的相同行为,例如:if [type] == "sometype" { stdout { ... } }
。” 我撤回以前的评论。:)
type
如果输入中已有类型字段,则该属性将不适用。这是一个不会覆盖的特殊属性,已记录在案。我在Elastic中打开了一张票,他们建议我使用tags
或add_field
代替type
我将标签用于多个文件输入:
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}"
}
}
}
我认为Logstash在“输入”部分不能读取超过2个文件。试试下面
input {
file {
type => "technical"
path => "/home/technical/log"
}
file {
type => "business"
path => "/home/business/log"
}
file {
type => "business1"
path => "/home/business/log1"
}
}