Logstash中的两个输出。仅用于某些聚合

时间:2018-10-12 13:30:44

标签: postgresql elasticsearch logstash

我正在尝试指定logstash的第二个输出,以便仅保存某些聚合数据。目前尚不知道如何实现。文档没有涵盖这种情况。

此刻,我使用一个输入和一个输出。

输入定义(logstash-udp.conf):

input { 
    udp { 
        port => 25000
        codec => json
        buffer_size => 5000
        workers => 2
    }
}

filter {
  grok {
    match => [ "message", "API call happened" ]
  }

  aggregate {
    task_id => "%{example_task}"
    code => "
        map['api_calls'] ||= 0
        map['api_calls'] += 1
        map['message'] ||= event.get('message')
        event.cancel()
    "
    timeout => 60
    push_previous_map_as_event => true
    timeout_code => "event.set('aggregated_calls', event.get('api_calls') > 0)"
    timeout_tags => ['_aggregation']
  }
}

输出定义(logstash-output.conf):

output {
  elasticsearch {
    hosts => ["localhost"]
    manage_template => false
    index => "%{[@metadata][udp]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

我现在想要实现什么?我需要添加第二个不同的聚合(不同的数据和条件),它将像现在一样将所有未聚合的数据保存到Elasticsearch,但是此聚合的聚合数据将保存到Postgres。此刻我非常困窘,在网上搜索一些文档/示例无济于事。

1 个答案:

答案 0 :(得分:1)

我建议使用多个管道:https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html

这样,您可以有一个管道用于聚合,第二个管道用于纯数据。