syslog-ng 学习
- 摘要:http://luyongxin88.blog.163.com/blog/static/925580720112275183903/ 因为工作的需要,涉及到了syslog-ng。现在看来,在外包公司工作,也就这么两点的好处了,一是拿的钱稍微多点,二就是能接触一下新的东西。当然,想要深入了解,公司是不会提供这样的机会了,还是自己看看吧。以下都是一些网络上学习来了有关syslog-ng的知识。整理一下。以前认为网络上都有,自己转载了没必要,但某天突然领悟到:自己看了,和
-
http://luyongxin88.blog.163.com/blog/static/925580720112275183903/
因为工作的需要,涉及到了syslog-ng。现在看来,在外包公司工作,也就这么两点的好处了,一是拿的钱稍微多点,二就是能接触一下新的东西。当然,想要深入了解,公司是不会提供这样的机会了,还是自己看看吧。以下都是一些网络上学习来了有关syslog-ng的知识。整理一下。以前认为网络上都有,自己转载了没必要,但某天突然领悟到:自己看了,和自己记录了不一样,我们不能说书本上都有了上课就不做笔记了。再有就是放在自己的地方,查询起来也方便,不用东找西找的,会显得系统一些。
--------------------
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 <identifier> { source-driver(params);source-driver(params);... };消息源驱动器 source driver,用来收集日志消息,和系统的syslogd交换信息,记录日志
实例:
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设备,从其中读取日志消息
过滤规则,过滤器
在syslog-ng 中,过滤器执行日志路由,决定日志是否满足通过的条件filter <identifier> {expression;}; 表达式中可以包含逻辑操作符 and or not
例一个搜索来自blurp主机,包含deny的日志消息的过滤指令
filter f_blurp_deny { host("blurp") and match("deny"); };下面是syslog-ng的过滤函数:
facility() 根据设备选择日志消息
level()或者priority() 根据优先级选择日志消息
program() 日志消息的程序名是否匹配一个正则表达式
host() 日志消息的主机名是否和一个正则表达式匹配
match() 对日志消息的内容进行正则匹配
filter() 调用另一条过滤规则并判断它的值日志消息的目的
destination 指定日志消息的去处。目的可以包括一些目的驱动器,指定日志的派发方向。
destination <identifier> { destination-driver(params);estination-driver(params);.....};下面是syslog-ng支持的日志消息目的驱动器:
file 日志消息写到指定的文件
fifo,pipe 把日志消息写到指定的管道
unix-stream 把日志消息发送到给定的SOCK_STREAM类型的UNIX套接字(Linux)
unix-dgram 把日志消息发送到给定的SOCK_DGRAM类型的UNIX套接字(BSD)
udp 把日志消息发送到指定主机的UDP端口
TCP 把日志消息发送到指定主机的TCP端口
usertty 如果用户登录,把日志发送到指定的终端
program fork并启动指定的程序,把日志消息发送到这个进程的标准输出。
两个日志消息源驱动器比较相似,都打开AF_UNIX类型的套接字,在套接字上监听日志消息。unix-stream()主要用在Linux,使用 SOCK_STREAM参数,是面向连接的,不会造成日志消息的丢失;unix-dgram()用在BSD系统上,使用SOCK_DGRAM参数,是无连 接的,如果系统过载,会造成日志消息丢失。日志路径
前面的章节中,我们学习了如何定义消息源、过滤器和消息目的。现在我们要把这些结合起来形成一条完整的指令。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。其语法如下:
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(选择条件)。
可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:
引用
* - 所有日志信息
= - 等于,即仅包含本优先级的日志信息
! - 不等于,本优先级日志信息除外
以上是
- 的内容,更多
-
的内容,请您使用右上方搜索功能获取相关信息。