在 Logstash 中组合多个事件

Combining multiple events in Logstash

我有一个 Logstash 配置,我正在从 Graphite 输入读取简单的行(但如果这有帮助,它也可能只是 tcp),我正在通过 AMQP 将它们转发到 RabbitMQ。

input {
  graphite {
    host => localhost
    type => carbon
    port => 22003
  }
}

output {
  rabbitmq {
    codec => json
    host => 'localhost'
    port => 5672
    user => 'guest'
    password => 'guest'
    vhost => '/'
    exchange_type => topic
    key => '%{type}'
    persistent => true
    durable => true
    ssl => false
    verify_ssl => false
    workers => 1
    exchange => 'metrics'
  }
}

现在我想优化 payload/overhead 比率,方法是将来自 Graphite 输入的多个在线添加到一个 AMQP 消息中。

我正在查看诸如整理或聚合之类的过滤器,但它们似乎并没有完全满足我的需要。我正在寻找的是一种传输格式,其中一个 AMQP 消息包含此输入的 20 或 30 行。

我自己弄明白了,我现在使用 multiline 作为输入编解码器:

tcp {
  host => localhost
  codec => multiline { pattern => "\r" max_lines => 100 what => "next" }
  type => carbon
  port => 22003
}