我想使用kafka作为输入并使用logstash作为输出。我将把几个主题提供给logstash,并希望根据主题进行过滤。我试着编写这样的代码:
input {
kafka {
bootstrap_servers => "localhost:9092"
topics => ["test", "payment"]
}
}
filter {
if [topic] = "test" {
//do something
} else {
//do something
}
}
但似乎它不起作用。
答案 0 :(得分:0)
您应添加decorate_events
以添加kafka
字段。
选择向主题添加Kafka元数据,例如主题,邮件大小。这将向logstash事件添加一个名为kafka的字段,其中包含以下属性:topic:此消息与consumer_group关联的主题:用于读取此事件分区的使用者组:此消息与offset关联的分区:此消息与密钥关联的分区:包含消息密钥的ByteBuffer
然后像这样更新conf
input {
kafka {
bootstrap_servers => "localhost:9092"
topics => ["test", "payment"]
}
}
filter {
if [kafka][topic] = "test" {
//do something
} else {
//do something
}
}
答案 1 :(得分:0)
通过添加decorate_events
来添加kafka
字段来更改输入部分。
input {
kafka {
bootstrap_servers => "localhost:9092"
topics => ["test", "payment"]
decorate_events => true
}
}
更改过滤器部分如下:
filter {
if [@metadata][kafka][topic] == "test" {
//do something
} else {
//do something
}
}
答案 2 :(得分:0)
因此,先前的两个答案都具有真实性,但并不正确。
1。添加decorate_events
:
input {
kafka {
bootstrap_servers => "localhost:9092"
topics => ["test", "payment"]
decorate_events => true
}
}
[kafka][topic]
而不寻找[@metadata][kafka][topic]
: filter {
if [kafka][topic] = "test" {
//do something
} else {
//do something
}
}