2014-05-16 3 views
0

다수의 ESXi 서버 전달 로그가 중앙 로그 호스트에 있습니다. 내 로그 호스트가 rsyslog를 실행 중입니다. 이것은 모두 잘 작동하는 것 같습니다.Logstash, 원격 서버 이름 받기

주요 문제는 Logstash가 모든 메시지가 로그를 보낸 원격 ESXi 서버가 아닌 로그 호스트에서 오는 것으로 간주한다는 것입니다.

ESXi 서버의 FQDN은 메시지에 있지만 실제로는 내가 원하는 것은 해당 컴퓨터에서 나오는 것으로 나타나기 때문에 [호스트]와 일치시킬 수 있습니다.

필자가 필요로하는 주요 기능은 해당 이름을 검색하고 해당 서버가 위치한 캠퍼스와 같은 태그를 지정할 수있게하는 것입니다.

대신 logstash를 사용하여이 작업을 수행하는 좋은 방법을 찾지 못했고 대신 내 rsyslog.conf에서이 변경을 수행해야하는지 궁금해졌습니다. 명확성을 위해

(간체), 모든 메시지는

날짜 스탬프 로그 호스트 "esxiserver.domain.com 메시지"내가 좋아하는 것이 무엇

날짜 스탬프 esxiserver.domain.com "메시지가 그대로 표시 "

여기가 제 설정입니다. 단지 작동 시키려고하는 순간 간단합니다.

input { 
    file { 
      type => "syslog" 
      path => [ "/var/log/rsyslog/**/*.log" ] 
      start_position => "beginning" 
    } 
} 

filter { 
    if [type] == "syslog" { 
    grok { 
     overwrite => "message" 
     match => { 
     "message" => "^(?:<%{POSINT:syslog_pri}>)?%{SYSLOGTIMESTAMP:timestamp} % 
{@source_host} %{IPORHOST:host} (?:%{PROG:program}(?:\[%{POSINT:pid}\])?:)?%{GR 
EEDYDATA:message}" 
     } 
    } 
    syslog_pri { } 
    date { 
     match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601" ] 

    } 
    } 
} 

filter { 
    multiline { 
    pattern => "^\s" 
    what => "previous" 
} 
} 

filter { 
    multiline { 
      pattern => "\\$" 
      what => "next" 
    } 
} 

output { 
     stdout { 
            codec => rubydebug 
           } 
    #elasticsearch { 
    #  cluster => "paoli" 
    #} 
} 

예 출력은 :

"syslog_severity_code" => 5, 
"syslog_facility_code" => 1, 
    "syslog_facility" => "user-level", 
    "syslog_severity" => "notice" 
} 
{ 
      "message" => "May 18 00:48:27 lexington.amr.ch2m.com Vpxa: [FF98F780 verbose  'Default'] Set internal stats for VM: 7 (vpxa VM id), 444 (vpxd VM id). Is FT primary? 0", 
      "@version" => "1", 
      "@timestamp" => "2014-05-27T20:48:35.492Z", 
       "type" => "syslog", 
       "host" => "paoli", 
       "path" => "/var/log/rsyslog/lexington.amr.ch2m.com/Vpxa.log", 
       "tags" => [ 
    [0] "_grokparsefailure" 
], 

당신이 메시지에서 볼 수 있듯이

, 실제 기계의 FQDN은 바로 타임 스탬프 후 나열됩니다. 그러나 이러한 모든 메시지는 로그 호스트 (paoli)에서 오는 것으로 Elasticsearch/Kibana에 표시됩니다.

실제 이름을 grep 할 수있게되면 메시지에 태그를 추가하여 더 많은 작업을 수행 할 계획입니다.

여기에서 도움을 받으실 수 있습니다.

+0

현재 logstash 구성을 추가 할 수 있습니까? 또는 적어도 관련 부분? –

+0

안녕하세요, 기본적으로 /var/log/rsyslog/**/*.log에 logstash를 지정하고 있습니다. 그것은 훌륭하게 작동합니다. 단지 로그가 로그 호스트가 아닌 실제 시스템에서 오는 것으로보고 싶습니다. – Jeremy

+0

메시지를 구문 분석해야합니다. 예를 들어 메시지에서 FQDN을 가져옵니다. 로그 형식을 제공하여 파싱 방법을 논의 할 수 있습니까? –

답변

0

이 작업이 있습니다. 어떻게 든 나는 두 개의 logstash 인스턴스가 필요하다는 것을 놓쳤습니다. 하나는 redis로, 다른 하나는 redis에서 읽을 수 있습니다.

이 스택의 모든 게시물/튜토리얼은 빨리 구식이 된 것 같아서 이것이 새로운 것인지 아니면 내가 놓친 것인지 알 수 없습니다.