在rsyslog中转发时是否可以重写字段?

时间:2017-08-08 19:35:43

标签: logstash rsyslog

我有一大堆服务器,它们将系统日志消息发送到中央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
}}

由于

1 个答案:

答案 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