Rsyslogd vs Systemd-journald

  • 作者: 雪山肥鱼
  • 时间: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-C/S.png

具体可以查看rsyslogd的相关配置

vim /etc/rsyslog.d/21-cloudinit.conf
rsyslogd.config.png
  • auth, authprive.* 无论什么级别都写到/var/log/auth.log中
  • 字符- 意味着先写到buffer再统一写到syslog 中。
  • 写道网络中的某台服务器中


    图片.png

一个@代表UDP
两个@ 代表TCP

服务打开 提供 UDP/TCP 接收日志的服务


图片.png

简单代码实例:

#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 
图片.png

图片.png
  1. 当systemd-journald 存在时,其会接管 原来由rsyslogd管理的日志文件。
  2. sytemd 所来起的进程的输出,printf都会重定向dup2到 /run/systemd/journal/stdout.
    同时被sytemd journald 截获
  3. systemd journald 中也有和 syslog相同的API, sd_journal_sendv() 会把内容写道
    /run/systemd/journal/socket,从而被systemd-journald 截获。

随后systemd-journald 如何处理截获的信息,则依靠

/etc/systemd/journald.conf

是如何配置的了。
我所接触的到环境,都是 storage auto,并没有配置相关属性。


systemd-journald.conf.png
  • systemd-journald 的存放区
    /var/log/journal
  • rsyslogd 的存放区
    /var/log/syslog/

system-journald的日志 也会根据选项是否将内容转发给syslog
ForwardToSyslog =yes
这个选项也是默认打开的。

图片.png

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.

日志对于多进程的调试也是非常关键的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 笔者在日常的开发和使用中,经常需要写大量的本地服务并且进行管理,例如定时执行,定时查错,异步排队以及数据库的备份归...
    kivinsae阅读 8,036评论 0 1
  • 日志介绍rsyslog日志管理journalctlMySQL管理日志 一、日志介绍 (一)日志的基本概念 日志:将...
    哈喽别样阅读 3,655评论 0 0
  • 日志介绍 日志 记录历史事件:时间,地点,人物,事件 日志级别:事件的关键性程度,Loglevel 系统日志服务 ...
    Ben0606阅读 5,718评论 0 2
  • 了解日志文件是很重要的事情。日志文件可以记录系统在什么时间、哪台主机、哪个服务、出现了什么信息等。可以在系统出现问...
    Zhang21阅读 10,764评论 0 5
  • 系统巡检脚本:Version 2016.08.09 ############################ 系统...
    NamasAmitabha阅读 5,225评论 0 0

友情链接更多精彩内容