rsyslog收集本地系统和服务日志到logstash

最近做了一个项目,将Linux服务器的系统日志以及服务日志收集到elk。
期间从头学习了syslog rsyslog。
有几个比较重要的概念: facility, input module。
input module使用了imfile,功能为:将文本文件读取到rsyslog。
将所有服务软件的日志标记为service,最后使用规则匹配,之后发送到远端logstash服务器。
我使用local3作为所有服务软件的facility配置。主要是为了便于日志归集,因为默认情况下读取文件的内容会记录到本机/var/log/messages一份。
步骤如下
首先增加rsyslog主配置文件:
sed -i -e '/\/var\/log\/messages/s/^/&local3.none\;/' -e '6a\$ModLoad imfile\n' /etc/rsyslog.conf
echo "if \$programname == 'service' then @@elk.zol.com.cn" >>/etc/rsyslog.conf
添加Apache错误日志:

cat <<-"RSYSLOGEOF" >/etc/rsyslog.d/httpd.conf 
$InputFileName /var/log/httpd/error_log
$InputFileStateFile httpd_error.stat
$InputFileTag service:
$InputFileFacility local3
$InputRunFileMonitor
$InputFilePollingInterval 60
RSYSLOGEOF

重启rsyslog
service rsyslog restart

然后,如果Apache服务报错,而且已经开启日志记录到/var/log/httpd/error_log,远端kibana界面中就能搜索到。