我有一大堆服务器,它们将系统日志消息发送到中央rsyslog服务器,后者又将它们发送给logstash。我遇到的问题是发送服务器正在将机器名称作为“localhost”或其内部eth0 nic的10.0.0.0/8 ip地址发送,这不是一个大问题,因为rsyslog服务器正在拆分日志文件在源IP上,它将它们记录到他们的服务器remote-server-1.2.3.4.log文件中。当rsyslog服务器(使用*.* @logstash
)发送到logstash然后没有源IP信息时,会发生此问题。
是否可以让rsyslog更改源计算机名称/ IP,使其包含源IP地址,以便logstash可以聚合在正确的源IP上?
这是我的logstash配置
input {
udp {
port => 514
type => syslog
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch {
hosts => "esearch1:443"
ssl => "true"
manage_template => false
}}
由于
答案 0 :(得分:0)
rsyslog中无法重写字段。
但您可以轻松获取生成消息的系统IP。
rsyslog获取的每条消息都有一个属性fromhost-ip
。您可以在logstash配置中使用它。
也许像是,
match => { "message" => "%{SYSLOG-IP:syslog_fromhost-ip} %{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
在此处详细了解http://www.rsyslog.com/doc/master/configuration/properties.html#message-properties