我有許多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)。
一旦我可以找出真正的名字,我打算給這些消息添加標籤,這樣我就可以做更多的事情了。
任何幫助在這裏將不勝感激。
你可以添加你當前的logstash配置嗎?或者至少是相關的部分? –
嗨,我基本上指向logstash在/var/log/rsyslog/**/*.log。它工作得很好,我只想看到日誌來自日誌所屬的實際機器,而不是日誌主機。 – Jeremy
你需要解析你的消息。例如,從消息中獲取FQDN。你可以給日誌格式,以便我們可以討論如何解析它。 –