2013-11-21 2 views
4

나는로 스타 슈트와 신축성있는 검색에 매우 익숙하다. 나는 elasticsearch와 플랫 파일 모두에서 로그 파일을 저장하려고합니다. 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

참고로, 당신은 logstash 이벤트에 대한 The life of logstash event를 공부할 수 있습니다.

출력 작업자 모델은 현재 단일 스레드입니다. 출력은 설정 파일에 정의 된 순서대로 이벤트를 수신합니다.

그러나 출력물은 이벤트를 게시하기 전에 일시적으로 버퍼링하기로 결정할 수 있습니다. 예 : 출력은 2 개 또는 3 개의 이벤트를 버퍼링 한 다음 파일에 기록합니다.