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: