我想把本机的日志发到一个中央日志服务器上(rsyslog)
我先安装了rsyslog,然后在 /etc/rsyslog.conf 中加上转发规则,方便期间我设定把所有日志都转发到日志服务器上,而为了防止日志被丢失指定了用TCP来发送:
*.* @@192.168.1.9
我在 /etc/rsyslog.conf 中确定看到加载了 imuxsock 模块,但是不知道为什么用logger进行测试时中央服务器上只能看到kern日志,而看不到其他任何日志。
后来我尝试将 /etc/systemd/journald.conf中的 ForwardToSyslog 设为 yes后才在中央服务器上看到了其他日志。
整个过程我有两点疑问:
1、不是rsyslog加载了imuxsock模块后就能读取journal产生的日志吗?,为什么必须要设置 ForwardToSyslog 设为 yes后才能在中央服务器上看到了其他日志呢?
2、根据rsyslog的manual,rsyslog似乎是通过读取 /dev/log 来获取日志的,而 /dev/log 是 /run/systemd/journal/dev-log 的软应用。
但是另一方面,journald.conf 中设置 FowardToSyslog为yes后是将日志写入到 /run/systemd/journal/syslog中的,
既然写入和读取的都不是同一个文件,为什么还能够时间日志的转发呢?
离线
那不就说明是从syslog读的?
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
那不就说明是从syslog读的?
似乎是,但是如果 man rsyslogd 会看到这么一段话
/dev/log
The Unix domain socket to from where local syslog messages are
read.
这个意思,应该是说rsyslog是从 /dev/log 里读的吧
离线
http://man7.org/linux/man-pages/man5/jo … onf.5.html
这里谈到的说法是说转发到一个传统的日志守护进程,没有谈到明确的行为。例如它怎么知道咋转发,机器上压根没有这种进程的话它会做什么。没有谈到你说的这个socket的路径。你3楼说的也完全没有谈及rsyslogd从哪里读数据。
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
找到了一个链接解答了这个问题https://unix.stackexchange.com/questions/205883/understand-logging-in-linux
基本上就是说,rsyslogd已经不再监听 /dev/log 了,而是由sytemd-jounald来监听 /dev/log 然后将日志写入 /run/systemd/journal/syslog, rsyslog再通过imuxsock模块监听 /run/systemd/journal/syslog
离线