- 作者: 雪山肥鱼
- 时间:20210614 15:17
- 目的:rsyslogd vs systemd-journald
# rsyslogd
# rsyslogd vs system journald
rsyslogd
是CS架构,一台电脑得日志,可以送到Server上去。
Facility(类型):auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, user, uucp, syslog, local0- local7
Priority(优先级): debug, info, notice, warn, err, crit, alert, emerg

具体可以查看rsyslogd的相关配置
vim /etc/rsyslog.d/21-cloudinit.conf

- auth, authprive.* 无论什么级别都写到/var/log/auth.log中
- 字符- 意味着先写到buffer再统一写到syslog 中。
-
写道网络中的某台服务器中
图片.png
一个@代表UDP
两个@ 代表TCP
服务打开 提供 UDP/TCP 接收日志的服务

简单代码实例:
#include <syslog.h>
int main(int argc, char **argv)
{
openlog("MyLog", LOG_CONS | LOG_PID, LOG_LOCAL2);
syslog(LOG_INFO,
"This is a syslog test message generated by program '%s'\n",
argv[0]);
closelog();
return 0;
}
vim /var/log/syslog 即可查看输入
当然 如果代码里不掉syslog ,也可以将简单的输入 写道 syslog 文件中
比如
#include <stdio.h>
main()
{
printf("%s hello world %d\n", __func__);
}
./a.out | logger -i -t "mglog" -p "local3(facility).info(priority)"
当rsyslogd 与 system journald 同时存在
ps aux|grep journald


- 当systemd-journald 存在时,其会接管 原来由rsyslogd管理的日志文件。
- sytemd 所来起的进程的输出,printf都会重定向dup2到 /run/systemd/journal/stdout.
同时被sytemd journald 截获 - systemd journald 中也有和 syslog相同的API, sd_journal_sendv() 会把内容写道
/run/systemd/journal/socket,从而被systemd-journald 截获。
随后systemd-journald 如何处理截获的信息,则依靠
/etc/systemd/journald.conf
是如何配置的了。
我所接触的到环境,都是 storage auto,并没有配置相关属性。

- systemd-journald 的存放区
/var/log/journal - rsyslogd 的存放区
/var/log/syslog/
system-journald的日志 也会根据选项是否将内容转发给syslog
ForwardToSyslog =yes
这个选项也是默认打开的。

ps aux|grep journald
lsof -p xxxx
ps aux|grep rsyslogd
lsof -p yyyy
在有journald的情况下,rsyslogd 是从 /run/systemd/journal/syslog 中读取的。
cat /run/log/journal/xxxx 是看不到的。因为都是二进制,需要用特殊工具
journalctrl 用到再继续学习吧。
总结
如果有systemd 就会被systemd的 journald 接管,如果没有,则全部用 rsyslogd。
当然 如果开启了 forwrdtoSyslog, 就可以通过 unixdomain, 将内容转发给syslog.
日志对于多进程的调试也是非常关键的。
