Linux之syslog日志服务详解(一)

1. syslog概述
Syslog[1]常被称为系统日志或系统记录,系统日志通过Syslog进程记录系统的有关事件,也可以记录应用程序运作事件。通过适当配置,还可以实现运行Syslog协议的机器之间的通信。

(1)syslog协议标准

Syslog协议[2]是一种用来在互联网协议(TCP/IP)的网络中传递记录档讯息的标准,属于一种主从式协议:syslog发送端发送一条文字信息到syslog接收端。具体协议如图1所示:

syslog

图1 syslog协议标准

参考资料
[1][2]
百度百科词条“syslog”: https://baike.baidu.com/item/syslog/2802901?fr=aladdin#reference-[1]-1614723-wrap

(2)syslog消息格式

如图1所示,syslog消息主要分为Priority、Head以及Message三个部分,其中Priority是由两个部分组成的——Facility、Level。

Facility表明该日志消息是由谁产生的,是内核kern?还是用户user?又或是邮件mail?不同的facility对应不同的代号,可通过man 3 syslog查看:

Level表明该日志消息的重要程度,是导致系统不能正常使用了的紧急级别emerg?还是需要被及时处理的警告级别alert?又或仅仅是需要调试的debug级别的信息?同样可通过man 3 syslog查看:

Facility和level分别定义了不同的代号,其各自的宏定义可见/usr/include/sys/syslog.h头文件,它们两者的组合构成了Priority头的值。而该priority的值也恰恰是syslog函数的第一个参数的值。

(3)syslog API

Linux C中提供了一套系统日志写入的接口,主要涉及三个函数openlog, syslog, closelog。如下所示:

  • 功能:打开一个syslog连接
  • 参数:
    • ident指定的字符串会放入到相应的消息日志中;
    • option有如下可选项:
    • facility有若干可选项,前面已经介绍过。
  • 返回值:空。

  • 功能: 产生一条日志消息以特定的规则分发出去。
  • 参数:
    • priority 优先级,由facility和level的或运算组成;
    • format 格式化输出,类似于printf函数中的format参数。
  • 返回值:空

  • 功能:关闭用来写日志记录的文件描述符。
  • 参数:无
  • 返回值:空

(4)示例

编译、运行:

查看日志:

其中,
Feb  8 01:06:10是日志记录的时间;
localhost是主机名;
syslog_test 是openlog函数的第一个参数指定的字符串;
[4877] 是openlog第二个参数指定了LOG_PID的结果;
The pid of syslog_test=4877 则是syslog函数指定的日志消息内容了。

该条日志输出到了/var/log/message文件内,其实输出路径以及各种facility和level都是可以通过配置文件进行相应的设置的,我们后面再说。

2. rsyslog概述

早期的syslog日志服务对应的是syslogd守护进程,而目前很多linux发行版本已经使用rsyslog服务替换了syslog服务预装在linux系统中了,相应的守护进程就变成了rsyslogd。

(1)rsyslog

对于rsyslog的历史,可参考rsyslog官网:http://www.rsyslog.com/doc/master/index.html

(2)rsyslog配置文件

首先来看一下/etc/rsyslog.conf配置文件:
(我机器上安装的是rsyslog 4.6.2,目前官网已经更新到了v8.32.0了,所以我的配置文件是旧式的语法格式,低版本的一大缺点是很多rsyslog的新特性无法使用,其他的都还OK。)

其中,配置文件主要分为以下四块内容:MODULES、GLOBAL DIRECTIVES、RULES以及forwarding rule。

1)MODULE:加载一些模块,语法是$ModLoad 模块名(旧式语法,新旧语法是兼容的,新式语法可以参考下方的官网链接)。
此处还可以设置syslog服务是以UDP还是TCP进行接收,相应的去掉前面的注释即可,例如上面的配置文件中指定了514端口,以UDP进行接收日志消息。

2)GLOBAL DIRECTIVES:全局指令的设置。

3)RULES:规则,该项设置主要是围绕着前面介绍的facility、level来进行配置的,首先,我们知道产生的日志记录信息的源头会有很多,比如有kernel内核、user用户、mail邮件、daemon守护进程、authorization安全/授权、syslog系统日志、line-priter打印子系统、news新闻组件子系统、UUCP子系统、cron计划任务进程、ftp守护进程等。
而每个消息源头产生的消息也都有轻重缓急之分,有的消息很重要必须记录,有的消息可能并不重要不需要记录。因此,对各消息源产生的何种级别的消息进行记录,以及记录到哪里就有了如下的配置格式:

4)forwarding rule:设置转发规则,如上述配置文件倒数第二行:

注:若用UDP传输,则将@@改为@即可。

rsyslogd的配置文件提供了很多丰富的配置功能,比如上述配置文件的第50行:
-/var/log/maillog
文件路径的前缀-表示你可以避免日志的同步写入,某些时候对提升系统的性能有很大的帮助。

配置文件其他相关内容,详情可见:http://www.rsyslog.com/doc/v8-stable/configuration/index.html

3. 其他

这里主要介绍了syslog协议以及rsyslog的一般使用方法,下一篇将要介绍配置文件中的另一个重要的功能——rsyslog模板。

 

《Linux之syslog日志服务详解(一)》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注