我有许多ESXi服务器将日志转发到中央日志主机。我的loghost正在运行rsyslog。这似乎一切正常。
我遇到的主要问题是Logstash将每条消息视为来自日志主机,而不是发送日志的远程ESXi服务器。
ESXi服务器的FQDN在消息中,但我真正喜欢的是它显示为来自该机器,因此我可以匹配[host]等等。
我需要的一个主要功能是能够匹配该名称并为其分配一个标记,例如服务器所在的园区。
Haven通过logstash真的遇到了一个很好的方法,我开始怀疑我是否需要在我的rsyslog.conf中进行此更改。
为清晰起见(简化),所有消息都显示为
datestamp loghost" esxiserver.domain.com消息"
我想要的是
datestamp esxiserver.domain.com" message"
这是我的配置,目前非常简单,只是想让它发挥作用。
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中,来自loghost(paoli)。
一旦我可以查出实际名称,我计划对邮件进行标记,以便我可以使用它们做更多的事情。
我们将不胜感激。
答案 0 :(得分:0)
我得到了这个工作。不知怎的,我错过了我需要两个logstash实例,一个用于redis,另一个用于读取redis。
这个堆栈上的每个帖子/教程似乎都很快就过时了,所以我不知道这是新的还是我错过的东西。