2014-05-16 346 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只是時間戳後列出。然而,所有這些消息在Elasticsearch/Kibana中都顯示爲來自日誌主機(paoli)。

一旦我可以找出真正的名字,我打算給這些消息添加標籤,這樣我就可以做更多的事情了。

任何幫助在這裏將不勝感激。

+0

你可以添加你當前的logstash配置嗎?或者至少是相關的部分? –

+0

嗨,我基本上指向logstash在/var/log/rsyslog/**/*.log。它工作得很好,我只想看到日誌來自日誌所屬的實際機器,而不是日誌主機。 – Jeremy

+0

你需要解析你的消息。例如,從消息中獲取FQDN。你可以給日誌格式,以便我們可以討論如何解析它。 –

回答

0

我得到了這個工作。不知何故,我錯過了我需要兩個logstash實例,一個用於提供redis,另一個用於讀取redis。

在這個堆棧上的每篇文章/教程似乎很快就過時了,所以我不知道這是新的還是我錯過的東西。