2013-11-21 2 views
4

Я очень новичок в поиске и поиске эластичности. Я пытаюсь хранить файлы журналов как в elasticsearch, так и в плоском файле. Я знаю, что logstash поддерживает оба вывода. Но обрабатываются ли они одновременно? или это делается периодически через работу?может logstash процесс нескольких выход одновременно?

ответ

5

Да, вы можете сделать это, например, путем пометки и клонирования ваших входов командой «add_tag» в конфигурации вашего отправителя.

input 
{ 
    tcp  { type => "linux" port => "50000" codec => plain { charset => "US-ASCII" } } 
    tcp  { type => "apache_access" port => "50001" codec => plain { charset => "US-ASCII" } } 
    tcp  { type => "apache_error" port => "50002" codec => plain { charset => "US-ASCII" } } 
    tcp  { type => "windows_security" port => "50003" codec => plain { charset => "US-ASCII" } } 
    tcp  { type => "windows_application" port => "50004" codec => plain { charset => "US-ASCII" } } 
    tcp  { type => "windows_system" port => "50005" codec => plain { charset => "US-ASCII" } } 
udp { type => "network_equipment" port => "514" codec => plain { charset => "US-ASCII" } } 
udp { type => "firewalls" port => "50006" codec => plain } 
} 
filter 
{ 
    grok { match => [ "host", "%{IPORHOST:ipaddr}(:%{NUMBER})?" ] } 
    mutate { replace => [ "fqdn", "%{ipaddr}" ] } 
    dns  { reverse => [ "fqdn", "fqdn" ] action => "replace" } 
    if [type] == "linux"     { clone { clones => "linux.log" add_tag => "savetofile" } } 
    if [type] == "apache_access"   { clone { clones => "apache_access.log" add_tag => "savetofile" } } 
    if [type] == "apache_error"    { clone { clones => "apache_error.log" add_tag => "savetofile" } } 
    if [type] == "windows_security"   { clone { clones => "windows_security.log" add_tag => "savetofile" } } 
    if [type] == "windows_application"  { clone { clones => "windows_application.log" add_tag => "savetofile" } } 
    if [type] == "windows_system"   { clone { clones => "windows_system.log" add_tag => "savetofile" } } 
    if [type] == "network_equipment"  { clone { clones => "network_%{fqdn}.log" add_tag => "savetofile" } } 
if [type] == "firewalls"  { clone { clones => "firewalls.log" add_tag => "savetofile" } } 
} 
output 
{ 
    #stdout { debug => true } 
    #stdout { codec => rubydebug } 
    redis { host => "1.1.1.1" data_type => "list" key => "logstash" } 
} 

А на главной инстанции logstash вы могли бы сделать это:

input { 
    redis { 
    host => "1.1.1.1" 
    data_type => "list" 
    key => "logstash" 
    type=> "redis-input" 
    # We use the 'json' codec here because we expect to read json events from redis. 
    codec => json 
      } 
    } 
    output 
    { 
     if "savetofile" in [tags] { 
      file { 
       path => [ "/logs/%{fqdn}/%{type}" ] message_format => "%{message}" 
      } 
     } 
     else { elasticsearch { host => "2.2.2.2" } 
    } 
} 
+1

В вашем примере logstash выводит указанные журналы «savetofile» на диск и другие журналы в elasticsearch. Возможно ли одновременно выводить одни и те же журналы на оба выхода? –

0

FYI, Вы можете изучить The life of logstash event о событии logstash.

Модель рабочего рабочего в настоящее время является одной нитью. Выходы получат события в том порядке, в котором они определены в файле конфигурации.

Но выходы могут решить временно приостановить события до их публикации. Пример: вывод будет буферизировать 2 или 3 события, а затем просто записывать в файл.

Смежные вопросы