Linux系统日志级别

时间:2022-05-18 08:52:12

/proc/sys/kernel/printk文件定义了4个数字, 查看日志级别
cat /proc/sys/kernel/printk
4 4 1 7
①控制台日志级别:优先级高于该值的消息将被打印至控制台。
②缺省的消息日志级别:将用该值来打印没有优先级的消息。
③最低的控制台日志级别:控制台日志级别可能被设置的最小值。
④缺省的控制台:控制台日志级别的缺省值。
日志缓冲区的每一行文本开头具有级别标记级别值越小则优先级越高

系统定义了8个消息级别级别号从07分别为:

  致命级(KERN_EMESG), 

  警戒级(KERN_ALERT), 

  临界级(KERN_CRIT),
  错误级(KERN_ERR), 

  告警级(KERN_WARN), 

  注意级(KERN_NOTICE), 

  通知级(KERN_INFO),
  调试级(KERN_DEBUG).

修改日志级别:

echo 0 4 1 7 > /proc/sys/kernel/printk


最近遇到配置centos 6.2的sshd及sftp日志,发现/etc/syslog.conf文件不存在,
然后:

#rpm -qa | grep syslog

出来的是
rsyslog-5.8.10-6.el6.x86_64

然后:

#cat /etc/rsyslog.conf

出来的内容几乎和以前的/etc/syslog.conf类似,然后百度,Google得出的结论是:

Rsyslog可作为系统自带产品syslog的替代品,目前fedra等多种Unix/Linux系列操作系统已经正式将rsyslog替换掉系统自带的syslog,所以CentOS 6以上版本都直接采用了rsyslog作为系统的日志服务。那它有什么特性呢?

1.后端存查日志支持的客户端多支持MySQL、PostgresSQL、Oracle 等

2.在同一台机器上支持多子rsyslog进程,可以监听在不同端口

3.直接兼容系统自带的syslog.conf配置文件

4.可将消息过来后再次转发

5.配置文件中可以写简单的逻辑判断

6.有现成的前端web展示程序

等等。

另外和rsyslog功能差不多还有syslog-ng,但是syslog-ng免费版本是闭源。

其次下面是整理的系统默认的日志分类记录文件说明:

1./var/log/lastlog
记录每个用户最近登录系统的时间, 可以通过lastlog指令读取

2./var/run/utmp
记录每个用户登录系统的时间, who、 users、finger 等指令会查这个文件

3./var/log/wtmp
记录每个用户登入与登出的时间, last这个指令会查这个文件。这个文件也记录 shutdown及reboot的动作

4./var/log/secure
ssh登录的记录信息包括失败的记录信息,可以通过查看些日志查看机器是否被人扫描

5./var/log/maillog
记录sendmail及pop等相关讯息

6./var/log/cron
记录crontab的相关信息

7./var/log/dmesg
dmesg会将这个文件显示出来,它是开机时的系统自检的信息,同时也会记录硬件错误信息

8./var/log/xferlog
记录ftp相关的日志信息

9./var/log/messages
系统大部份的日志信息,包括login、check password、failed login、ftp、su等等

最后修改了/etc/ssh/sshd_config,/etc/rsyslog.conf 还是老套路:

#/etc/init.d/rsyslog restart

#/etc/init.d/sshd restart

1. rsyslogd 服务

1.1 查看当前rsyslogd服务的状态

     在Fedora 9开始,负责写入日志信息的服务是rsyslogd,它的配置文件为:/etc/rsyslog.conf。我们检测一下当前这个服务是不是在运行。

[flagonxia@airhouse etc]$ ps -ef | grep -v grep | grep rsyslog 
     root      1584     1  0 10:33 ?        00:00:00 rsyslogd -c 3

      从上面命令的输出结果看到rsyslogd执行时使用的参数是-c 3。这个输入参数在文件/etc/sysconfig/rsyslog中指定。

[flagonxia@airhouse sysconfig]$ less rsyslog 
      # Options to syslogd 
      # syslogd options are deprecated in rsyslog v3 
      # if you want to use them, switch to compatibility mode 2 by "-c 2" 
      SYSLOGD_OPTIONS="-c 3"

      也可以通过另一种方式,查看当前运行级别中,rsyslogd是否运行。

[flagonxia@airhouse sysconfig]$ sudo chkconfig --list rsyslog 
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off

      注意,这里的服务名是rsyslog。

1.2 配置文件/etc/rsyslog.conf

1.2.1 配置文件的基本信息

      配置文件/etc/rsyslog.conf中有很多内容,但最主要的是指定需要记录哪些服务和需要记录什么等级的信息。

      下面是rsyslog.conf的内容。

      # /etc/rsyslog.conf

      ... ...

      #### RULES ####

      # Log all kernel messages to the console. 
      # Logging much else clutters up the screen. 
      #kern.*                                                 /dev/console

      # Log anything (except mail) of level info or higher. 
      # Don't log private authentication messages! 
A    *.info;mail.none;authpriv.none;cron.none                /var/log/messages

      # The authpriv file has restricted access. 
      authpriv.*                                              /var/log/secure

      # Log all the mail messages in one place. 
B    mail.*                                                  -/var/log/maillog

      # Log cron stuff 
      cron.*                                                  /var/log/cron

      # Everybody gets emergency messages 
C      *.emerg                                                 *

      # Save news errors of level crit and higher in a special file. 
D    uucp,news.crit                                       /var/log/spooler

      # Save boot messages also to boot.log 
      local7.*                                                /var/log/boot.log     

     【注释】

A:把所有大于info级别的信息都记录到/var/log/messages中,但不要记录mail,authpriv和cron服务产生的信息;

B:把mail产生的信息都记录到/var/log/maillog中

C:把所有服务输出的“大于”emergy级别的信息显示给每个在线的人,通过wall工具

D:把uucp和news输出的大雨crit级别的信息记录到/var/log/spooler中

1.2.2 信息的等级及其在配置文件中指定的方式

     A 七种信息等级

        1)info

        2)notice

        3)warning或warn

        4)err或error

        5)crit

        6)alert

        7)emerg或panic:导致系统几乎要死机

     B 信息等级的指定方式

        1). xxx: 表示大于xxx级别的信息

        2).=xxx:表示等于xxx级别的信息

        3).!xxx:表示在xxx之外的等级的信息

2. logrotate服务

2.1 logrotate服务的启动方式

logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。

       logrotate的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天由cron在指定的时间(/etc/crontab)启动。

[flagonxia@airhouse cron.daily]$ less logrotate 
#!/bin/sh

       /usr/sbin/logrotate /etc/logrotate.conf 
       EXITVALUE=$? 
       if [ $EXITVALUE != 0 ]; then 
       /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" 
       fi 
       exit 0

       因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。

[flagonxia@airhouse logrotate.d]$ ps -ef | grep -v grep | grep cron 
       root      1984     1  0 10:34 ?        00:00:00 crond

2.2 logrotate的配置文件/etc/logrotate.conf

在执行logrotate时,需要指定其配置文件/etc/logrotate.conf。这个文件定义了如何转储日志文件的规则。如下:

       # see "man logrotate" for details 
       # rotate log files weekly 
       weekly

       # keep 4 weeks worth of backlogs 
       rotate 4

       # create new (empty) log files after rotating old ones 
       create

       # use date as a suffix of the rotated file 
       dateext

       # uncomment this if you want your log files compressed 
       #compress

       # RPM packages drop log rotation information into this directory 
include /etc/logrotate.d

       # no packages own wtmp and btmp -- we'll rotate them here 
       /var/log/wtmp { 
              monthly 
              create 0664 root utmp 
              rotate 1 
        }

        /var/log/btmp { 
              missingok 
              monthly 
              create 0600 root utmp 
              rotate 1 
         }

         # system-specific logs may be also be configured here.

      这个配置文件的注释写得很清楚,没有必要再罗嗦了。只想强调下面这行,它的作用包含存放在/etc/logrotate.d目录下面的配置文件,不可或缺。如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d下面。它其实也因为下面的这句话,在logrotate服务启动时被读取。

       include /etc/logrotate.d

       这里有个例子:/etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
             sharedscripts 
             postrotate 
                  /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
             endscript 
       }

      上面的配置对于/var/log/messages, /var/log/secure, /var/log/mailog/ /var/log/spooler, /var/log/boot.log, /var/log/cron都是适用的。

      注意,prerotate和postrotate必须和sharescripts...endscript一起用。上面的信息表示日志文件转储后,重启rsyslogd服务。

      每个存放在/etc/logrotate.d目录里的文件,都有上面格式的配置信息。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。



原文链接:http://my.oschina.net/0757/blog/198329
具体内容:

非常详细的rsyslogd配置文件解析

rsyslog服务和logrotate服务
======================================================================
rsyslog 是一个 syslogd 的多线程增强版。
现在Fedora和Ubuntu, rhel6默认的日志系统都是rsyslog了
rsyslog负责写入日志, logrotate负责备份和删除旧日志, 以及更新日志文件
———————————————————————-
rsyslog 服务
———————————————————————-
软件包:
[root@centos ~]# yum install rsyslog rsyslog-mysql  logrotate
查看当前rsyslog服务的状态:
[root@centos ~]#/etc/init.d/rsyslog status
rsyslogd (pid  1343) is running…
在centos6中, rsyslog服务默认是开机启动的
我们先看一下它的进程::
[root@centos ~]# ps -ef | grep rsyslogd | grep -v grep
root      1343    1  0 12:09 ?        00:00:00 /sbin/rsyslogd -c 4
从上面命令的输出结果看到rsyslog执行时使用的参数是-c 4.
它的意思是指定rsyslog运行(兼容)的版本号, 这个参数必须是第一个参数, 当然也可以省略, 默认为-c0, (命令行兼容sysklogd)
这个参数是在文件/etc/sysconfig/rsyslog中指定::
[root@centos ~]# cat /etc/sysconfig/rsyslog

  1. # Options to syslogd

  2. # syslogd options are deprecated since rsyslog v3

  3. # if you want to use them, switch to compatibility mode 2 by “-c 2″

  4. SYSLOGD_OPTIONS=”-c 4″  

[root@centos ~]# chkconfig –list | grep rsyslog
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
注意,这里的服务名是rsyslog!
———————————————————————-
配置文件
———————————————————————-
/etc/rsyslog.conf
配置文件的基本信息
配置文件中有很多内容, 但最主要的是指定需要记录哪些服务和需要记录什么等级的信息::
cat /etc/rsyslog.conf

  1. #rsyslog v3 config file

  2. # if you experience problems, check

  3. # http://www.rsyslog.com/troubleshoot for assistance

  4. #### MODULES ####    加载 模块

  5. $ModLoad imuxsock.so  –> 模块名    # provides support for local system logging (e.g. via logger command) 本地系统日志

  6. $ModLoad imklog.so                    # provides kernel logging support (previously done by rklogd)

  7. #$ModLoad immark.so              # provides –MARK– message capability

  8. # Provides UDP syslog reception

  9. # 允许514端口接收使用UDP协议转发过来的日志

  10. #$ModLoad imudp.so

  11. #$UDPServerRun 514

  12. # Provides TCP syslog reception

  13. # 允许514端口接收使用TCP协议转发过来的日志

  14. #$ModLoad imtcp.so

  15. #$InputTCPServerRun 514

  16. #### GLOBAL DIRECTIVES ####

  17. 定义日志格式默认模板  

  18. # Use default timestamp format

  19. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  

  20. # File syncing capability is disabled by default. This feature is usually not required,

  21. # not useful and an extreme performance hit

  22. #$ActionFileEnableSync on

  23. #### RULES ####

  24. # Log all kernel messages to the console.

  25. # Logging much else clutters up the screen.

  26. #kern.*                                                 /dev/console    关于内核的所有日志都放到/dev/console(控制台)

  27. # Log anything (except mail) of level info or higher.

  28. # Don’t log private authentication messages!

  29. # 记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外

  30. *.info;mail.none;authpriv.none;cron.none                /var/log/messages  

  31. # The authpriv file has restricted access.

  32. # authpriv验证相关的所有信息存放在/var/log/secure

  33. authpriv.*                                              /var/log/secure  

  34. # Log all the mail messages in one place.

  35. # 邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大

  36. mail.*                                                  -/var/log/maillog  

  37. # Log cron stuff

  38. # 计划任务有关的信息存放在/var/log/cron

  39. cron.*                                                  /var/log/cron  

  40. # Everybody gets emergency messages

  41. # 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人

  42. *.emerg                                                 *                  *代表所有在线用户  

  43. # Save news errors of level crit and higher in a special file.

  44. # 记录uucp,news.crit等存放在/var/log/spooler

  45. uucp,news.crit                                          /var/log/spooler  

  46. # Save boot messages also to boot.log     启动的相关信息

  47. local7.*                                                /var/log/boot.log

  48. #:rawmsg, contains, “sdns_log” @@192.168.56.7:10514

  49. #:rawmsg, contains, “sdns_log” ~

  50. # ### begin forwarding rule ###  转发规则

  51. # The statement between the begin … end define a SINGLE forwarding

  52. # rule. They belong together, do NOT split them. If you create multiple

  53. # forwarding rules, duplicate the whole block!

  54. # Remote Logging (we use TCP for reliable delivery)

  55. #

  56. # An on-disk queue is created for this action. If the remote host is

  57. # down, messages are spooled to disk and sent when it is up again.

  58. #$WorkDirectory /var/spppl/rsyslog # where to place spool files

  59. #$ActionQueueFileName fwdRule1 # unique name prefix for spool files

  60. #$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)

  61. #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown

  62. #$ActionQueueType LinkedList   # run asynchronously

  63. #$ActionResumeRetryCount -1    # infinite retries if host is down

  64. # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional

  65. #*.* @@remote-host:514                    # @@表示通过tcp协议发送    @表示通过udp进行转发

  66. #local3.info  @@localhost :514

  67. #local7.*                                    #            @@192.168.56.7:514

  68. # ### end of the forwarding rule ###

格式::
日志设备(类型).(连接符号)日志级别   日志处理方式(action)
日志设备(可以理解为日志类型):
———————————————————————-
auth        –pam产生的日志
authpriv    –ssh,ftp等登录信息的验证信息
cron        –时间任务相关
kern        –内核
lpr         –打印
mail        –邮件
mark(syslog)–rsyslog服务内部的信息,时间标识
news        –新闻组
user        –用户程序产生的相关信息
uucp        –unix to unix copy, unix主机之间相关的通讯
local 1~7   –自定义的日志设备
日志级别:
———————————————————————-
debug       –有调式信息的,日志信息最多
info        –一般信息的日志,最常用
notice      –最具有重要性的普通条件的信息
warning     –警告级别
err         –错误级别,阻止某个功能或者模块不能正常工作的信息
crit        –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert       –需要立刻修改的信息
emerg       –内核崩溃等严重信息
none        –什么都不记录
从上到下,级别从低到高,记录的信息越来越少
详细的可以查看手册: man 3 syslog
连接符号
———————————————————————-
.xxx: 表示大于等于xxx级别的信息
.=xxx:表示等于xxx级别的信息
.!xxx:表示在xxx之外的等级的信息
Actions
———————————————————————-
1. 记录到普通文件或设备文件::
*.*     /var/log/file.log   # 绝对路径
*.*     /dev/pts/0
测试: logger -p local3.info ‘KadeFor is testing the rsyslog and logger ‘   logger 命令用于产生日志
2. 转发到远程::
*.* @192.168.0.1            # 使用UDP协议转发到192.168.0.1的514(默认)端口
*.* @@192.168.0.1:10514     # 使用TCP协议转发到192.168.0.1的10514(默认)端口
3. 发送给用户(需要在线才能收到)::
*.*   root
*.*   root,kadefor,up01     # 使用,号分隔多个用户
*.*   *     # *号表示所有在线用户
4. 忽略,丢弃::
local3.*   ~    # 忽略所有local3类型的所有级别的日志
5. 执行脚本::
local3.*    ^/tmp/a.sh      # ^号后跟可执行脚本或程序的绝对路径
# 日志内容可以作为脚本的第一个参数.
# 可用来触发报警
.. note::
日志记录的顺序有先后关系!
======================================================================
一个标准的简单的配置文件
======================================================================
::
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
authpriv.*                                    /var/log/secure
mail.*                                        /var/log/maillog
cron.*                                        /var/log/cron
*.emerg                                       *
uucp,news.crit                                /var/log/spooler
local7.*                                      /var/log/boot.log
======================================================================
实例: 指定日志文件, 或者终端
======================================================================
[root@kadefor ule-sa3]# vi /etc/rsyslog.conf
[root@kadefor ule-sa3]# grep local3 !$
grep local3 /etc/rsyslog.conf
local3.*                                                /var/log/local3.log
[root@kadefor ule-sa3]# rm -rf /var/log/local3.log
[root@kadefor ule-sa3]# /etc/init.d/rsyslog reload
Reloading system logger…                                 [  OK  ]
[root@kadefor ule-sa3]# ls /var/log/local3.log
/var/log/local3.log
[root@kadefor ule-sa3]# logger -t ‘LogTest’ -p local3.info ‘KadeFor is testing the rsyslog and logger’
[root@kadefor ule-sa3]# cat /var/log/local3.log
Jun 10 04:55:52 kadefor LogTest: KadeFor is testing the rsyslog and logger
[root@kadefor ule-sa3]#
自己实验日志发送给某个终端
======================================================================
实例:  过滤特定的日志到文件, 忽略(丢弃)包含某个字符串的日志
======================================================================
# 过滤日志, 由:号开头
:msg, contains, “error” /var/log/error.log
:msg, contains, “error” ~         # 忽略包含error的日志
:msg, contains, “user nagios”   ~
:msg, contains, “user kadefor”   ~
:msg, contains, “module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write” ~
local3.*    ~
PS.
&   ~       # 忽略所有的日志
把包含’oracle’的日志保存在/var/log/oracle.log
======================================================================
实例:  使用模板来定义日志格式
======================================================================
定义默认的日志格式:

  1. $template myFormat,”%rawmsg%\n”  

  2. $ActionFileDefaultTemplate myFormat  

  3. #如果不要$ActionFileDefaultTemplate myFormat这一行, 就需要像这样来使用模板:

  4. #在日志文件后添加模板名, 并用;号分隔

  5. $template myFormat,”%rawmsg%\n”  

  6. # The authpriv file has restricted access.

  7. authpriv.*      /var/log/secure;myFormat  

  8. # Log all the mail messages in one place.

  9. mail.*          /var/log/maillog;myFormat  

  10. # Log cron stuff

  11. cron.*          /var/log/cron;myFormat  

  12. # Everybody gets emergency messages

  13. *.emerg                                       *  

  14. # Save news errors of level crit and higher in a special file.

  15. uucp,news.crit  /var/log/spooler;myFormat  

  16. # Save boot messages also to boot.log

  17. local7.*        /var/log/boot.log;myFormat  

======================================================================
实例: remote log 远程发送与接收:
======================================================================
如果要修改为非514的端口, 需要设置selinux
只要在rsyslog.conf中加入
*.* @192.168.0.10
*.* @192.168.0.10:10514     # 带端口号
*.* @@192.168.0.10      # TCP
但是没有定义保存在远程的哪一个文件啊?
其实保存在什么文件, 那是远程日志服务器接收到日志之后它自己的事情了.
例1:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
———————————————————————-
Client(send):
———————————————————————-
::
local3.*   @@192.0.2.1:10514
# if you need to forward to other systems as well, just
# add additional config lines:
# *.*   @@other-server.example.net:10514
# Log anything (except mail) of level info or higher.
# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                    /var/log/secure
# Log all the mail messages in one place.
mail.*                                        /var/log/maillog
# Log cron stuff
cron.*                                        /var/log/cron
# Everybody gets emergency messages
*.emerg                                       *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                /var/log/spooler
# Save boot messages also to boot.log
local7.*                                      /var/log/boot.log
———————————————————————-
Server(receive): <1>
———————————————————————-
::
# for TCP use:
$modload imtcp
$InputTCPServerRun 10514
# for UDP use:
$modload imudp
$UDPServerRun 514
# Log anything (except mail) of level info or higher.
# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                    /var/log/secure
# Log all the mail messages in one place.
mail.*                                        /var/log/maillog
# Log cron stuff
cron.*                                        /var/log/cron
# Everybody gets emergency messages
*.emerg                                       *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                /var/log/spooler
# Save boot messages also to boot.log
local7.*                                      /var/log/boot.log
local3.*    /var/log/local3.log     # 测试用
例2 (仅做了解, 不做要求)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#配置服务端(接收)
———————————————————————-
vi /etc/rsyslog.conf        #在文件开始加上,同时确保514端口能够被客户端用tcp访问
$ModLoad imtcp.so              # needs to be done just once #使用tcp方式
$InputTCPMaxSessions 500    # tcp接收连接数为500个
$InputTCPServerRun 514      # tcp接收信息的端口
$template logformat,”%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n”     # 定义一个名为logformat模板, 为信息加上日志时间
$template DynFile,”/var/log/tlog%$year%%$month%%$day%.log”     # 定义日志文件的名称,按照年月日
:rawmsg, contains, “sdns_log” ?DynFile;logformat    # 把rawmsg(也可以使用msg)日志中包含sdns_log标志的信息写到DynFile定义的日志文件里
:rawmsg, contains, “sdns_log”  ~                     # 这个表示丢弃包含sdns_log标志的信息, 一般都加上它, 以免多个日志文件记录重复的日志
#配置客户端(发送)
———————————————————————-
vi /etc/rsyslog.conf  #在文件开始加上
#把包含sdns_log的信息通过tcp发到192.168.1.2 @@表示tcp @表示udp
:rawmsg, contains, “sdns_log”       @@192.168.1.2       # 默认514端口
#这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message
:rawmsg, contains, “sdns_log”       ~
#测试
———————————————————————-
在客户端上执行
logger -p user.info “sdns_log 34334″
在服务端的/var/log/目录里是否有tlog*日志产生
补充:
———————————————————————-
如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样操作:
:fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log
:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log
练习:
======================================================================
1. 实现把ssh服务的日志自定义保存到/var/log/newsshd.log (先不做)
2. mail日志保存在远程日志服务器/var/log/newmail.log
3. 过滤日志, 如果日志包含有”daydayup”, 则执行脚本/tmp/a.sh
脚本内容:
#!/bin/bash
echo  “KO::** $1″ > /dev/tty2
======================================================================
logrotate服务
======================================================================
rotate 轮换,日志切换
logrotate服务的启动方式
logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。
logrotate 的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天由cron在指定的时间(/etc/crontab)启动。
因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。
在执行logrotate时,需要指定其配置文件/etc/logrotate.conf
这 个配置文件的注释写得很清楚,没有必要再罗嗦了。只想强调下面这行,它的作用包含存放在/etc/logrotate.d目录下面的配置文件,不可或缺。 如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d下面。它其实也因为下面的这句话,在 logrotate服务启动时被读取。
每个存放在/etc/logrotate.d目录里的文件,都有上面格式的配置信息。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。
logrotate启动脚本放在 /etc/cron.daily/logrotate 中,可人工执行命令进行测试:
/usr/sbin/logrotate -f /etc/logrotate.conf
dateext表示转储文件会以日期来结束*
::
[root@kadefor log]# vim /etc/logrotate.conf
# see “man logrotate” for details
# rotate log files weekly
weekly          –每周轮转一次
# keep 4 weeks worth of backlogs
rotate 4        –保留四个
# create new (empty) log files after rotating old ones
create          –rotate后,创建一个新的空文件
# uncomment this if you want your log files compressed
#compress       –默认是不压缩的
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d        –这个目录下面配置文件生效
# no packages own wtmp — we’ll rotate them here
/var/log/wtmp {             –定义/var/log/wtmp这个日志文件
monthly                 –每月轮转一次,取代了上面的全局设定的每周轮转一次
minsize 1M              –定义日志必须要大于1M大小才会去轮转
create 0664 root utmp   –新的日志文件的权限,属主,属主
rotate 1                –保留一个,取代了上面的全局设定的保留四个
}
/var/log/btmp {
missingok       –如果日志丢失, 不报错
monthly
create 0600 root utmp
rotate 1
}
::
# sample logrotate configuration file
compress
# 全局设置, 压缩
/var/log/messages {
rotate 5     # 保留5份日志
weekly       # 每周轮换一次
postrotate   # 轮换之后重启syslogd服务
/usr/bin/killall -HUP syslogd
# rhel6中为:/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
# 可查看/etc/logrotate.d/下的配置文件
endscript
}
“/var/log/httpd/access.log” /var/log/httpd/error.log {   #  指定多个文件, 如果有特殊字符需要用单引号
rotate 5
mail www@my.org
size 100k        # 超过100k后切换日志, 并把老的日志发送邮件给www@my.org
sharedscripts    # 共享脚本. 下面的postrotate脚本只运行一次.
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/* {    # 少用通配符, 因会它会包括已经切换过的日志, 要用的话最好在*号后加上扩展名, 如*.log
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill -HUP ‘cat /var/run/inn.pid‘
endscript
nocompress
}
例:
修改/etc/logrotate.conf
/var/log/wtmp {
monthly
minsize 10k
create 0664 a b
rotate 2
}
logrotate -f /etc/logrotate.conf  –强制轮转
logrotate -vf /etc/logrotate.conf    –再加一个-v参数查看轮转的过程
———————————
[root@kadefor log]# vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts   –表示切换时脚本只执行一次
postrotate      –表示rotate后执行的脚本
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript       –表示脚本结束
}
[root@kadefor log]# logger -t ‘aaaa’ ‘bbbbbb’–在日志里加一个内容tag和内容
[root@kadefor log]# tail /var/log/messages
Jun 12 19:38:55 kadefor dhclient[3166]: bound to 192.168.1.101 — renewal in 3384 seconds.
Jun 12 20:34:22 kadefor aaaa: bbbbbb