zoukankan      html  css  js  c++  java
  • 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(选择条件)。
        可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:
        引用
        * - 所有日志信息
        = - 等于,即仅包含本优先级的日志信息
        ! - 不等于,本优先级日志信息除外

      • 以上是

    syslog-ng 学习

        的内容,更多

    syslog 学习 ng

        的内容,请您使用右上方搜索功能获取相关信息。
  • 相关阅读:
    第123天:移动web开发中的常见问题
    第122天:移动端开发常见事件和流式布局
    第121天:移动端开发基本知识
    第120天:移动端-Bootstrap基本使用方法
    第119天:移动端:CSS像素、屏幕像素和视口的关系
    加入收藏 设为首页代码收藏本页的代码和收藏本站的代码设为首页代码
    JQuery和UpdatePannel的问题
    JS中apply与call的用法
    Sumlime text3 安装包、汉化包、注册码
    使用WITH AS提高性能简化嵌套SQL
  • 原文地址:https://www.cnblogs.com/yanzi-meng/p/9389744.html
Copyright © 2011-2022 走看看