zoukankan      html  css  js  c++  java
  • syslogng 消息过滤 寻找来源

    引用:http://baike.baidu.com/view/3426564.htm

    一、基础
    syslog-ng作为syslog的替代工具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能。
    系统自带版本:
    引用
    # rpm -qa|grep syslog-ng
    syslog-ng-1.6.7-1
    syslog官方网站:
    最新版本是2.0.5。
    为方便使用,暂以系统自带的版本1.6.7说明,以后再提供更新的rpm包。
    1、前提
    使用syslog-ng前,建议先详细了解syslog的概念。
    例如,什么是facitily(设备),level(等级)。可以参考这里:
    否则,后面的说明可能会有点不知所云的。
    2、使用
    若不增加其他设定,可通过下面的简单命令即可替换原syslog服务:
    # service syslog stop
    # service syslog-ng start
    3、设计原则
    syslog-ng替代syslog是基于以下的设计原则的:
    引用
    a、通过正规表达式协助,除支持原facitily/level方式,还支持内容过滤等以建立更好的消息过滤机制;
    b、支持主机链,即使日志消息经过多重网络转发,仍可找到原发出主机的信息和整个消息链;
    c、支持强大的自定义配置,并且清晰、明了。
    二、配置说明
    syslog-ng的主配置文件存放在:/etc/syslog-ng/syslog-ng.conf
    1、架构
    syslog-ng的配置基于下面的架构:
    引用
    LOG STATEMENTS『SOURCES - FILTERS -DESTINATIONS』
    消息路径 『消息源 - 过滤器 - 目的站』
    也就是说,通过定义多个消息源,把匹配上若干个过滤器的消息导向到指定的目的地,从而组成一个消息路径。
    2、消息源SOURCES
    定义格式为:
    引用
    source { sourcedriver params; sourcedriver params; ... };
    含义:
    引用
    :一个消息源的标识
    sourcedriver:消息源驱动器,可以支持若干参数,并使用分号“;”隔离多个消息源驱动器
    消息源驱动器有:
    引用
    file (filename) : 从指定的文件读取日志信息
    unix-dgram (filename) : 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息
    unix-stream (filename) : 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息
    udp ( (ip),(port) ) : 在指定的UDP端口接收日志消息
    tcp ( (ip),(port) ) : 在指定的TCP端口接收日志消息
    sun-streams (filename) : 在solaris系统中,打开一个(多个)指定的STREAM设备,从其中读取日志消息
    internal() : syslog-ng内部产生的消息
    pipe(filename),fifo(filename) : 从指定的管道或者FIFO设备,读取日志信息
    例如:
    引用
    source s_sys {
    file ("/proc/kmsg" log_prefix("kernel: "));
    unix-stream ("/dev/log");
    internal();
    # udp(ip(0.0.0.0) port(514)); #如果取消注释,则可以从udp的514端口获取消息
    };
    ※linux使用/dev/log作为SOCK_STREAM unix的套接字,BSD使用/var/run/log;
    参数需要使用括号括住。
    3、过滤器FILTERS
    定义格式为:
    引用
    filter { expression; };
    含义:
    引用
    :一个过滤器标识
    expression:表达式
    表达式支持:
    引用
    逻辑操作符:and(和)、or(或)、not(非);
    函数:可使用正规表达式描述内容
    过滤函数有:
    引用
    facility(,): 根据facility(设备)选择日志消息,使用逗号分割多个facility
    level(,): 根据level(优先级)选择日志消息,使用逗号分割多个level,或使用“..”表示一个范围
    program(regexp): 日志消息的程序名是否匹配一个正则表达式
    host(regexp): 日志消息的主机名是否和一个正则表达式匹配
    match(regexp): 对日志消息的内容进行正则匹配
    filter(): 调用另一条过滤规则并判断它的值
    例如:
    引用
    filter f_filter2 { level(info..emerg) and
    not facility(mail,authpriv,cron); };
    ※这里的level定义info,相当于syslog的.=info,并不包括更低的等级;
    若需要包括更低的等级,请使用“..”表示一个等级范围;
    另外,filter(DEFAULT),用于捕获所有没有匹配上的日志消息。filter(*)是无效的。
    4、目的地DESTINATIONS
    定义格式为:
    引用
    destination { destdriver params; destdriver params; ... ;};
    含义:
    引用
    :一个目的地的标识
    destdriver :目的地驱动器
    目的地驱动器有:
    引用
    file (filename) :把日志消息写入指定的文件
    unix-dgram (filename) :把日志消息写入指定的SOCK_DGRAM模式的unix套接字
    unix-stream (filename) :把日志消息写入指定的SOCK_STREAM模式的unix套接字
    udp (ip),(port) :把日志消息发送到指定的UDP端口
    tcp (ip),(port) :把日志消息发送到指定的TCP端口
    usertty(username) :把日志消息发送到已经登陆的指定用户终端窗口
    pipe(filename),fifo(filename) :把日志消息发送到指定的管道或者FIFO设备
    program(parm) :启动指定的程序,并把日志消息发送到该进程的标准输入
    举例:
    引用
    destination d_mesg { file("/var/log/messages"); };
    destination d_syslog { udp ("192.168.228.225" port(514)); };
    ※配合使用udp或tcp即可实现集中的日志服务器。注意,udp函数的写法上和消息源驱动器中的定义不同。
    5、消息路径LOG STATEMENTS
    定义格式为:
    引用
    log { source S1; source S2; ... filter F1; filter F2; ... destination
    D1; destination D2; ... };
    把消息源、过滤器、消息目的组合起来就形成一条完整的指令。日志路径中的成员是顺序执行的。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。
    ※同样的,每条日志消息都会经过所有的消息路径,并不是匹配后就不再往下执行的,请留意。
    三、选项参数
    除了上述的消息路径定义外,syslog-ng还可以设定一些选项参数以优化其操作。全局的选项参数,定义在配置文件的开头位置:
    引用
    options { opt1; opt2; ... };
    选项有:
    引用
    chain_hostnames(yes|no) :是否打开主机名链功能,打开后可在多网络段转发日志时有效
    long_hostnames(yes|no) :是chain_hostnames的别名,已不建议使用
    keep_hostname(yes|no) :是否保留日志消息中保存的主机名称,否时,总是使用来源主机来作重写日志的主机名
    use_dns(yes|no) :是否打开DNS查询功能,应使用防火墙保护使用syslog-ng的节点安全,并确认所有主机都是可以通过dns解释的,否则请关闭该选项。
    use_fqdn(yes|no) :是否使用完整的域名
    check_hostname(yes|no) :是否检查主机名有没有包含不合法的字符
    bad_hostname(regexp) :可通过正规表达式指定某主机的信息不被接受
    dns_cache(yes|no) :是否打开DNS缓存功能
    dns_cache_expire(n) :DNS缓存功能打开时,一个成功缓存的过期时间
    dns_cache_expire_failed(n) :DNS缓存功能打开时,一个失败缓存的过期时间
    dns_cache_size(n) :DNS缓存保留的主机名数量
    create_dirs(yes|no) :当指定的目标目录不存在时,是否创建该目录
    dir_owner(uid) :目录的UID
    dir_group(gid) :目录的GID
    dir_perm(perm) :目录的权限,使用八进制方式标注,例如0644
    owner(uid) :文件的UID
    group(gid) :文件的GID
    perm(perm) :文件的权限,同样,使用八进制方式标注
    gc_busy_threshold(n) :当syslog-ng忙时,其进入垃圾信息收集状态的时间。一旦分派的对象达到这个数字,syslog-ng就启动垃圾信息收集状态。默认值是:3000。
    gc_idle_threshold(n) :当syslog-ng空闲时,其进入垃圾信息收集状态的时间。一旦被分派的对象到达这个数字,syslog-ng就会启动垃圾信息收集状态,默认值是:100
    log_fifo_size(n) :输出队列的行数
    log_msg_size(n) :消息日志的最大值(bytes)
    mark(n) :多少时间(秒)写入两行MARK信息供参考,目前没有实现
    stats(n) :多少时间(秒)写入两行STATUS信息供,默认值是:600
    sync(n) :缓存多少行的信息再写入文件中,0为不缓存,局部参数可以覆盖该值。
    time_reap(n) :在没有消息前,到达多少秒,即关闭该文件的连接
    time_reopen(n) :对于死连接,到达多少秒,会重新连接
    use_time_recvd(yes|no) :宏产生的时间是使用接受到的时间,还是日志中记录的时间;建议使用R_的宏代替接收时间,S_的宏代替日志记录的时间,而不要依靠该值定义。
    例如:
    引用
    options { sync (0); time_reopen (10); log_fifo_size (1000); long_hostnames (off); use_dns (no); use_fqdn (no); create_dirs (no); keep_hostname (yes);};
    四、部分函数的参数syslog-ng除了有全局选项参数外,不同的函数还可以定义其参数,其中包括:1、扩展file的宏
    引用
    HOST 日志消息的源发主机名。如果日志消息穿过几个主机,并且chain_hostname()功能已经打开,就使用第一个主机名。 FACILITY :日志消息来自的日志设备 PRIOPRITY/LEVEL :日志消息的优先级 PROGRAM :发送日志消息的程序 YEAR :发送日志消息的年份,这个宏既可以指定日志消息送出的时间,也可以指定日志消息收到的时间。这由use_time_recvd()选项控制 MONTH :发送日志消息的月份 DAY :发送日志消息的日子 HOUR :小时 MIN : 分钟SEC :秒
    2、file的参数
    例如:log_file_size()、sync()、owner()、perm()等,请参考上面的全局设定
    3、tcp和upd的参数
    引用
    ip(xxx.xxx.xxx.xxx): 定义绑定的IP地址
    port(n):定义绑定的端口
    max-connections(n) : 定义最大连接数
    ※TCP基于连接方式传输,不会造成日志丢失,而UDP则不同。但因为传统的syslog基于UDP的514端口,所以,UDP方式也经常会使用到。
    另外,514也是rshell的默认端口,请注意冲突。
    举例:
    引用
    destination d_mail { file("/var/log/maillog" sync(10)); };
    这里定义的sync(10)会覆盖全局配置,表示若写入的日志数量达到10,才写入maillog文件。
    五、关于垃圾收集状态
    当满足一定的条件,syslog-ng即会进入垃圾收集状态,而暂时不再接受日志信息。这时,会造成非连接的传输协议的日志丢失(例如UDP)。通过设置下面两个选项可以控制:
    引用
    gc_idle_threshold(n) :
    意思是,一旦被分派的对象到达这个数字,并且当syslog-ng空闲时(100微秒内没有日志消息到达)。此时,syslog-ng就会启动垃圾信息收集状态。
    已分配的对象可通过-v命令行参数指定其的最小值。而syslog-ng这个值应该比较小,但比已分配的对象要大即可。
    例如,空闲状态,syslog-ng会显示:
    引用
    Nov 13 16:35:35 syslogng syslog-ng[4510]: STATS: dropped 0
    Nov 13 16:45:35 syslogng syslog-ng[4510]: STATS: dropped 0
    当忙时:
    引用
    gc_busy_threshold(n) :当syslog-ng忙时,一旦分派的对象达到这个数字,syslog-ng就进入垃圾信息收集状态的时间。该值应该比较高,以保证正常情况下不会打断日志消息的收取。
    六、局限性
    没有本地缓存,当网络故障的时候会丢失日志。
    七、参考资料
    man syslog-ng.confman 8 syslog-ng
  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/sode/p/2863879.html
Copyright © 2011-2022 走看看