2016-11-08 07:25:39
一、syslog协议介绍
1、介绍
在Unix类操作系统上,rsyslog广泛应用于系统日志。rsyslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收rsyslog的服务器等。由于rsyslog简单而灵活的特性,rsyslog不再仅限于 Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用rsyslog。
rsyslog是syslog的多线程增强版,现在Fedora、Ubuntu,、rhel6、centos6默认的日志系统都是rsyslog了。rsyslog主要用来收集系统产生的各种日志,日志默认放在/var/log/目录下。先简单看看配置文件,然后给几个实例也算是对rsyslog的一个更深入的理解吧。
1、配置文件解析
主配置文件/etc/rsyslog.conf配置文件中有很多内容, 但最主要的是指定需要记录哪些服务和需要记录服务什么等级的信息。
格式是:日志设备[连接符号]日志级别 日志处理方式(action)
a)、日志设备(可以理解为日志类型):
auth --pam产生的日志 authpriv --ssh,ftp等登录信息的验证信息cron --定时任务 kern --内核 lpr --打印 mail --邮件mark(syslog) --rsyslog服务内部的信息,时间标识 news --新闻组user --用户程序产生的相关信息 uucp --unix to unix copy, unix主机之间相关的通讯 local 1~7 --自定义的日志设备 |
debug --有调式信息的,日志信息最多 info --一般信息的日志,最常用notice --最具有重要性的普通条件的信息 warning --警告级别 err --错误级别,阻止某个功能或者模块不能正常工作的信息 crit --严重级别,阻止整个系统或者整个软件不能正常工作的信息 alert --需要立刻修改的信息 emerg --内核崩溃等严重信息none --什么都不记录 |
.xxx 表示小于等于xxx级别的日志信息 .=xxx 表示等于xxx级别的日志信息.!xxx 表示在xxx之外的等级的日志信息 .* 所有等级的日志信息 |
1. 记录到普通文件或设备文件:: /var/log/file.log #将日志记录到文件/var/log/file.log /dev/pts/0 #将日志记录在设备/dev/pts/0 2. 转发到远程的日志服务器 @192.168.0.1 #使用UDP协议转发到192.168.0.1的514(默认)端口 @@192.168.0.1:10514 #使用TCP协议转发到192.168.0.1的10514端口,这是指定非默认端口10514,tcp的默认端口也是514 3. 发送给用户(需要在线才能收到)::root #发给root用户 root,kadefor,up01 #使用,号分隔多个用户* #*号表示所有在线用户 4. 忽略,丢弃::~ # 忽略丢弃日志 5. 执行脚本:: ^/tmp/test.sh #^号后跟可执行脚本或程序的绝对路径,这个可以用来触发报警动作。 |
mail.* -/var/log/maillog |
*.* @192.168.186.134 |
# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 |
*.* @192.168.186.134 |
[root@syndic02 ~]# /etc/init.d/rsyslog restart 关闭系统日志记录器: [确定] 启动系统日志记录器: [确定] [root@syndic02 ~]# |
[root@saltstack ~]# tailf /var/log/messages ... ... ... Nov 13 14:32:50 syndic02 kernel: Kernel logging (proc) stopped. Nov 13 14:32:50 syndic02 rsyslogd: [origin software="rsyslogd"swVersion="5.8.10" x-pid="1641" x-info="http://www.rsyslog.com"] exiting on signal 15. Nov 13 14:32:50 syndic02 kernel: imklog 5.8.10, log source = /proc/kmsg started. Nov 13 14:32:50 syndic02 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1657" x-info="http://www.rsyslog.com"] start |
local0.info /var/log/test.log |
[root@syndic02 ~]# logger -p local0.info "hello world" [root@syndic02 ~]# logger -t "This is Test" -p local0.info "hello world" [root@syndic02 ~]# logger -t "This is Test" -p local0.warning "hello world"[root@syndic02 ~]# logger -t "This is Test" -p local0.debug "hello world" [root@syndic02 ~]# |
[root@syndic02 ~]# tailf /var/log/test.log Nov 13 14:41:27 syndic02 root: hello world Nov 13 14:42:22 syndic02 This is Test: hello world Nov 13 14:42:56 syndic02 This is Test: hello world |
二、syslog函数
Linux C中提供一套系统日记写入接口,包括三个函数:openlog,syslog和closelog。
调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。
#include //头文件
void openlog (charident, int option, int facility);
void closelog();
void syslog(int priority, charformat,……);
priority参数的格式(severity level|facility code)
示例:
LOG_ERR|LOG_USER
severity level:
Priority Level Description
LOG_EMERG An emergency situation
LOG_ALERT High-priority problem, such as database corruption
LOG_CRIT Critical error, such as hardware failure
LOG_ERR Errors
LOG_WARNING Warning
LOG_NOTICE Special conditions requiring attention
LOG_INFO Informational messages
LOG_DEBUG Debug messages
facility value(转自syslog.h头文件):
#define LOG_KERN (0<<3)
#define LOG_USER (1<<3)
#define LOG_MAIL (2<<3)
#define LOG_DAEMON (3<<3)
#define LOG_AUTH (4<<3)
#define LOG_SYSLOG (5<<3)
#define LOG_LPR (6<<3)
#define LOG_NEWS (7<<3)
#define LOG_UUCP (8<<3)
#define LOG_CRON (9<<3)
#define LOG_AUTHPRIV (10<<3)
#define LOG_FTP (11<<3)
三、linux rsyslog配置
1)、syslog日志服务:
1、守护进程:syslog
2、端口:514
3、配置文件:/etc/rsyslog.conf (centos6起/etc/syslog.conf不再有!而是/etc/rsyslog.conf代替!)
4、常见日志文件:
/var/log/dmesg 内核引导信息日志
/var/log/message 标准系统错误信息日志
/var/log/maillog 邮件系统信息日志
/var/log/cron 计划任务日志
/var/log/secure 安全信息日志
2)、 配置文件:
syslog配置文件如下
[root@server ~]# vim /etc/syslog.conf
Log all kernel messages to the console.
Logging much else clutters up the screen.
#kern.* /dev/console
Log anything (except mail) of level info or higher.
Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
The authpriv file has restricted access.
authpriv.* /var/log/secure
Log all the mail messages in one place.
mail.* -/var/log/maillog
Log cron stuff
cron.* /var/log/cron
Everybody gets emergency messages
*.emerg *
Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
Save boot messages also to boot.log
local7.*
配置文件中每行表示一个项目,格式为:facility.level action
由两个部分组成:
第一部分:选择条件(可以有一个或者多个条件),分为两个字段。
第二部分:操作动作;
1、选择条件
选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)隔开。
常见facility:
kern 内核信息;
user 用户进程信息;
mail 电子邮件相关信息;
daemon 后台进程相关信息;
authpriv 包括特权信息如用户名在内的认证活动;
cron 计划任务信息;
syslog 系统日志信息
lpr 打印服务相关信息。
news 新闻组服务器信息
uucp uucp 生成的信息
local0—-local7 本地用户信息
例如:
52 # Log anything (except mail) of level info or higher.
53 # Don’t log private authentication messages!
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
2、重要级:
重要级是选择条件的第二个字段,它代表消息的紧急程度。
按严重程度由低到高排序:
debug 不包含函数条件或问题的其他信息
info 提供信息的消息
none 没有重要级,通常用于排错
notice 具有重要性的普通条件
warning 预警信息
err 阻止工具或某些子系统部分功能实现的错误条件
crit 阻止某些工具或子系统功能实现的错误条件
alert 需要立即被修改的条件
emerg 该系统不可用
不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、 “err”、“crit”、“alert”和“emerg”都包括在内。
3、操作动作
日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。
syslog 主要支持以下活动:
file 指定文件的绝对路径
terminal 或 prin 完全的串行或并行设备标志符
@host(@IP地址) 远程的日志服务器
3)、 搭建Linux日志服务器:
1、编辑/etc/sysconfig/syslog文件,让服务器能够接受客户端传来的数据:
在“SYSLOGD_OPTIONS”行上加“-r”选项以允许接受外来日志消息。
[root@client ~]# vim /etc/sysconfig/syslog
Options to syslogd
-m 0 disables ‘MARK’ messages.
-r enables logging from remote machines
-x disables DNS lookups on messages recieved with -r
See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
Options to klogd
-2 prints all kernel oops messages twice; once for klogd to decode, and
once for processing with ‘ksymoops’
-x disables all klogd processing of oops messages entirely
See klogd(8) for more details
KLOGD_OPTIONS="-x"
SYSLOG_UMASK=077
set this to a umask value to use for all log files as in umask(1).
By default, all permissions are removed for “group” and “other”.
2、重新启动syslog守护进程。
[root@client ~]# service rsyslog restart
关闭内核日志记录器: [确定]
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]
启动内核日志记录器: [确定]
[root@client ~]#
3、关闭iptables
[root@client ~]# service iptable stop
查看防火墙状态
service iptable status
四、配置各客户端:
1、配置/etc/syslog.conf
修改客户机/etc/syslog.conf文件,在有关配置行的操作动作部分用一个“@”字符指向日志服务器
[root@client ~]# vim /etc/syslog.conf
Log all kernel messages to the console.
Logging much else clutters up the screen.
#kern.* /dev/console
. @10.64.165.210
The authpriv file has restricted access.
authpriv.* /var/log/secure
……下面省略
另外如果配置了DNS域名的话可以使用域名。
2、重启客户端syslog使设置生效。
检测成果:
下图是我们在客户端重启iptables服务后在服务端看到的日志情况:
[root@client ~]# cat /var/log/messages |tail
Nov 30 16:44:29 10.64.165.200 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Nov 30 16:44:33 10.64.165.200 kernel: Removing netfilter NETLINK layer.
Nov 30 16:44:33 10.64.165.200 kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Nov 30 16:44:33 10.64.165.200 kernel: Netfilter messages via NETLINK v0.30.
Nov 30 16:44:33 10.64.165.200 kernel: ip_conntrack version 2.4 (4096 buckets, 32768 max) - 228 bytes per conntrack
评论 (0)