分类: LINUX
2011-10-12 13:31:49
--------------------
syslog-next generation 即下一代的系统日志管理工具
The
syslog-ng application is a flexible and highly scalable system logging
application that is ideal for creating centralized logging solutions.
The main features of syslog-ng are summarized below.
# 注释 :syslog-ng 应用程序是一个灵活、高扩展性的系统日志工具,主要是用于解决集中日志记录的工具。它的主要特点有 :
1、可靠的日志传输。syslog-ng 允许你发送日志到远程的日志服务器上。传输过程使用 TCP ,区别于 syslog 的 UDP ,可以确保不会丢失数据
2、通过使用 SSL/TLS 来加密日志传输过程。不过这个功能只有在 premium 版本才提供。
3、基于磁盘的缓冲。syslog-ng 可以在网络连接失效时先把日志写入硬盘,等网络连接恢复时再传输到日志服务器上,而且确保日志的顺序不会混乱。不过这个功能也是 premium 版本才提供的。
4、直接数据库访问。能够把日志直接存入数据库,以便进行搜索及配合日志分析应用程序。支持 MySQL、Oracle、PostgreSQL、SQLIife ,同样也是 premium 才支持
5、支持多种操作系统。包括 Linux、Unix、BSD、Solaris、HP-UX、AIX 等。甚至还可以通过代理和 Windows 主机进行通信
6、过滤器和归类。syslog=ng 应用程序可以根据收的喔的日志的内容进行排序、或者根据源ip、应用程序、优先级等。可以通过宏自动建立目录、文件、数据库。支持 regex 和布尔表达式,确保只转发你想要的内容
7、支持 ipv4 和 ipv6
syslog-ng在一般linux系统下的配置文件为/etc/syslog-ng/syslog-ng.conf
一般 syslog-ng 可能含有以下5个章段:
options{}
全局设置。 These can be overridden in any of the next four sections
source{}
信息来源, 来源可以是文件, 本地 sockets, 或者远程主机。
destination{}
信息目标, 可以是文件, 本地 sockets, 或者远程主机。
filter{}
过滤选项非常强大且复杂;你可以过滤日志中的任何方面,比如基础的 syslogd 快捷字段(facility names–man 5 syslog.conf 获取更多信息),log 等级,主机名,以及任何log中出现的字段或者是数字。
log{}
此段将来源 目的 过滤 都给连接起来并且告诉syslog-ng如何处理日志。
配置的主要内容为消息路径的匹配规则,这个和iptables 的规则是差不多的。
消息路径由3部分组成:
消息路径 = 日志消息源 + 过滤规则 + 消息目地
其运行过程:消息源 ---> syslog-ng --> 消息命中 --> 对应的日志目的
消息源
消息源: source |
实例: source src { unix-stream("/dev/log"); internal(); udp(ip(0.0.0.0) port(514)); }; |
identifier 是给定消息源的唯一标志 驱动器可以使用参数,参数有些是必需的,有些是可选的。必需的参数一般在前面。上面的指令中,/dev/log就是必需参数。 下面是可用的源驱动器: internal syslog-ng内部产生的消息 unix-stream 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息 unix-dgram 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息 file 打开指定的文件读取日志信息 pipe,fifo 打开指定的管道或者FIFO设备,读取日志信息 tcp 在指定的TCP端口接收日志消息 udp 在指定的UDP端口接收日志消息 sun-stream(s) 在solaris系统中,打开一个(多个)指定的STREAM设备,从其中读取日志消息 |
过滤规则,过滤器 filter |
例一个搜索来自blurp主机,包含deny的日志消息的过滤指令 |
下面是syslog-ng的过滤函数: facility() 根据设备选择日志消息 level()或者priority() 根据优先级选择日志消息 program() 日志消息的程序名是否匹配一个正则表达式 host() 日志消息的主机名是否和一个正则表达式匹配 match() 对日志消息的内容进行正则匹配 filter() 调用另一条过滤规则并判断它的值 |
日志消息的目的 destination 指定日志消息的去处。目的可以包括一些目的驱动器,指定日志的派发方向。 destination |
下面是syslog-ng支持的日志消息目的驱动器: |
日志路径
前面的章节中,我们学习了如何定义消息源、过滤器和消息目的。现在我们要把这些结合起来形成一条完整的指令。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。其语法如下:
log { source(s1); source(s2); ...
filter(f1); filter(f2); ...
destination(d1); destination(d2); ... };
实例
source s_all {< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> # message generated by Syslog-NG internal(); # standard Linux log source (this is the default place for the syslog() # function to send logs to) unix-stream("/dev/log"); # messages from the kernel file("/proc/kmsg" log_prefix("kernel: ")); # use the following line if you want to receive remote UDP logging messages # (this is equivalent to the "-r" syslogd flag) # udp(); udp(ip("0.0.0.0") port(514));
};
#===========================added by Bill ============ filter f_aqtas { facility(local7);}; filter f_aqvue { facility(local6);}; filter f_aqlyx { facility(local5);};
destination aqtas { file("/var/log/aqtas.log"); }; destination aqvue { file("/var/log/aqvue.log"); }; destination aqlyx { file("/var/log/aqlyx.log"); };
log { source(s_all); filter (f_aqtas); destination(aqtas); }; log { source(s_all); filter (f_aqvue); destination(aqvue); }; log { source(s_all); filter (f_aqlyx); destination(aqlyx); }; |
=======
以上已经将主要的syslog-ng的配置内容做了说明,还有其他一些需要了解
选项 选项可以改变syslog-ng 的行为,语法如下: options { option1(params);option(params);.... } |
以下是syslog-ng支持的参数: 名字 参数类型 描述 time_reopen() 数字 一个断开的连接重新连接之前需要等待的时间 time_reap() 数字 一个闲置的目标文件关闭之前需要等待的时间 sync_freq() 数字 在写入文件之前,可以缓冲的日志消息行数 mark_freq() 数字 目前尚未实现 log_fifo_size() 数字 输出队列的行数 chain_hostnames() yes/no 打开/关闭主机名链(用于日志转发) use_time_recvd() yes/no 使用收到日志消息的时间,不用日志消息中指定的时间 use_dns() yes/no 打开/关闭DNS查询功能。因为DNS查询无法返回会造成syslog-ng处于阻塞状态,从而造成拒绝服务攻击。为了避免这种情况的出现,应该使用防火 墙严格保护使用syslog-ng的网络节点,并确认syslog-ng使用的所有主机都是可以解析的。 use_fqdn() yes/no 使用完整的域名 gc_idle_threshold() 数字 当syslog-ng空闲时,设置其进入垃圾信息收集状态的阀值。一旦分配的对象数达到了这个数字,syslog-ng就启动垃圾信息收集状态。默认值是1000。 gc_busy_threshold() 数字 当syslog-ng忙时,设置其进入垃圾信息收集状态的阀值。一旦分配的对象数达到这个数字,syslog-ng就启动垃圾信息收集状态。默认值是3000。 |
修改完 syslog-ng 之后要重启服务:
# /etc/init.d/syslog-ng restart
测试
现在你日志一般是认证日志,所以你可以先尝试着打开一个新的登录窗口,使用su 或者是 sudo 都可以。接着检查 /var/log/auth.log 文件。在客户端上做一些操作,接着检查 /var/log/HOSTS 是否已经为远程客户端创建了新的目录。
另外一个方法是使用更加高级的 logger 命令:
# logger “this is a test”
# logger -p auth.debug “this is a test”
==================补充:20110907
1、facility facility定义日志消息的范围,其可使用的key有: 引用 auth -由 pam_pwdb 报告的认证活动。 authpriv -包括特权信息如用户名在内的认证活动 cron -与 cron 和 at 有关的计划任务信息。 daemon -与 inetd 守护进程有关的后台进程信息。 kern -内核信息,首先通过 klogd 传递。 lpr -与打印服务有关的信息。 mail -与电子邮件有关的信息 mark - syslog内部功能用于生成时间戳 news -来自新闻服务器的信息 syslog -由 syslog 生成的信息 user -由用户程序生成的信息 uucp -由 uucp 生成的信息 local0-local7 -与自定义程序使用 * 通配符代表除了 mark 以外的所有功能 除mark为内部使用外,还有security为一个旧的key定义,等同于auth,已经不再建议使用。 2、level级别 level定义消息的紧急程度。按严重程度由高到低顺序排列为: 引用 emerg -该系统不可用,等同panic alert -需要立即被修改的条件 crit -阻止某些工具或子系统功能实现的错误条件 err -阻止工具或某些子系统部分功能实现的错误条件,等同error warning -预警信息,等同warn notice -具有重要性的普通条件 info -提供信息的消息 debug -不包含函数条件或问题的其他信息 none -没有重要级,通常用于排错 * 所有级别,除了none 其中,panic、error、warn均为旧的标识符,不再建议使用。 在定义level级别的时候,需要注意两点: 引用 1)优先级是由应用程序在编程的时候已经决定的,除非修改源码再编译,否则不能改变消息的优先级; 2)低的优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。(除非使用=号定义) 3、selector选择条件 通过小数点符号“.”把facility和level连接在一起则成为selector(选择条件)。 可以使用分号“;”同时定义多个选择条件。也支持三个修饰符: 引用 * - 所有日志信息 = - 等于,即仅包含本优先级的日志信息 ! - 不等于,本优先级日志信息除外 |