一、说明
1.1 背景说明
syslog这个东西,最早接触是在Z公司做基线安全加固的时候有启用远程日志服务器一项,然后当时还写整理了一篇“rsyslog+loganalyzer远程日志系统搭建教程(CentOS6.8)”;这造成的结果就是一直先入为主地认为syslog就是做远程日志用的,近段时间碰到比较多syslog的问题,多加了解后发现这是一个比较大的误解。
去O公司面试的时候,被问syslog的进程叫什么配置文件在哪里,然后答守护进程是syslogd配置文件应该在/etc目录下具体名字不记得了。
过后问之前Z公司做系统集成的同事,他的回答也和我一样,然后说我应当当场反怼面试官syslog还可以做远程日志他知道吗。我当时的反应是,怼不动啊兄弟,syslog难道不是本来就是接收远程日志用的吗,似乎我的理解有点错误啊。
回头再问领导,他的回答也和我一样,然后他问你知道哪些日志过syslog哪些日志不过syslog吗。我不知道,但到此我基本知道syslog确实是先处理本地日志用的。
前段时间去T公司面试,又被问系统日志一般在/var/log目录下如果想要改变日志格式该如何操作,综合之前的认识答我没这么配置过但我推测应该是通过syslog配置文件/etc/syslog.conf。
1.2 syslog用途说明
在Z公司的时候知道了syslog,另外还知道dmsg,当时只是按部就搬看磁盘网卡等硬件问题时就用dmsg看;直到领导说内核态的日志运dmsg用户态日志过syslog(原话应该不是这样),才意识到有这么个区分关系。
现在感觉应该这么理解,syslog是一个用户态的进程,如果硬件和内核都没就绪那肯定就没到用户态进程启动这一步,那日志想过syslog也是不可能的,这时日志就发往dmsg;syslog就绪后内核的日志也可以过syslog。
syslog是一个可以记录日志的服务进程,在确认这一事实后还有两个疑问,“过syslog”到底是什么意思为什么日志一定要过syslog?如果我想自己的打印的日志“过syslog”应当怎么操作?
我们平时打印日志一般都是使用print或者logging打印,而对于一个系统会有成百上千个应用,如果每个应用都自己print或logging一是说工作重复二是说格式很难统一三是说日志配置散落在各地很难管理,此时我们何不专门启动一个服务专门管理日志,其他进程只管把日志发给他他来专门记录呢?这正是syslog的设计来由。回到为什么日志一定要过syslog这个问题上来,日志在技术上确实不一定要过syslog,这只是linux系统开发者的约定俗成。(nginx等应用开发者也跟着使用syslog)
至于怎么使用syslog,简单而言就是先使用openlog()打开通道,然后使用syslog()发出日志,最后使用closelog()关闭通道。我们后边再以python具体演示。
1.3 syslog配置及日志格式说明
20210831更新:rsyslog配置建议直接看“man rsyslog.conf”,还是比较清楚的
syslog基本已被rsyslog代替,相应的配置文件也就改成了/etc/rsyslog.conf。Ubuntu 16.04版本内容如下:
# /etc/rsyslog.conf Configuration file for rsyslog. # # For more information see # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html # # Default logging rules can be found in /etc/rsyslog.d/50-default.conf ################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging module(load="imklog") # provides kernel logging support #module(load="immark") # provides --MARK-- message capability # provides UDP syslog reception #module(load="imudp") #input(type="imudp" port="514") # provides TCP syslog reception #module(load="imtcp") #input(type="imtcp" port="514") # Enable non-kernel facility klog messages $KLogPermitNonKernelFacility on ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # Filter duplicated messages $RepeatedMsgReduction on # # Set the default permissions for all log files. # $FileOwner syslog $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 $PrivDropToUser syslog $PrivDropToGroup syslog # # Where to place spool and state files # $WorkDirectory /var/spool/rsyslog # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf