Два выхода в logstash.Один только для определенных агрегатов - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь указать второй вывод 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 голосов
/ 24 октября 2018

Я бы предложил использовать несколько конвейеров: https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html

Таким образом, вы можете иметь один конвейер для агрегации и второй для чистых данных.

...