Syslog
2018-12-10 11:54:53 阿炯

Syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网络中传递记录档消息的标准,常用来指涉实际的syslog 协议,或者那些提交syslog消息的应用程序或数据库。

syslog协议属于一种主从式协议:syslog发送端会发送出一个小的文字消息(小于1024位组)到syslog接收端。接收端通常名为“syslogd”、“syslog daemon”或syslog服务器。系统日志消息可以被以UDP协议或TCP协议来发送,这些数据是以明码类型被发送。不过由于SSL加密套件(例如Stunnel、sslio或sslwrap等)并非syslog协议本身的一部分,因此可以被用来通过SSL/TLS方式提供一层加密。

syslog通常被用于信息系统管理及信息安全审核,虽然它有不少缺陷,但仍获得相当多的设备及各种平台的接收端支持。因此syslog能被用来将来自许多不同类型系统的日志记录集成到集中的存储库中。 它已经是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志来追踪掌握与设备和网络有关的状况。

rsyslog 作为标准的syslog守护进程的改进版,预装在了大多数的Linux发行版中。而另一个还在坚守的是sysklogd。

Kernel and system logging daemons.

This package implements two system log daemons. The syslogd daemon is an enhanced version of the standard Berkeley utility program. This daemon is responsible for providing logging of messages received from programs and facilities on the local host as well as from remote hosts.

The klogd daemon listens to kernel message sources and is responsible for prioritizing and processing operating system messages. The klogd daemon can run as a client of syslogd or optionally as a standalone program. Klogd can now be used to decode EIP addresses if it can determine a System.map file.


syslog标准基础

当通过syslog机制来收集日志时,有3个必须要考虑到的重要事情:
1.设施层级: 监听何种类型的进程
2.严重性 (优先) 级别: 收集何种级别的日志消息
3.目标: 发送或记录日志消息到何处

现在我们更加深入地了解一下配置是如何定义的。

设施层级定义了一种用来对内部系统进程进行分类的方法,linux中的一些常见的设施包括:

    auth: 身份验证相关的消息(登录时)
    cron: 进程或应用调度相关的消息
    daemon: 守护进程相关的消息(内部服务器)
    kernel: 内核相关的消息
    mail: 内部邮件服务器相关的消息
    syslog: syslog 守护进程本身相关的消息
    lpr: 打印服务相关的消息
    local0 - local7: 用户自定义的消息 (local7 通常被Cisco 和 Windows 服务器 使用)

严重性(优先)级别有固定的标准缩写和指代的值,其中的数字7具有最高的级别,这些级别包含了:

    emerg: Emergency(紧急)- 0
    alert: Alerts (报警)- 1
    crit: Critical (关键)- 2
    err: Errors (错误)- 3
    warn: Warnings (警告)- 4
    notice: Notification (通知)- 5
    info: Information (消息)- 6
    debug: Debugging (调试)- 7

最后,目标语句会让一个syslog客户端来执行以下三个任务之一:
1.保存日志消息到一个本地文件;
2.通过TCP/UDP将消息路由到远程的syslog服务器中;
3.将其发送到一个标准输出中,例如控制台。

syslog服务

syslog服务进程有两个,它们分别是:syslogd(系统,非内核产生的日志)和klogd(专门记录内核产生的日志),在上文有所提及。

日志滚动(日志切割):所谓的滚动是指历史信息所保存的日志,如messages文件日志会越来越大等到了某一段时间,会把messages文件重新命名为messages.1,系统并重新创建messages文件,所以又叫做日志滚动。

系统自带的日志切割程序logrotate

配置文件

/etc/syslog.conf使用facility.level action的方式,而facility.level为选择条件,它本身是两个字段,之间用一个小数点分割,前一个字段是一个服务,后一个字段是一个优先级。选择条件其实是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置上允许出现一个以上的选择条件,但是必须使用分号隔开。而action字段所表示的活动具有许多灵活性,特别是我们可以使用管道来使得syslogd生成后处理信息。

通常facility指的是syslog可以检测的功能,其中kern指的是内核信息,它通过klogd来传送,而user是用户进程,而mail是邮件,而daemon是后台进程,而authpriv是授权信息,而syslog是系统日志,而lpr是打印信息,而new是新闻组信息,而uucp则是由uucp产生的信息,而cron则是计划和任务信息,而mark则是由syslog内部功能用于生成时间戳。而local0-7与自定义程序使用,比如使用local5表示ssh功能,而*表示出了mark之外的所有功能。

其中level指的是syslog的优先级,其中emerg或者panic表示系统不可用,而alert表示需要立即被修改的条件,而crit表示阻止某些工具或者子系统功能实现的错误条件,err表示阻止工具或者某些子系统部分功能实现的错误条件,而warning是警告消息,而notice则是普通消息,而info则是通知性消息。

syslog的守护程序是由/etc/rc.d/init.d/syslog脚本被调用启动的,缺省不使用选项。如果将要使用一个日志服务器,必须调用syslogd -r,缺省情况下syslog不接受来自远程系统的消息。当指定了-r选项后,syslogd会监听从514端口上进来的udp消息包。

如果还希望日志服务器能够传送日志消息,则可以使用-h标识。缺省syslogd将忽略使其从一个远程系统传送日志消息到另一个系统的/etc/syslog.conf输入项。对配置文件的修改需要重启syslogd程序才会生效。

/etc/syslog.conf 文件按照如下格式进行配置

facility.level    action

说明:facility.level为选择条件,本身分为两个字段,之间用一个小数点(.)分隔。action和facility.level之间使用TAB隔开。

facility 消息类型,指定 syslog 功能,主要包括:

kern     内核信息,首先通过 klogd 传递;
user     用户进程;
mail     邮件;
daemon   后台进程;
authpriv 授权信息;
syslog   系统日志;
lpr      打印信息;
news     新闻组信息;
uucp     由uucp生成的信息
cron     计划和任务信息。
mark     syslog 内部功能用于生成时间戳
local0----local7   与自定义程序使用,例如使用 local5 做为 ssh 功能

*    通配符代表除了 mark 以外的所有功能

level 消息级别,指定syslog优先级,主要包括:

emerg 或 panic   该系统不可用(最紧急消息)
alert            需要立即被修改的条件(紧急消息)
crit             阻止某些工具或子系统功能实现的错误条件(重要消息)
err              阻止工具或某些子系统部分功能实现的错误条件(出错消息)
warning          预警信息(警告消息)
notice           具有重要性的普通条件(普通但重要的消息)
info             提供信息的消息(通知性消息)
debug            不包含函数条件或问题的其他信息(调试级-信息量最多)
none             没有重要级,通常用于排错(不记录任何日志消息)
*                所有级别,除了none

action 动作域,主要包括:
/var/log/lastlog : 记录每个使用者最近登入系统的时间。
/var/run/utmp : 记录每个使用者签入系统的时间, who, users, finger 等指令会查这个档案。
/var/log/wtmp : 记录每个使用者签入及签出的时间, last 这个指令会查这个档案. 这个档案也记录 shutdown 及 reboot 的动作。
/var/log/secure : 登录系统的信息。
/var/log/maillog : 记录 sendmail 及 pop 等相关讯息。
/var/log/cron : 记录 crontab 的相关讯息,定时器的信息。
/var/log/dmesg : /bin/dmesg 会将这个档案显示出来, 它是开机时的画面讯息。
/var/log/xferlog : 记录那些位址来 ftp 拿取那些档案。
/var/log/messages : 系统大部份的讯息皆记录在此, 包括 login, check password , failed login, ftp, su 等。


最新版本:1.5


项目主页:http://www.infodrom.org/projects/sysklogd/index.php