LINUX保存了系统中所发生事件的详细记录,这些记录称作日志文件或消息文件。可以查阅日志文件来确定系统当前状态、观察入侵者踪迹、寻找某特定程序(或事件)相关的数据。
 
守护进程并不拥有控制终端,因此无法将进程运行信息输出显示,因此回向相应的日志文件中写入记录。Linux内核本身也会将一些系统信息写入相应的日志文件。
 
 
1.1 日志消息
 
       日志消息是对程序内正在发生的事件的一个描述,通过日志消息可以报告正常的信息(比如,某用户已经登录系统)、也可以发出告警信息(比如,某用户进行了未成功的登录尝试)、或报告严重错误指明某程序即将崩溃。
 
 
1.2 日志文件或消息文件的格式
 
日志文件中的每条消息一次包含如下一些内容:
(1)    事件发生的日期和时间,通常称为时间戳
(2)    事件发生原系统的主机名或计算机名
(3)    产生日志消息的程序名
(4)    消息文本自身,可能会超过一行
 
 
 
2 syslogdklogd守护进程
 
syslogdklogd(监控linux内核提交的消息)守护进程负责记录、发送系统或工具产生的信息,二者的配置文件都是/etc/syslog.conf
 
每次启动Linux时,syslogdklogd这两个守护进程都会由/etc/rc.d/inid.d中的初始化脚本启动。
 
当系统内核或工具产生信息时,通过调用相关函数,将信息发送到syslogdklogd守护进程。syslogdklogd守护进程会根据/etc/syslog.conf中的配置信息,对消息的去向作出处理。
 
 
 
2.1 /etc/syslog.conf配置文件
 
2.1.1 /etc/syslog.conf文件中每行的格式
 

 
/etc/syslog.conf文件中,以#开始的行是注释文本。
 
2.1.2 选择器
 
用于标明应该记录那些消息的一组单词,由两部分组成:设备(facility)和优先级(priority)
 
当匹配了facility且优先级大于或等于/etc/syslog.conf文件指定的优先级时,该条消息才会被记录到相关的日志文件中去。
 
2.1.2.1设备(facility)
 
设备(facility),生成该消息的程序所选择的类别。如表2.1.2.1所示。
 
facility取值
说明
kern
0
内核日志信息
user
1
用户日志信息
mail
2
邮件系统日志信息
daemon
3
系统守护进程日志信息
auth
4
安全管理日志信息
syslog
5
syslogd守护进程的日志信息
lpr
6
打印服务日志信息
news
7
新闻组服务日志信息
uucp
8
uucp系统日志信息
cron
9
守护进程cron的日志信息
authpriv
10
私有的安全管理日志信息
ftp
11
ftp守护进程
 
12~15
系统保留
local0~local7
16~23
保留给系统本地使用
2.1.2.2 facility字段
 
 
2.1.2.2优先级(priority)
 
优先级(priority),表明该消息所代表事件的严重程度。如表2.1.2.2所示。
 
priority取值
说明
emerge
0
发生严重事件,并有导致系统崩溃的潜在危险
alert
1
严重错误消息,会导致程序关闭并可能影响其他程序
crit
2
错误消息,可能会导致程序关闭的事件
err
3
程序中存在错误的通告
warning
4
程序中存在潜在问题的警告信息
notice
5
程序运行中产生了值得注意的事件
info
6
关于程序当前状态的报告信息
debug
7
编程人员或测试人员使用的调试信息
2.1.2.2 消息优先级
注意:在表2.1.2.2中,值越小级别越高。
 
2.1.3 动作
 
       动作或处理方案,确定了syslogdklogd守护进程将日志消息发送到什么地方去。
 
(1)    普通文件:使用文件的绝对路径来指明日志文件所在的位置,例如:/var/log/cron
(2)    终端设备:终端可以是/dev/tty0~/dev/tty6,也可以为/dev/console
(3)    用户列表:例如动作为“root hackbutter”,将消息写入到用户roothackbutter的计算机屏幕上。
(4)    远程主机:将信息发往网络中的其他主机的syslogd守护进程,格式为“@hostname”。
 
2.1.4 配置文件的语法说明
 
(1)    *用作设备或优先级时,可以匹配所有的设备或优先级。
(2)    *用作动作时,将消息发送给所有的登录用户。
(3)    多个选择器可在同一行中,并使用分号分隔开。
(4)    可以同时指定多个设备或优先级,之间用逗号分开。如,uucp,news.crit
(5)    关键字none用作优先级时,会屏蔽所有来自指定设备的消息。
(6)    通过使用相同的选择器和不同的动作,同一消息可以记录到多个位置。
(7)    syslog.conf文件中后面的配置行不会覆盖前面的配置行,每一行指定的动作都独立的运作。
 
修改syslog.conf配置文件之后,必须通知syslogdklogd重新读取该配置文件,这样改动才会生效。有三种通知方法:
 
(1)    使用service命令:
# service  syslog     restart
syslog服务可以同时重启这两个日志守护进程。
 
(2)    向日志守护进程发送重启信号:
很多linux守护进程都把自身的PID存储在文件中,可以在kill命令中向日志守护进程发送SIGHUP信号,守护进程收到这样的信号后会重新读取自身的配置文件。
展示syslogdPID#cat    /var/run/syslogd.pid
展示klogdPID  #cat    /var/run/klogd.pid
 
# kill  –HUP  ` cat  /var/run/syslogd.pid `
# kill  –HUP  ` cat  /var/run/klogd.pid `
 
(3)    使用killall命令向日志守护进程发送信号:
#killall  -HUP  syslogd
#killall  -HUP  klogd
 
 
 
3 程序添加日志功能的流程
 
openlog() → syslog() → closelog()
 
openlogsyslogcloselog的函数原型:
 

 
3.1 openlog函数
 
       openlog函数用于打开系统日志链接,只有在打开连接后,才能使用syslog函数向日志文件中添加日志信息。
 
       ident参数:标识信息的来源,其指向的字符信息会被固定地添加在每行日志的前面。
 
       option参数:用于指定openlog函数和接下来调用的syslog函数的控制标志,如下表所示。
参数
说明
LOG_CONS
如果将信息发送给syslogd守护进程时发生错误,直接将相关信息输出到终端
LOG_NDELAY
立即打开与系统日志的连接,通常情况下,只有在产生第一条日志信息的情况下才会打开与日志系统的连接
LOG_NOWAIT
在记录日志信息时,不等待可能的子进程的创建
LOG_ODELAY
类似于LOG_NDELAY参数,与系统日志的连接只有在syslog函数调用时才会创建
LOG_PERROR
将信息写入日志的同时,将信息发送到标准错误输出
LOG_PID
每条日志信息中都包括进程号
openlog函数中的option取值表
facality参数
Syslog.conf中对应的facality取值
LOG_KERN
kern
LOG_USER
user
LOG_MAIL
mail
LOG_DEAMON
daemon
LOG_AUTH
auth
LOG_SYSLOG
syslog
LOG_LPR
lpr
LOG_NEWS
news
LOG_UUCP
uucp
LOG_CRON
cron
LOG_AUTHPRIV
authpriv
LOG_FTP
ftp
LOG_LOCAL0~ LOG_LOCAL7
local0~local7
penlog函数中的facality取值表
 
 
3.2 syslog函数
 
syslog函数的过程就是写入日志的过程。
 
priority参数:表示消息的级别,如下表所示。
 
priority参数
syslog.conf中对应的level取值
LOG_EMERG
emerge
LOG_ALERT
alert
LOG_CRIT
crit
LOG_ERR
err
LOG_WARNING
warning
LOG_NOTICE
notice
LOG_INFO
info
LOG_DEBUG
debug
syslog函数参数priority取值表
 
第二个参数,为消息格式,之后是格式对应的参数,类似于printf函数。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()