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\n",<options>
    $template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n"
    \斜杠是转义,\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%\n"
  复杂一点的模板
    $template precise,"%syslogpriority%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%\n"
  RFC 3164 format的模板
    $template RFC3164fmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%"
  传统的模板格式用于用户信息
    $template usermsg," XXXX%syslogtag%%msg%\n\r"


 

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的目录。

 

posted @ 2017-12-09 17:05  孤独的海浪  阅读(2323)  评论(1编辑  收藏  举报