Logstash 读取 syslog input

Syslog是Logstash最常见的用例之一,只要日志严格遵守RFC3164标准,它就能处理得非常好。 Syslog将消息从客户端机器发送到本地文件,或者通过rsyslog发送到常规日志服务器。 为了举例子,我们从命令行中伪造一个syslog,这样你就可以最便捷地体会它的用法。

首先,我们为创建一个名为logtest.conf的简单配置文件。放在logstash执行文件同目录下即可:

input {
  tcp {
    port => 5000
    type => syslog
  }
  udp {
    port => 5000
    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 {
  stdout { codec => rubydebug }
}

运行这个新的配置:
bin/logstash -f logtest.conf
通常,客户机将连接到端口5000上的Logstash实例并发送其消息。 对于这个例子,我们只需telnet到Logstash并输入一个日志行。 打开另一个shell窗口与Logstash syslog输入进行交互,并输入以下命令:
telnet localhost 5000
复制并粘贴以下行作为样本(可以随意尝试自己编写的例子,但符合Grok过滤器,否则可能不会解析):

Dec 23 12:11:43 louis postfix/smtpd[31499]: connect from unknown[95.75.93.154]
Jun 05 08:00:00 louis named[16000]: client 199.48.164.7#64817: query (cache) 'amsterdamboothuren.com/MX/IN' denied
Jun 05 08:10:00 louis CRON[620]: (www-data) CMD (php /usr/share/cacti/site/poller.php >/dev/null 2>/var/log/cacti/poller-error.log)
Jun 05 08:05:06 louis rsyslogd: [origin software="rsyslogd" swVersion="4.2.0" x-pid="2253" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'lightweight'.

比如第四条日志的输出结果就是这个样子:


进一步地,如果想将它输出到elastic search云,将output部分改为:

output {
  elasticsearch {
    hosts => ["elastic云地址 / elastic search端口"]
    index => "logstash-%{+YYYY.MM.dd}"
    user => 用户名
    password => 密码
  }
  stdout { codec => rubydebug }
}

在Kibana中呈现收到的syslog:



然后就可以用这些数据创建图表:



进而组合成dashboard:

你可能感兴趣的:(Logstash 读取 syslog input)