linux日志syslog知识总结
来源:互联网 发布:金庸群侠前传内功数据 编辑:程序博客网 时间:2024/06/04 18:05
介绍
syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。
接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。
常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或Level)、时间、主机名或IP、进程名、进程ID和正文。
1.工作流程
inux日记系统由系统日志监控程序syslogd和内核日志监控程序klogd组成。
消息:通过UNIX套接字发送给syslogd
内核消息:由klogd读取/proc/kmsg文件,将读取的内容发送给syslogd
远程消息:使用UDP 514端口
2.syslog的配置文件syslog.conf
a.基本语法
[消息类型(规则)] [处理方案(日记文件)]
b.消息类型
由消息来源和优先级构成,中间点号连接。
消息来源(facility):
kern 内核产生的信息
user 用户进程
daemon 系统守护进程
mail 电子邮件系统
auth 与安全权限相关的命令(login, su, getty等)
lpr 打印机
news 新闻组信息
uucp uucp程序
cron cron守护进程
wtmp 一个用户每次登录和退出时间的永久记录
authpriv 授权信息
mark
ftp ftp文件传输信息
优先级(priority):
emerg 最高的紧急程度状态
alert 紧急状态
crit 重要信息
warning 警告
err 临界状态
notice 不是错误信息,但可能需要处理
info 一般性消息
debug 调试级信息
none 不记录任何日志信息
c.处理方案
一般为文件路径,可以是设备文件、普通文件或远程机器,如/dev/console,/var/log/messages,@192.168.1.100
d.syslog.conf内容格式
facility.priority action
facility可以为facility1,facility2等多个由逗号分隔,或者*
priority可以为*或priority,所有优先级大于或等于priority被发送
facility.priority可以为多个,用分号隔开。如:*.info;mail.none;authpriv.none;cron.none
action可以为设备文件、一般文件或远程主机,其中远程消息会发送远程主机syslogd上,
以逗号分隔的用户列表,*表示向所有登录用户发送信息。
通配符:
* : 用于facility,表示所有facility;用于priority,表示所有priority(与debug效果一致);用于action,表示向所有用户发送信息
= : 只发送本优先级的日志信息
! : 记录所有日志(不包含本优先级)
3.syslogd守护进程
a.启动和关闭syslogd服务
service syslog start/stop/restart
更改/etc/syslog.conf配置文件后,需要重启服务后生效。
b.支持远程接收日志信息
如果将要使用一个日志服务器,必须调用syslogd -r。
缺省情况下syslogd不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。
c.支持日志传递
如果还希望日志服务器能传送日志信息,可以使用-h标志。
缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的syslogd。
4.log文件规范
完整的syslog消息由3部分组成,分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分,而HEADER可能没有
如:<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
其中“<30>”是PRI部分,“Oct 9 22:33:20 hlfedora”是HEADER部分,“auditd[1787]: The audit daemon is exiting.”是MSG部分。
a.PRI
PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity),这个数字低3位表示Severity,其它高位表示Facility
Facility的定义如下,可以看出来syslog的Facility是早期为Unix操作系统定义的,不过它预留了User(1),Local0~7 (16~23)给其他程序使用:
Numerical Facility
Code
0 kernel messages
1 user-level messages
2 mail system
3 system daemons
4 security/authorization messages (note 1)
5 messages generated internally by syslogd
6 line printer subsystem
7 network news subsystem
8 UUCP subsystem
9 clock daemon (note 2)
10 security/authorization messages (note 1)
11 FTP daemon
12 NTP subsystem
13 log audit (note 1)
14 log alert (note 1)
15 clock daemon (note 2)
16 local use 0 (local0)
17 local use 1 (local1)
18 local use 2 (local2)
19 local use 3 (local3)
20 local use 4 (local4)
21 local use 5 (local5)
22 local use 6 (local6)
23 local use 7 (local7)
Severity的定义如下:
Numerical Severity
Code
0 Emergency: system is unusable
1 Alert: action must be taken immediately
2 Critical: critical conditions
3 Error: error conditions
4 Warning: warning conditions
5 Notice: normal but significant condition
6 Informational: informational messages
7 Debug: debug-level messages
b.HEADER
HEADER部分包括两个字段,时间和主机名(或IP)。
时间紧跟在PRI后面,中间没有空格,格式必须是“Mmm dd hh:mm:ss”,不包括年份。
“日”的数字如果是1~9,前面会补一个空格(也就是月份后面有两个空格),而“小时”、“分”、“秒”则在前面补“0”。
月份取值包括:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
时间后边跟一个空格,然后是主机名或者IP地址,主机名不得包括域名部分。
HEADER部分后面跟一个空格,然后是MSG部分。
有些syslog中没有HEADER部分。这个时候MSG部分紧跟在PRI后面,中间没有空格。
c.MSG
MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的。
在前面的例子中,“auditd[1787]”是TAG部分,包含了进程名称和进程PID。PID可以没有,这个时候中括号也是没有的。由LOG_PID指定的。
TAG后面用一个冒号隔开Content部分,这部分的内容是应用程序自定义的。
5.syslog API使用
void openlog(char *ident, int option, int facility);
此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。
ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。
option一般是下列选项值取“与”运算(如“LOG_CONS | LOG_PID”)的结果:
LOG_CONS:如果送到system logger时发生问题,直接写入系统终端;
LOG_NDELAY:立即开启连接,通常连接是在第一次写入消息时才打开的;
LOG_ODELAY: 在第一次写入消息时才打开的;(default)
LOG_PERROR:将消息也同时送到stderr设备;
LOG_PID:将进程PID含入所有消息中。
facility指明记录日志的程序的类型,它主要具有如下几类日志类型:
LOG_AUTH :安全/授权消息
LOG_AUTHPRIV:安全/授权消息(private)
LOG_CRON:时间守护进程(cron和at)专用
LOG_DAEMON:其它系统守护进程
LOG_KERN:核心消息
LOG_LOCAL0到LOG_LOCAL7:系统保留
LOG_LPR:printer子系统
LOG_MAIL:mail子系统
LOG_NEWS:USENET新闻子系统
LOG_SYSLOG:syslogd进程内部所产生的消息
LOG_USER:一般使用者缺省使用消息(default)
LOG_UUCP:UUCP子系统
LOG_FTP:FTP子系统使用
调用openlog是可选择的。通过调用openlog,可以指定ident参数。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。
调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。
void syslog(int priority, char *format, ...);
打开连接后,随便可以调用syslog函数写日志。
priority,它是由severity level和facility组成的(如LOG_USER|LOG_DEBUG)。
severity level,消息的重要级别,它主要包括:
LOG_EMERG:紧急状况
LOG_ALERT:高优先级问题,比如说数据库崩溃等,必须要立即采取反应行动
LOG_CRIT:重要状况发生,比如硬件故障
LOG_ERR:错误发生
LOG_WARNING:警告发生
LOG_NOTICE:一般状况,需要引起注意
LOG_INFO:信息状况
LOG_DEBUG:调试消息
format,与printf的第一个参数类似,增加了%m可以直接打印errno对应的信息。
在实际使用中,如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。
void closelog(void);
虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数打开日志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。
6.远程syslog服务配置
a.服务端配置
修改/etc/sysconfig/syslog 文件:
# vi /etc/sysconfig/syslog
将SYSLOGD_OPTIONS="-m 0" 修改成:SYSLOGD_OPTIONS="-r -m 0"
-r 表示启用记录远程主机的日志。
b.客户端配置
修改/etc/syslog.conf文件
# vi /etc/syslog.conf
authpriv.* @192.168.0.1 表示将本机的登录日志记录到192.168.0.1这台服务器上。
要记录其它类型的日志类似
c.重启服务
修改配置文件后必须重启服务才能生效。
#/etc/init.d/syslog restart
或
#service syslog restart
syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。
接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。
常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或Level)、时间、主机名或IP、进程名、进程ID和正文。
1.工作流程
inux日记系统由系统日志监控程序syslogd和内核日志监控程序klogd组成。
消息:通过UNIX套接字发送给syslogd
内核消息:由klogd读取/proc/kmsg文件,将读取的内容发送给syslogd
远程消息:使用UDP 514端口
2.syslog的配置文件syslog.conf
a.基本语法
[消息类型(规则)] [处理方案(日记文件)]
b.消息类型
由消息来源和优先级构成,中间点号连接。
消息来源(facility):
kern 内核产生的信息
user 用户进程
daemon 系统守护进程
mail 电子邮件系统
auth 与安全权限相关的命令(login, su, getty等)
lpr 打印机
news 新闻组信息
uucp uucp程序
cron cron守护进程
wtmp 一个用户每次登录和退出时间的永久记录
authpriv 授权信息
mark
ftp ftp文件传输信息
优先级(priority):
emerg 最高的紧急程度状态
alert 紧急状态
crit 重要信息
warning 警告
err 临界状态
notice 不是错误信息,但可能需要处理
info 一般性消息
debug 调试级信息
none 不记录任何日志信息
c.处理方案
一般为文件路径,可以是设备文件、普通文件或远程机器,如/dev/console,/var/log/messages,@192.168.1.100
d.syslog.conf内容格式
facility.priority action
facility可以为facility1,facility2等多个由逗号分隔,或者*
priority可以为*或priority,所有优先级大于或等于priority被发送
facility.priority可以为多个,用分号隔开。如:*.info;mail.none;authpriv.none;cron.none
action可以为设备文件、一般文件或远程主机,其中远程消息会发送远程主机syslogd上,
以逗号分隔的用户列表,*表示向所有登录用户发送信息。
通配符:
* : 用于facility,表示所有facility;用于priority,表示所有priority(与debug效果一致);用于action,表示向所有用户发送信息
= : 只发送本优先级的日志信息
! : 记录所有日志(不包含本优先级)
3.syslogd守护进程
a.启动和关闭syslogd服务
service syslog start/stop/restart
更改/etc/syslog.conf配置文件后,需要重启服务后生效。
b.支持远程接收日志信息
如果将要使用一个日志服务器,必须调用syslogd -r。
缺省情况下syslogd不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。
c.支持日志传递
如果还希望日志服务器能传送日志信息,可以使用-h标志。
缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的syslogd。
4.log文件规范
完整的syslog消息由3部分组成,分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分,而HEADER可能没有
如:<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
其中“<30>”是PRI部分,“Oct 9 22:33:20 hlfedora”是HEADER部分,“auditd[1787]: The audit daemon is exiting.”是MSG部分。
a.PRI
PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity),这个数字低3位表示Severity,其它高位表示Facility
Facility的定义如下,可以看出来syslog的Facility是早期为Unix操作系统定义的,不过它预留了User(1),Local0~7 (16~23)给其他程序使用:
Numerical Facility
Code
0 kernel messages
1 user-level messages
2 mail system
3 system daemons
4 security/authorization messages (note 1)
5 messages generated internally by syslogd
6 line printer subsystem
7 network news subsystem
8 UUCP subsystem
9 clock daemon (note 2)
10 security/authorization messages (note 1)
11 FTP daemon
12 NTP subsystem
13 log audit (note 1)
14 log alert (note 1)
15 clock daemon (note 2)
16 local use 0 (local0)
17 local use 1 (local1)
18 local use 2 (local2)
19 local use 3 (local3)
20 local use 4 (local4)
21 local use 5 (local5)
22 local use 6 (local6)
23 local use 7 (local7)
Severity的定义如下:
Numerical Severity
Code
0 Emergency: system is unusable
1 Alert: action must be taken immediately
2 Critical: critical conditions
3 Error: error conditions
4 Warning: warning conditions
5 Notice: normal but significant condition
6 Informational: informational messages
7 Debug: debug-level messages
b.HEADER
HEADER部分包括两个字段,时间和主机名(或IP)。
时间紧跟在PRI后面,中间没有空格,格式必须是“Mmm dd hh:mm:ss”,不包括年份。
“日”的数字如果是1~9,前面会补一个空格(也就是月份后面有两个空格),而“小时”、“分”、“秒”则在前面补“0”。
月份取值包括:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
时间后边跟一个空格,然后是主机名或者IP地址,主机名不得包括域名部分。
HEADER部分后面跟一个空格,然后是MSG部分。
有些syslog中没有HEADER部分。这个时候MSG部分紧跟在PRI后面,中间没有空格。
c.MSG
MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的。
在前面的例子中,“auditd[1787]”是TAG部分,包含了进程名称和进程PID。PID可以没有,这个时候中括号也是没有的。由LOG_PID指定的。
TAG后面用一个冒号隔开Content部分,这部分的内容是应用程序自定义的。
5.syslog API使用
void openlog(char *ident, int option, int facility);
此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。
ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。
option一般是下列选项值取“与”运算(如“LOG_CONS | LOG_PID”)的结果:
LOG_CONS:如果送到system logger时发生问题,直接写入系统终端;
LOG_NDELAY:立即开启连接,通常连接是在第一次写入消息时才打开的;
LOG_ODELAY: 在第一次写入消息时才打开的;(default)
LOG_PERROR:将消息也同时送到stderr设备;
LOG_PID:将进程PID含入所有消息中。
facility指明记录日志的程序的类型,它主要具有如下几类日志类型:
LOG_AUTH :安全/授权消息
LOG_AUTHPRIV:安全/授权消息(private)
LOG_CRON:时间守护进程(cron和at)专用
LOG_DAEMON:其它系统守护进程
LOG_KERN:核心消息
LOG_LOCAL0到LOG_LOCAL7:系统保留
LOG_LPR:printer子系统
LOG_MAIL:mail子系统
LOG_NEWS:USENET新闻子系统
LOG_SYSLOG:syslogd进程内部所产生的消息
LOG_USER:一般使用者缺省使用消息(default)
LOG_UUCP:UUCP子系统
LOG_FTP:FTP子系统使用
调用openlog是可选择的。通过调用openlog,可以指定ident参数。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。
调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。
void syslog(int priority, char *format, ...);
打开连接后,随便可以调用syslog函数写日志。
priority,它是由severity level和facility组成的(如LOG_USER|LOG_DEBUG)。
severity level,消息的重要级别,它主要包括:
LOG_EMERG:紧急状况
LOG_ALERT:高优先级问题,比如说数据库崩溃等,必须要立即采取反应行动
LOG_CRIT:重要状况发生,比如硬件故障
LOG_ERR:错误发生
LOG_WARNING:警告发生
LOG_NOTICE:一般状况,需要引起注意
LOG_INFO:信息状况
LOG_DEBUG:调试消息
format,与printf的第一个参数类似,增加了%m可以直接打印errno对应的信息。
在实际使用中,如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。
void closelog(void);
虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数打开日志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。
6.远程syslog服务配置
a.服务端配置
修改/etc/sysconfig/syslog 文件:
# vi /etc/sysconfig/syslog
将SYSLOGD_OPTIONS="-m 0" 修改成:SYSLOGD_OPTIONS="-r -m 0"
-r 表示启用记录远程主机的日志。
b.客户端配置
修改/etc/syslog.conf文件
# vi /etc/syslog.conf
authpriv.* @192.168.0.1 表示将本机的登录日志记录到192.168.0.1这台服务器上。
要记录其它类型的日志类似
c.重启服务
修改配置文件后必须重启服务才能生效。
#/etc/init.d/syslog restart
或
#service syslog restart
- linux日志syslog知识总结
- Linux syslog日志服务器
- linux syslog日志服务
- linux syslog日志服务
- linux syslog自定义日志
- linux 系统日志syslog
- linux日志系统syslog
- linux syslog日志
- Linux syslog (linux系统日志)
- Linux syslog日志监控服务器
- 配置linux syslog日志服务器
- linux syslog日志的使用
- Linux系统日志 -- syslog函数
- linux系统日志syslog 简介
- Linux syslog日志系统详解
- 用LINUX+SYSLOG-NG+PHP-SYSLOG-NG搭建日志服务器
- linux系统klogd与syslog相关知识
- Linux下syslog日志函数使用
- Jquery keyup not working on IOS
- jQuery的DataTables插件的使用方法
- android应用隐藏图标
- android登录Web以及登录保持,cookie管理相关
- 求助:dedecms 分类信息调用{dede:arclistsg }按点击排序失效
- linux日志syslog知识总结
- Java线程讲解很详细的博客
- 用source函数代替繁冗的R语言打包过程
- Android设备中实现Orientation Sensor(图)兼谈陀螺仪
- ffserver.conf
- Oracle控制语句(if , loop , while , for)
- 经典论文翻译导读之《Dremel: Interactive Analysis of WebScale Datasets》
- RedHat RHEL 6.1安装gcc的方法
- svn commit冲突常识