我们希望为我们公司的几个不同项目设置logstash服务器。现在我尝试在Kibana中启用它们。我的问题是: 如果我有不同的日志文件模式,我如何为它们构建过滤器? 例如:logstash.conf:
input {
file {
type => "A"
path => "/home/logstash/A/*"
start_position => "beginning"
}
file {
type => "B"
path => "/home/logstash/B*"
start_position => "beginning"
}
}
filter {
multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
grok {
type => A
match => [ "message", "%{TIMESTAMP_ISO8601:logdate} %{DATA:thread %{LOGLEVEL:level}\s*%{DATA:logger_name}\s*-\s*%{GREEDYDATA:log_text}"]
add_tag => [ "level_%{level}" ]
}
date {
match => ["logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
}
grok {
type => B
match => [ any other pattern ...
}
}
output {
elasticsearch { embedded => true }
}
我是否必须为每个项目(A,B,C,...)创建一个自己的过滤器,当我为每个项目再次创建不同模式的日志文件时,我该怎么办?
答案 0 :(得分:9)
您只需要为所有项目创建过滤器。
对于Logstash 1.3.3,您可以使用if语句来区分每个项目grok。例如,
filter {
multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
if [type] == "A" {
grok {
match => [ any other pattern ...
}
}
else if [type] == "B" {
grok {
match => [ any other pattern ...
}
}
}
希望这可以帮到你。