rsyslog机制很强大,可以汇聚分散的日志到一台日志服务器上,方便查看和调试。安装起来非常简单:


shell> cd /etc/yum.repos.d/
shell> wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
shell> yum install rsyslog

centos6.5默认还是rsyslog7.x的版本,这里给出的是安装官方最新的版本。

在此记录下rsyslog配置imrelp/omrelp时的诡异问题,期间走了不少弯路,给大家参考。关于rsyslog的中文文档大多大同小异,且很多都过时了,请大家注意下,最好还是直接看英文的,虽然很多,但是能省去很多麻烦。中文的就大概看看原理就好了。


但是,按照官方给出的omrelp的转发机制,配置后无法收到日志:

#  cat  /etc/redhat-release

  CentOS release 6.5 (Final)

在此版本,在这些repo下:

[root@publisher-14 rsyslog]# ll /etc/yum.repos.d/
总用量 52
-rw-r--r--. 1 root root  833 6月  16 17:23 atomic.repo
-rw-r--r--. 1 root root  833 6月  16 16:53 atomic.repo.rpmsave
-rw-r--r--. 1 root root 1926 12月  1 2013 CentOS-Base.repo
-rw-r--r--. 1 root root  638 12月  1 2013 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630 12月  1 2013 CentOS-Media.repo
-rw-r--r--. 1 root root 4528 12月  1 2013 CentOS-Vault.repo
-rw-r--r--. 1 root root 4528 6月  16 16:53 CentOS-Vault.repo.rpmsave
-rw-r--r--. 1 root root  165 6月  16 16:53 haodf.repo
-rw-r--r--. 1 root root 1250 1月  23 06:03 puppetlabs.repo
-rw-r--r--. 1 root root  397 6月  16 16:53 puppet.repo
-rw-r--r--. 1 root root  227 6月  25 18:36 rsyslog.repo


yum upgrade(更新系统全部软件)后,发现rsyslog无法进行relp转发。

client上的/etc/rsyslog.conf:


1. module(load="imuxsock") # provides support for local system logging (e.g. via logger command)  
2. module(load="imklog") # provides kernel logging support (previously done by rklogd)
3. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
4. $IncludeConfig /etc/rsyslog.d/*.conf
5.
6. *.info;mail.none;authpriv.none;cron.none /var/log/messages
7. authpriv.* /var/log/secure
8. mail.* /var/log/maillog
9. cron.* /var/log/cron
10. *.emerg :omusrmsg:*
11. uucp,news.crit /var/log/spooler
12. local7.* /var/log/boot.log
13.
14. $WorkDirectory /var/lib/rsyslog # where to place spool files
15. $ActionQueueFileName fwdRule1 # unique name prefix for spool files
16. $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
17. $ActionQueueSaveOnShutdown on # save messages to disk on shutdown
18. $ActionQueueType LinkedList # run asynchronously
19. $ActionResumeRetryCount -1 # infinite retries if host is down
20.
21. $ModLoad omrelp
22. local1.* :omrelp:192.168.1.104:40888

server上的/etc/rsyslog.conf:

1. module(load="imuxsock") # provides support for local system logging (e.g. via logger command)  
2. module(load="imklog") # provides kernel logging support (previously done by rklogd)
3.
4. module(load="imrelp")
5. input(type="imrelp" port=“40888")
6.
7. $umask 0000
8. $DirCreateMode 0750
9. $FileCreateMode 0750
10.
11. $template MySelf, "%fromhost-ip% %$now% %timereported:12:23:date-rfc3339% %pri-text% %msg%\n"
12. $template DynaFile, "/home/avatar/logs/remote/%syslogtag:F,58:1%/%$YEAR%-%$MONTH%-%$DAY%.log"
13.
14. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
15.
16. $IncludeConfig /etc/rsyslog.d/*.conf
17.
18. local1.* -?DynaFile;MySelf
19.
20. *.info;mail.none;authpriv.none;cron.none /var/log/messages
21. authpriv.* /var/log/secure
22. mail.* /var/log/maillog
23. cron.* /var/log/cron
24. *.emerg :omusrmsg:*
25. uucp,news.crit /var/log/spooler
26. local7.* /var/log/boot.log


分别重启后,测试:#  

logger -p local1.info -t t/a “a3”

server端没有任何反应。



尝试监听client端口: #tcpdump -i eth1(网卡名)  port 40888  , 查看client机,没有40888的转发;


其中eth1是网卡的名字,如何查看网卡的名字如下所示:


 vim   /etc/sysconfig/network-scripts/ifcfg-eno 将里面的NAME项就是网卡的名字

期间在google被墙的恶劣环境下,走各种代理,查资料,走了各种弯路,看了前人讨论的各种maillist,被一句话提醒:strafe is very helpful in finding the problem.


#  ps -ef | grep rsyslog

strace居然给忘了,直接来:strace -tt   -fp RSYSLOG的进程号 -o strace.log,结果中类似于:

connect(6, {sa_family=AF_INET, sin_port=htons(XXXX), sin_addr=inet_addr(“192.168.X.X")}, 16) = -1 EACCES (Permission denied)

说明端口转发失败了。



顺着

EACCES (Permission denied)继续查:

http://help.papertrailapp.com/kb/configuration/troubleshooting-remote-syslog-reachability

  • 安装:yum install policycoreutils-python;
  • semanage port --list 列出了当前允许的所有端口及协议,grep 40888,当然没有了;
  • semanage port -a -t syslogd_port_t -p tcp 40888 (允许使用40888端口号)
  • semanage port —list | grep 40888,可以看到syslogd_port_t tcp 40888 已经有了;
  • /sbin/service rsyslog restart
  • logger -p local1.info -t t/a “a3”  #就可以成功了。


另外关于rsyslog的安全问题,可以参考:​http://wiki.rsyslog.com/index.php/Security

简单原理介绍:http://huoding.com/2014/05/09/347

参考级别:http://wiki.gentoo.org/wiki/Rsyslog