博主在测试将日志发送到日志服务器的功能时遇到了rsyslog服务不可用的问题,具体来说,就是执行systemctl restart rsyslog或者 service rsyslog restart命令时,出现了标题中所述的Unit rsyslog.service is masked问题。网上查找了很多资料,都跟博主的情况不同,尝试后问题始终未得到解决。经过反复多次调测后,终于发现问题的原因,这里记录一下,希望对遇到类似问题的读者有所启发和帮助。
简单介绍一下背景。首先,调测环境是Ubuntu18.04。其次,目标是将日志发送到日志服务器。现在已经有一个Windows下的日志服务器,所以,需要做的工作时将Ubuntu里的日志发送到该服务器查看。
网上查找了一些资料,大都是讲如何将Linux配置为日志服务器的,也基本都是基于rsyslogd守护进程及其配置来做的。但博主的需求是如何将日志发送到日志服务器,而不是让Ubuntu做日志服务器,所以这些资料大都略过,然后从最简单的命令来尝试。
首先试了一下logger命令,通过-n指定服务器地址即可。
此时,server端可以看到敲入的信息
但是这种方式不够灵活,于是就查找其他方法。
最先看到的是syslogd命令。使用该命令,通过命令选项,就可以将日志发送到日志服务器。但是实际测试时,发现系统里没有这个命令,需要安装。
使用apt安装busybox版本后,syslogd命令可以用了,通过该命令可以将日志转发到日志服务器。
回过头来,博主还是想试试rsyslog,试试该服务做日志客户端。于是按照网上的资料,修改/etc/rsyslog.conf及相关配置文件后,重启该服务,测试。
重启服务时,出现了标题里的错误提示。怀疑是syslogd守护进程运行影响了rsyslogd的启动。于是kill掉syslogd,再试,问题依然存在。
查看服务状态,rsyslog前面是减号
查看进程,找不到rsyslogd进程,怀疑是不是配置文件改错了导致。将配置退回去,再试,还是不行。重启系统再试,仍然不行。
但是,重启后,观察进程,发现syslogd在运行。
这让我突然想到,可能是syslogd和rsyslogd相互冲突。而且发现系统中rsyslogd命令也找不到了,于是更加肯定是安装syslogd导致的。
为了验证这个想法,重新安装rsyslogd来看。果然,安装过程中,移除了syslogd,所以可以肯定在安装syslogd时会移除rsyslogd
安装后,发现rsyslogd回来了
rsyslog服务也回归正常了
之前的提示是exit,现在是running
之后,日志服务器端也可以看到日志了。
总结一下,目前涉及了三种方法将日志发送到日志服务器:
1 使用logger命令
2 使用syslogd守护进程
3 使用rsyslogd守护进程
目前测试,发现后两者不能共存。