zoukankan      html  css  js  c++  java
  • linux syslog 日志采集系统搭建

        syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。

       syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点。


    syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。
    syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点。


    一:linux syslog 客户端配置

         linux syslog客户端的主要任务是收集系统运行中产生的各种日志,并将日志发送到指定的服务器。只需修改/etc/syslog.conf即可。

        1.配置文件语法

           服务名称.等级    存放或显示地点

         2.服务名称(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,已经不再建议使用。

       3.日志等级(level)

         level定义消息的紧急程度。按严重程度由高到低顺序排列为:
         emerg或panic -该系统不可用,等同panic
         alert -需要立即被修改的条件
         crit -阻止某些工具或子系统功能实现的错误条件
         err或error -阻止工具或某些子系统部分功能实现的错误条件,等同error
         warning或warn -预警信息,等同warn
         notice -具有重要性的普通条件
         info -提供信息的消息
         debug -不包含函数条件或问题的其他信息
         none -没有重要级,通常用于排错
         * 所有级别,除了none
         其中,panic、error、warn均为旧的标识符,不再建议使用

         特殊等级:例如 debug (显示较多的信息!)及 none (不要记录该服务的内容!)等!

        4.selector选择条件
          通过小数点符号“.”把facility和level连接在一起则成为selector(选择条件)。
          可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:
          引用* - 所有日志信息
          = - 等于,即仅包含本优先级的日志信息
          ! - 不等于,本优先级日志信息除外


       5.存放或显示地点

          档案的绝对路径:通常就是放在 /var/log 里头的档案
          打印机或其它:例如 /dev/lp0 这个打印机装置
          使用者名称:发送信息本机的指定用户信息窗口中,但该用户必须已经登陆到系统中     

          远程主机:例如 @test.adsldns.org
            说明:    使用tcp协议:@@192.168.1.180:514
                    使用udp协议:@192.168.1.180:514

    6、举例
        例如:
        引用*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages
        #把除邮件、新闻组、授权信息、计划任务等外的所有通知性消息都写入messages文件中。
        mail,news.=info /var/adm/info
        #把邮件、新闻组中仅通知性消息写入info文件,其他信息不写入。
        mail.*;mail.!=info /var/adm/mail
        #把邮件的除通知性消息外都写入mail文件中。
        mail.=info /dev/tty12
        #仅把邮件的通知性消息发送到tty12终端设备
        *.alert root,joey
        #如果root和joey用户已经登陆到系统,则把所有紧急信息通知他们
        *.* @finlandia
        #把所有信息都导向到finlandia主机(通过/etc/hosts或dns解析其IP地址)
        ※注意:每条消息均会经过所有规则的,并不是唯一匹配的。
        也 就是说,假设mail.=info信息通过上面范例中定义的规则时,/var/adm/info、/var/adm/mail、/dev/tty12,甚 至finalandia主机都会收到相同的信息。这样看上去比较烦琐,但可以带来的好处就是保证了信息的完整性,可供不同地方进行分析。

    二、linux syslog 服务器配置:

        1.修改/etc/sysconfig/syslog文件:
            引用
            -r : 打开接受外来日志消息的功能,其监控514 UDP端口;
            -x : 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
            -m : 修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次“--MARK--”信息;
            -h : 默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去。
            通过man syslogd可获得更详细的帮助,而具体到实际配置文件为:
             引用
            SYSLOGD_OPTIONS="-r-x-m 0"
            保存后,重启服务即可:# service syslog restart
            此时,客户机只要通过修改syslog.conf,定义动作为@主机或IP,即可发送日志信息到本服务器中。
            (在构建集中的日志服务器时,请务必配合ntp时间服务,以保证信息的有效性,避免不必要的麻烦)
        2.首先需要在日志服务器Server端开启远程服务。修改配置文件:/etc/rsyslog.conf
            以下为开启UDP连接:
                # provides UDP syslog reception
                $ModLoad imudp
                $UDPServerRun 514
            以下为开启TCP连接:
                # provides TCP syslog reception
                $ModLoad imtcp
                $InputTCPServerRun 514
                修改完成后需要重启rsyslog服务。执行命令  # restart rsyslog
       
        3.filter(日志筛选)
            filter是rsyslog的一大亮点,通常情况下,我们并不是所有的日志都要收集,比如我们只需要error以下级别的日志、或者我们再要包含特定内容的日志。灵活运用filter我们可以很轻易地实现这些需求。
            下面举几个例子,使用方法手册里有详细介绍:
                1:msg, contains, "test_message"  /var/log/test.log
                2:&~
            如果日志内容包含”test_message”就存放在/var/log/test.log中,”&~”的意思是丢弃,不做后续处理。即使后面还有”:msg, contains,“test_message” /var/log/test2.log”,这条日志也不会再存在test2.log中。
                1:if $msg contains 'test_message' then /var/log/test.log
                2:&~
            上面的例子的另一种写法,用if的好处是可以定义一些复杂的条件匹配
            filter非常的实用,syslog中仅仅定义的local0~local7几个用户自定义的facility。使用filter我们轻松解决自定义facility不够用的问题

        4. template(日志格式控制)
            使用template定义日志格式模板,可以规范不通的类型的日志,很方便我们查看,使用起来也很简单,但是template的定义必须放在rsyslog.conf的顶端。
                1: $template myFormat,"%timestamp%  %hostname% %msg%\n"
                2:    $ActionFileDefaultTemplate myFormat
            第一行我们定义了一个名为myFormat的模板,第二行的意思是把我们定义的myFormat作为rsyslog的默认模板。如果只是需要在特定日志上套用这个模板可以这样写
                1:$template myFormat,"%timestamp%  %hostname%  %msg%\n"
            如果希望手机到的日志不是使用hostname标识,而是ip地址标识可以这样写
                $template myFormat,"%timestamp% %fromhost-ip%%msg%\n"
                $ActionFileDefaultTemplate myFormat

  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/yunsicai/p/2986999.html
Copyright © 2011-2022 走看看