我想问一下这种情况。
我有两个grok模式匹配。
如果第一个匹配,我想将它与第一个索引输出相关联,例如" logstash-business-error"。
如果第二个grok匹配,我想将它链接到第二个索引输出,例如" logstash-system-error"
我们可以使用logstash.conf吗?
下面是我目前为止只有一个索引的当前版本。
input {
beats {
port => 5044
}
}
filter {
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp} *%{LOGLEVEL:messagetype} (?:\[%{GREEDYDATA:jmsListener}\]) %{WORD:class } - %{WORD:Task} - %{QS:errorType} %{NUMBER:clientlayout} %{DATA:roll
Up} %{DATA:docName} %{NUMBER:errorNo} %{GREEDYDATA:message}"
}
}
if [messagetype]!="ERROR"{
drop {}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "logstash-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
stdout { codec => rubydebug }
}
谢谢,
答案 0 :(得分:1)
请看下面的技巧:
添加新字段
mutate {
add_field => {
"index_prefix" => "logstash"
}
}
if [messagetype]!="ERROR" {
mutate {
replace => {
"index_prefix" => "whateveryouwant"
}
}
}
然后当您使用index_prefix作为默认索引</ p>输出时
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{index_prefix}-%{+xxxx.ww}"
document_type => "%{[@metadata][type]}"
}
stdout { codec => rubydebug }
}
完整的例子就是这个
input {
beats {
port => 5044
}
}
filter {
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp} *%{LOGLEVEL:messagetype} (?:\[%{GREEDYDATA:jmsListener}\]) %{WORD:class } - %{WORD:Task} - %{QS:errorType} %{NUMBER:clientlayout} %{DATA:roll
Up} %{DATA:docName} %{NUMBER:errorNo} %{GREEDYDATA:message}"
}
}
if [messagetype]!="ERROR"{
drop {}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
mutate {
add_field => {
"index_prefix" => "logstash"
}
}
if [messagetype]!="ERROR" {
mutate {
replace => {
"index_prefix" => "whateveryouwant"
}
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{index_prefix}-%{+xxxx.ww}"
document_type => "%{[@metadata][type]}"
}
stdout { codec => rubydebug }
}