2013-08-20 3 views
76

Допустим, у вас есть 2 очень разные типы журналов, таких как технические и бизнес-журналы, и вы хотите:Как обрабатывать несколько гетерогенных входов с помощью Logstash?

  • сырые технические журналы быть направлены в сторону сервера graylog2 с использованием gelf выход,
  • JSON бизнес-журналы хранятся в кластер elearchearch, используя выделенный вывод elasticsearch_http.

Я знаю, что с Syslog-NG файл конфигурации позволяет определить несколько отдельных входов, которые затем могут обрабатываться отдельно перед отправкой; какой Logstash похоже не может сделать. Даже если один экземпляр может быть инициирован с двумя конкретными файлами конфигурации, все журналы имеют один и тот же канал и применяются одни и те же процессы ...

Должен ли я запускать столько экземпляров, сколько у меня есть разные типы журналов?

+0

Вы должны принять правильный ответ Бен Лимы! –

ответ

163

Должен ли я запускать столько экземпляров, сколько у меня есть разные типы журналов?

Нет! Вы можете запускать только один экземпляр для обработки различных типов журналов.

В файле конфигурации logstash вы можете указать каждый вход с различными type. Затем в фильтре вы можете использовать if для отличной обработки, , а также на выходе вы можете использовать вывод «if» для разных целей.

input { 
    file { 
      type => "technical" 
      path => "/home/technical/log" 
    } 
    file { 
      type => "business" 
      path => "/home/business/log" 
    } 
} 
filter { 
    if [type] == "technical" { 
      # processing ....... 
    } 
    if [type] == "business" { 
      # processing ....... 
    } 
} 
output { 
    if [type] == "technical" { 
      # output to gelf 
    } 
    if [type] == "business" { 
      # output to elasticsearch 
    } 
} 

Надеется, что это может помочь вам :)

+1

Вы также можете использовать атрибут 'type' (с тем же синтаксисом' type => "") в определении фильтра и вывода, который должен немного сократить дополнительное форматирование в файле конфигурации. Пример: https://gist.github.com/fairchild/3030472 В документации: добавьте поле «тип» ко всем событиям, обрабатываемым этим вводом. Типы используются в основном для активации фильтра. Тип сохраняется как часть самого события, поэтому вы также можете использовать его для поиска в веб-интерфейсе. –

+5

Ну, похоже, что именно Беном на самом деле является новым способом сделать это. Когда я использовал значение 'type =>" значение '' в выводе, я получил следующее сообщение: «Вы используете устаревший параметр конфигурации« type », установленный в stdout. Устаревшие настройки будут продолжать работать, но планируются для удаления из logstash в будущем. Вы можете добиться такого же поведения с новыми условными выражениями, например: 'if [type] ==" sometype "{stdout {...}}'. " Я отменяю свой предыдущий комментарий. :) –

+1

Это должен быть принятый ответ. – w00t

0

Я думаю logstash не может прочитать более 2-х файлы в разделе Input. попробуйте ниже

input { 
    file { 
      type => "technical" 
      path => "/home/technical/log" 
    } 
    file { 
      type => "business" 
      path => "/home/business/log" 
    } 
file { 
      type => "business1" 
      path => "/home/business/log1" 
    } 
} 
2

Я использовал тег для нескольких входных файлов:

input { 
    file { 
     type => "java" 
     path => "/usr/aaa/logs/stdout.log" 
     codec => multiline { 
      ... 
     }, 
     tags => ["aaa"] 
    } 

    file { 
     type => "java" 
     path => "/usr/bbb/logs/stdout.log" 
     codec => multiline { 
       ... 
     } 
     tags => ["bbb"] 
    } 
} 
output { 
    stdout { 
     codec => rubydebug 
    } 
    if "aaa" in [tags] { 
     elasticsearch { 
      hosts => ["192.168.100.211:9200"] 
      index => "aaa" 
      document_type => "aaa-%{+YYYY.MM.dd}" 
     } 
    } 

    if "bbb" in [tags] { 
     elasticsearch { 
      hosts => ["192.168.100.211:9200"] 
      index => "bbb" 
      document_type => "bbb-%{+YYYY.MM.dd}" 
     } 
    } 
} 
Смежные вопросы