Как обрабатывать несколько гетерогенных входов с помощью Logstash?
Скажем, у вас есть 2 очень разных типа журналов, таких как технические и бизнес-журналы, и вы хотите:
- необработанные технические журналы должны быть направлены к серверу graylog2 с использованием вывода
gelf
,
- Журналы бизнес-процессов json сохраняются в кластере elasticsearch, используя выделенный вывод
elasticsearch_http
.
Я знаю, что, например, с Syslog-NG
, файл конфигурации позволяет определять несколько разных входов, которые затем могут обрабатываться отдельно перед отправкой; что Logstash
кажется неспособным сделать. Даже если один экземпляр может быть инициирован с двумя конкретными файлами конфигурации, все журналы берут один и тот же канал и применяются одни и те же процессы...
Должен ли я запускать столько экземпляров, сколько у меня есть разные типы журналов?
Ответы
Ответ 1
Должен ли я запускать столько экземпляров, сколько у меня есть разные типы журналов?
Нет! Вы можете запускать только один экземпляр для обработки различных типов журналов.
В файле конфигурации logstash вы можете указать каждый вход с помощью type.
Затем в фильтре вы можете использовать если для отличной обработки,
а также на выходе вы можете использовать вывод "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
}
}
Надеюсь, это может вам помочь:)
Ответ 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}"
}
}
}
Ответ 3
Я думаю, что logstash не может читать более двух файлов в разделе "Enter". попробуйте ниже
input {
file {
type => "technical"
path => "/home/technical/log"
}
file {
type => "business"
path => "/home/business/log"
}
file {
type => "business1"
path => "/home/business/log1"
}
}