zoukankan      html  css  js  c++  java
  • syslog相关内容介绍

    syslog相关内容介绍

    简介:   

      syslog server 从网络设备接收系统日志消息,并实时显示它们。


    系统日志消息可以使用以下事件进行处理:

      1、在滚动窗口中显示消息
      2、将消息记录到文本文件
      3、将消息转发到另一个系统日志服务器
      4、记录到ODBC数据库
      5、记录到NT应用程序事件日志
      6、通过SMTP将消息通过电子邮件发送给某人
      7、运行外部程序,如寻呼通知系统
      8、发送SNMP陷阱消息


    系统syslog内容的相关介绍

      安装源码包,既不影响系统里面运行的syslog,也由于二者容易冲突,所以选择源码安装
      版本:rsyslog-7.4.10
      1、安装依赖包,参考官方文档
        yum install git valgrind autoconf automake flex bison python-docutils python-sphinx json-c-devel libuuid-devel libgcrypt-devel zlib-devel openssl-devel libcurl-devel gnutls-devel mysql-devel postgresql-devel libdbi-dbd-mysql libdbi-devel net-snmp-devel
        yum install autogen libtool
        export PKG_CONFIG_PATH=/lib64/pkgconfig/ #设置环境变量
        yum install libestr-devel -y
        yum install liblogging-devel-1.0.4-2.gf.el6.x86_64.rpm liblogging-1.0.4-2.gf.el6.x86_64.rpm
      2、./autogen.sh
        运行这个来生成所有的初始makefiles等,运行这个脚本之后就会有configure这个工具了
        接下来可以使用./congure --enable...添加各种插件功能,插件目录在/rsyslog-7.4.10/plugins/下,使用-h查看支持的选项
        make && make install

      3、配置相应的功能之后就启动服务了
        /usr/local/rsyslog/sbin/rsyslogd --help #查看相应的服务启动参数


    配置和相关文档的说明

    man8手册的说明:http://man7.org/linux/man-pages/man8/rsyslogd.8.html

    OPTIONS

      -D   配置解析器在调试模式下运行,通常在很难发现配置错误的情况下使用
      -d   在debug模式下运行
      -f    指定配置文件运行,默认在/etc/rsyslog.conf
      -i    指定pid文件运行,如果是多实例的话,需要指定不同的pid文件
      -n   默认是由init进程进行守护运行
      -N level 以检查配置文件的方式运行,默认是0级别
        rsyslogd -f ../sample.conf -N 1 -i /var/run/rsyslogd1.pid
      -C  改变root目录的方式运行
      -v   打印版本信息

    SIGNALS

      Rsyslogd接受一些信号的响应
      示例:kill -SIGNAL $(cat /var/run/rsyslogd.pid)
      将SIGNAL替换成相应的信号值
      HUP 让rsyslogd执行关闭所有打开的文件。
      TERM,INT,QUIT 停止rsyslog的运行
      USR1 当rsyslog运行在debug的时候有用,可以用来切换状态
      CHLD 略

    security threats

      rsyslogd守护进程可能被用作拒绝服务攻击的管道,且在本机开启UDP端口容易导致机器风险。
      1、使用防火墙来限制哪些机器可以访问514端口
      2、将保存的信息存放在非根文件系统的位置,确保不会损害当前的机器。
      3、以非root用户运行

    FILES

      /etc/rsyslog.conf 配置rsyslogd运行的配置文件
      /dev/log Unix域套接字读取本地syslog消息
      /var/run/rsyslogd.pid rsyslogd运行的pid文件
      prefix/lib/rsyslog rsyslogd rsyslogd 目录,默认编译的路径


    man5关于rsyslog配置文件的详细说明

    http://man7.org/linux/man-pages/man5/rsyslog.conf.5.html#top_of_page


    MODULES

      im开头的输入模块,om开头的输出模块
      ommysql    输出到mysql的模块
      imfile     文本文件输入模块
      imudp    udp输入模块
      imtcp     tcp输入模块
      imrelp   RELP协议输入插件
      ...

    BASIC STRUCTURE

      Global directives

      全局指令用来设置rsyslog的运行全局属性,譬如message的队列尺寸等。

      Templates

      Templates 可以将message处理成指定的格式,必须在rules之前被定义好。

      Output channels

      为用户可能需要的任何类型的输出提供了..

      Rules(selector + action)

      每一个rules都包含了这两个字段,这两个字段由一个或多个空格或制表符分隔。
      selector字段指定属于指定动作的facilities和priorities的模式。

     

    SELECTORS

      facility和priority由点号分隔,不区分大小写。
      facility由以下几个关键字组成:
      auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security等
      你可以通过这些关键字来重定向这些消息。

      priority由以下几个关键字组成:
      debug, info, notice, warning, warn, err, crit, alert, emerg, panic等
      可以用来定义消息的优先级

      1、* 表示所有facility或priority
      2、可以在相同的priority指定多个facility,使用,来分隔。
      3、多个selectors可以指定单个action,通过;号分隔,选择器字段中的每个选择器都可以覆盖前面的选择器。
      4、扩展语法,=指定单一的priority,!表示忽略所有priorities。

    ACTIONS

    作为一个规则表示如何处理消息,一般会是写入文本文件或数据库等操作。

      Regular file
      *.* /var/log/traditionalfile.log;RSYSLOG_TraditionalFileFormat
      #以指定的格式写入指定的文件

      Named pipes
      支持将输出记录到命名管道(fifos),通过将管道符号'|'预先添加到文件的名称,可以将fifo或命名管道用作日志消息的目的地。
      fifo必须在rsyslogd启动之前使用mkfifo命令创建。
      一边写一边读,类似python中的queue,会阻塞。

      Terminal and console
      可以将输出重定向到终端,/dev/console

      Remote machine
      输出到远程主机上,@表示udp,@@表示tcp,如果采用RELP协议,需要在远程主机前加上:omrelp:。

      *.* @192.168.0.1
      #将消息发送到192.168.0.1的514端口(默认端口)
      action(type="omfwd" Target="192.168.0.1" Device="eth0" Port=514 Protocol="udp")
      #通过omfwd可以指定更多属性
      *.* :omrelp:192.168.0.1:2514
      #使用RELP协议,需要先加载模块后才可以使用

      List of users
      通常会将一些严重的信息通知给系统用户
      :omusrmsg:root,user1,user2

      Everyone logged on
      一些紧急的消息需要发送给所有用户,这时候可以使用*来表示
      :omusrmsg:*

      Database table
      利用相应的输出模块将message信息输出到数据库中

      Discard
      将不需要的消息进行丢弃
      *.* stop #stop表示丢弃动作,也可以使用~来表示

      Output channel
      将输出通道定义绑定到此操作,必须以$开头,支持模板定义。

      Shell execute
      略

    FILTER CONDITIONS

    提供3种条件过滤的类型
    1、基于selectors的severity和facility
    2、基于property
    3、基于expression(表达式)

      Selectors是传统的过滤方式syslog的消息。
      保持了传统的语法, 如果只需要根据facility和priority进行筛选,则应该使用Selectors进行筛选。

      Property-Based Filters
      允许过滤任何属性,例如HOSTNAME, syslogtag and msg等
      必须以:开头,后面接属性名,一个逗号,一个比较操作符,另一个逗号,然后是比较的值,这个值必须被引用。
      示例:
      :property, [!]compare-operation, "value"
      以下是compare-operation操作的支持情况:
        contains:  检查值中包含的字符串是否包含在属性中
        isequal:    比较提供的"值"字符串和属性内容。 这两个值必须完全相等。
        startswith:检查值是否刚好在属性值的起始处找到。
        regex:      将该属性与提供的正则表达式进行比较。

      Expression-Based Filters
      参考官方文档

    TEMPLATES

      每一个rsyslog的输出都是用templates,适用于文件,用户信息等。
      如果你不指定一个templates的话,默认会使用一个预置的模板,被硬编码在代码之中。
      template由一个template指令,一个名称,实际模板文本和可选的选项
        $template MyTemplateName,"7Text %property% some more text ",<options>
        $template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg% "
        斜杠是转义,7是一个ASCII字符,除了百分号以外的东西,模板中的所有文本都是字面使用的。
        %%里面是属性值,可以访问消息的内容,通过property replacer去访问。
      templates可以用来生成selector行的动态文件名。
        $template DynFile,"/var/log/system-%HOSTNAME%.log"

      Template options
        请务必不要将模板选项与属性选项相混淆-后者由property replacer处理,仅应用于单一属性而不是整个模板。
        sql:格式化适合于MySQL格式的SQL语句的字符串,这将在每个字段内用单引号"'"和反斜线字符"'"和""替换反斜线字符。
        stdsql:提供标准的sql语句格式
        如果你将信息写入数据库中,一定要注意sql注入的问题。

      Template examples
      模板不能实际上被分割成多行。

      一个传统的模板输出:
        $template TraditionalFormat,"%timegenerated% %HOSTNAME%%syslogtag%%msg:::drop-last-lf% "
      复杂一点的模板
        $template precise,"%syslogpriority%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg% "
      RFC 3164 format的模板
        $template RFC3164fmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%"
      传统的模板格式用于用户信息
        $template usermsg," XXXX%syslogtag%%msg% "


    OUTPUT CHANNELS

      $outchannel name,file-name,max-size,action-on-max-size
        $outchannel name表示outchannel名称
        file-name表示写入文件名
        max-size表示写入最大的尺寸
        action-on-max-size在达到最大尺寸的时候执行的动作,这个命令总是只有一个参数。
        *.* :omfile:$mychannel


    PROPERTY REPLACER

    property replacer是rsyslog输出系统的核心组成部分,一个message有很多properties,通过property replacer访问。

      Accessing Properties
      系统日志消息属性在模板中使用,通过百分比标志之间的访问,属性可以由属性替换器修改。完整的语法如下:
      %propname:fromChar:toChar:options% #propname为访问属性名

      Available Properties
        msg message的MSG部分
        rawmsg 从socket接受的消息,一般用于debug
        HOSTNAME message中的hostname
        FROMHOST 接收到message的主机来源
        syslogtag message的TAG部分
        programname tag的static部分,当TAG is "named[12345]", programname is "named".
        PRI message的PRI部分-未解码(单一值)
        PRI-text message的PRI部分,以文本的形式
        IUT 略
        syslogfacility message的facility,以数字的形式
        syslogfacility-text message的facility,以文本的形式
        syslogseverity message的severity,以数字的形式
        syslogseverity-text message的severity,以文本的形式
        timegenerated message被接收到时候的时间戳
        timereported message里面的timestamp
        TIMESTAMP timereported的别名
        PROTOCOL-VERSION 略
        STRUCTURED-DATA 略
        APP-NAME 略
        PROCID 略
        MSGID MSGID的内容
        $NOW 当前的日期格式,YYYY-MM-DD
        $YEAR The current year (4-digit)
        $MONTH The current month (2-digit)
        $DAY The current day of the month (2-digit)
        $HOUR The current hour in military (24 hour) time (2-digit)
        $MINUTE The current minute (2-digit)
        这些不是源于消息,而是内部生成的。

      Character Positions
        FromChar and toChar被用于建立子串,指定的字符串被拷贝出来。
        "%msg:1:2%" #提取前两个字符
        "%msg:::lowercase%" #所有字符串转换成小写
        %msg:10:$% #提取第十到结尾的字符

        正则的支持
        "%msg:R:.*Sev:. (.*) [.*--end%" #使用正则需要R开头

        基于字段
        "%msg:F:3%"
        "%msg:F,59:3%" #F指定分隔符

      Property Options
        uppercase 将属性转换为小写
        lowercase 属性的文本转换为大写
        drop-last-lf 删除message结尾的LF
        date-mysql mysql的时间格式
        date-rfc3164 RFC 3164时间格式
        date-rfc3339 RFC 3339时间格式
        escape-cc 替换控制字符
        space-cc 替换控制字符为空格
        drop-cc 结果字符串将不包含控制字符,转义序列或空间的任何其他替换字符。


    操作系统版本syslog的使用情况

    rpm -ql rsyslog-5.8.10-8.el6.x86_64

      /etc/logrotate.d/syslog    #用于logrotate的配置
      /etc/pki/rsyslog
      /etc/rc.d/init.d/rsyslog     #rsyslog的服务管理脚本
      /etc/rsyslog.conf       #主配置文件
      /etc/rsyslog.d         #配置文件包含目录
      /etc/sysconfig/rsyslog    #rsyslogd选项
      /lib64/rsyslog           #库文件目录
      /sbin/rsyslogd          #运行的二进制文件
      /usr/share/doc/rsyslog-5.8.10 #帮助文档

      /etc/rsyslog.conf配置内容简介:
        $ModLoad imuxsock #本地系统日志的输入支持(e.g. via logger command)
        $ModLoad imklog #提供内核日志输入支持
        $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #默认模板
        $IncludeConfig /etc/rsyslog.d/*.conf #配置文件包含目录
        *.info;mail.none;authpriv.none;cron.none /var/log/messages
        authpriv.* /var/log/secure
        ...
        将各种日志的各种级别进行输出重定向到文件

      /etc/logrotate.d/syslog
      利用syslog将系统各种信息输出到指定的各个文件之后,再利用logrotate去对日志进行滚动压缩等操作
      示例:
        /var/log/cron
        /var/log/maillog
        /var/log/messages
        /var/log/secure
        /var/log/spooler
        {
          sharedscripts
          postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
            #在进行日志滚动的时候需要发送HUP信号给syslogd进程,关闭打开的所有文件
          endscript
        }

    logrotate
    可以基于日志的大小或时间进行滚动,支持压缩,拷贝等众多功能。
    rpm -ql logrotate-3.7.8-17.el6.x86_64

      /etc/cron.daily/logrotate    #由cron定时任务管理器来启动logrotate
      /etc/logrotate.conf       #logrotate主配置文件
      /etc/logrotate.d       #logrotate配置文件目录
      /usr/sbin/logrotate       #logrotate运行的二进制文件
      /usr/share/doc/logrotate-3.7.8 #关于logrotate的文档信息

      /etc/logrotate.conf配置文件简介:
        compress #全局指定,日志进行压缩处理。
        

      "/var/log/httpd/access.log" /var/log/httpd/error.log {
        rotate 5               #轮转5个日志,之前的会被移除
        mail recipient@example.org #发送邮件信息
        size 100k          #按照大小进行轮转
        sharedscripts         # 如果指定了sharedscripts,那么脚本只运行一次,因为在多个日志进行轮转的时候只需要执行一次重载服务即可。
        postrotate
        /usr/bin/killall -HUP httpd
        endscript          #在postrotate和endcript之间的内容,在日志文件轮转后执行(使用/bin/sh)。
        }

    cron定时任务
    logrotate由cron进行定时触发执行,而logrotate作为syslog的工具对日志进行滚动,syslog进行日志分类收集存储。
    rpm -ql crontabs-1.10-33.el6.noarch

      /etc/cron.daily
      /etc/cron.hourly
      /etc/cron.monthly
      /etc/cron.weekly
      /etc/crontab
      /usr/bin/run-parts
      /usr/share/man/man4/crontabs.4.gz

    rpm -ql cronie-1.4.4-15.el6_7.1.x86_64
      /etc/cron.d
      /etc/cron.d/0hourly
      /etc/cron.deny
      /etc/pam.d/crond
      /etc/rc.d/init.d/crond
      /etc/sysconfig/crond
      /usr/bin/crontab
      /usr/sbin/crond

      Cron在crontab文件中搜索/var/spool/cron,这些文件以/etc/passwd中的帐户命名; 找到的crontabs被加载到内存中。
      Cron还会搜索/etc/anacrontab和/etc/cron.d目录中具有不同格式的任何文件(请参阅crontab(5))。
      使用modtime选项时,Cron会每分钟检查一次crontables的modtimes以检查是否有任何更改,并重新加载已更改的crontables。

    Cron检查的目录如下:
      /etc/crontab #系统的crontab,现在文件默认是空的。通过读取/etc/anacrontab配置文件的anacron运行。
      /etc/cron.d/ #包含为不同用户存储的系统cron job的目录。
      /var/spool/cron #包含由crontab命令创建的用户crontables的目录。

  • 相关阅读:
    POJ4046 Sightseeing
    SGU 298. King Berl VI
    POJ1741 Tree
    POJ1639 Picnic Planning
    POJ1635 Subway tree systems
    [JSOI2008]最小生成树计数
    ftrace使用简介(三)
    make: *** 没有规则可以创建目标"menuconfig". 停止
    编译linux内核(ftrace)
    vim 缩进配置
  • 原文地址:https://www.cnblogs.com/solitarywares/p/8012019.html
Copyright © 2011-2022 走看看