zoukankan      html  css  js  c++  java
  • Rsyslog系统日志管理

    Rsyslog系统日志管理

    课程目标

    • 了解日志的级别与作用
    • 掌握 rsyslog 服务的本地日志和远程日志的管理
    • 能够使用 logrotate 程序根据需求对日志进行轮转

    一、常见的系统日志

    日志格式:文本日志/二进制日志/数据库日志
    默认的相关日志文件:
    /var/log/boot.log	系统引导日志,记录开机启动信息
    /var/log/dmesg		核心的启动日志
    /var/log/message	系统的日志文件
    /var/log/maillog	邮件服务的日志
    /var/log/xferlog	ftp服务的日志
    /var/log/secure		网络连接及系统登录的安全信息
    /var/log/cron		定时任务的日志
    /var/log/wtmp		记录所有的登入和登出	last -f 查看
    /var/log/btmp		记录失败的登入尝试
    

    二、日志管理程序

    • 在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。
    • rsyslog程序管理本地和远程日志
      • 安装软件
      • 根据需求修改配置文件
      • 启动服务
      • 测试验证

    三、日志级别

    # man syslog
    日志信息分为以下级别,从上到下级别一次降低
    	none	none不是一个等级,它表示不记录服务的所有信息
    0 	emerg	系统不可用
    1	alert	特别留意的报警信息
    2	crit	非常严重的状况
    3	err		错误信息	
    4	warning	警告信息
    5	notice	稍微需要注意的信息
    6	info	正常信息
    7	debug	调试信息,开发人员使用
    
    

    四、日志配置

    [root@server ~]# rpm -q rsyslog
    rsyslog-5.8.10-8.el6.x86_64
    [root@server ~]# rpm -ql rsyslog
    /etc/logrotate.d/syslog
    /etc/pki/rsyslog	
    /etc/rc.d/init.d/rsyslog		//启动脚本
    /etc/rsyslog.conf		//主配置文件
    /etc/rsyslog.d			//子配置文件
    /etc/sysconfig/rsyslog
    /sbin/rsyslogd
    /usr/share/man/man5/rsyslog.conf.5.gz
    /usr/share/man/man8/rsyslogd.8.gz
    
    [root@server ~]# grep -v ^# /etc/rsyslog.conf 
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    $ModLoad imklog   # provides kernel logging support (previously done by rklogd)
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    $IncludeConfig /etc/rsyslog.d/*.conf
    
    *.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
    
    $template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%
    "
    
    :programname, startswith, "spice-vdagent"	/var/log/spice-vdagent.log;SpiceTmpl
    
    
    1.日志定义相关符号
    配置文件中常见的表示符合
    .	用来分隔服务和级别
    *	任何服务,或者任何级别
    = 	有等号表示等于某一级别,没有等号表示大于或者等于某一级别
    !	排除操作,前面有相同服务的表达式,这个操作才有意义
    		代表从前面表达式所包含的内容中排除某些内容
    ;	用于分隔不同的	服务,级别,组合
    ,	用于分隔不同服务
    -   用于指定目标文件时,代表异步写入
    
    举例说明
    mail.=info
    mail.info		mail服务大于等于info级别的日志
    mail.info;cron.=info	/var/log/test.log
    mail,cron.err
    cron.=warning
    mail,cron.info
    
    cron.info;cron.!=err	012456
    0123456		0124567
    cron.info;cron.!err		456
    0123456		4567
    
    特别说明:
     The facility is one of the following keywords: auth,
           authpriv, cron, daemon, kern, lpr, mail, mark, news,
           security  (same  as  auth),  syslog,  user, uucp and
           local0 through local7.(设备载体)
    log facility 设备	设施:用来记录一种类型日志的日志设备
    
    daemon
    auth
    authpriv
    user
    mail
    lpr
    news
    uucp
    ftp
    local7
           
    
    

    本地日志管理ssh

     [root@server ~]# man sshd_config
     SyslogFacility
             Gives the facility code that is used when logging
             messages from sshd(8).  The possible values are: DAE-
             MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
             LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.  The default
             is AUTH.
    
    1. 更改ssh服务的默认日志记录载体
    2. 通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)
    3. 测试验证
    1.修改ssh服务配置文件
    [root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    [root@server ~]# vim /etc/ssh/sshd_config 
    SyslogFacility LOCAL6
    2.重启服务
    [root@server ~]# service sshd restart
    Stopping sshd:                                             [  OK  ]
    Starting sshd:                                             [  OK  ]
    3.将来自LOCAL6设备载体日志记录指定位置(rsyslog)
    [root@server ~]# vim /etc/rsyslog.conf
    local6.*                                                /var/log/ssh
    4.重启rsyslog服务
    [root@server ~]# service rsyslog restart
    Shutting down system logger:                               [  OK  ]
    Starting system logger:                                    [  OK  ]
    5.客户端测试
    [root@client ~]# ssh 10.1.1.2
    Last login: Fri Apr 26 12:27:33 2019 from 10.1.1.1
    [root@server log]# ll ssh
    -rw------- 1 root root 0 Apr 26 13:40 ssh
    [root@server log]# tail -f ssh
    Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh2
    Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user
    此时进行ssh访问,日志会在local6和/var/log/messages里都出现
    
    如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志
    *.info;mail.none;authpriv.none;cron.none;local6.none              /var/log/messages
    
    

    五、远程日志管理

    目前:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理

    环境:

    log-server:10.1.1.2

    应用服务器:10.1.1.3

    ssh服务服务——>其他人远程访问该应用服务器产生ssh服务日志——>远程记录到log-server上

    client:10.1.1.4

    ssh:10.1.1.3——>日志记录10.1.1.2

    需求:把web服务器上的ssh服务日志,远程记录到log-server上

    思路:

    web应用服务器上操作

    1. 将web服务器上的ssh服务的日志单独记录
      • 指定ssh服务的设备载体
      • 重启服务
    2. 将来自于ssh服务的日志设备载体上的日志远程发送到log-server上

    以下操作在log-server上操作

    1. 通过修改配置文件,打开日志传输端口
      • 加载相应模块 tcp | udp
      • 打开接收端口 默认514端口
    2. 启动服务后日志默认会保存到/var/log/messages

    步骤:

    以下操作在log-service(10.1.1.2)服务上完成
    1.加载相应模块打开接收端口(可以选择udp、tcp都打开)
    [root@log-server ~]# vim /etc/rsyslog.conf
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    
    # Provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514
    2.重启服务
    service rsyslog restart
    [root@log-server ~]# netstat -nltup |grep 514		//验证端口是否打开
    tcp        0      0 0.0.0.0:514                 0.0.0.0:*                   LISTEN      2822/rsyslogd       
    tcp        0      0 :::514                      :::*                        LISTEN      2822/rsyslogd       
    udp        0      0 0.0.0.0:514                 0.0.0.0:*                               2822/rsyslogd       
    udp        0      0 :::514                      :::*                                    2822/rsyslogd
    
    以下操作在应用服务器完成(10.1.1.3):
    1.指定ssh服务的日志文件的设备载体
    [root@ssh-server ~]# vim /etc/ssh/sshd_config 
    SyslogFacility LOCAL0
    2.重启ssh服务
    [root@ssh-server ~]# service sshd restart
    3.修改/etc/rsyslog.conf来指定ssh服务的日志发送到远端去
    [root@ssh-server ~]# vim /etc/rsyslog.conf 
    
    # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    #*.* @@remote-host:514
    
    local0.*        @10.1.1.2:514	//一个@表示udp,两个@表示tcp  
    最关键的一步,将日志远程发送给10.1.1.2
    
    
    4.重启rsyslog服务
    [root@ssh-server ~]# service rsyslog restart
    Shutting down system logger:                               [  OK  ]
    Starting system logger:                                    [  OK  ]
    
    测试验证(client:10.1.1.4)
    [root@client ~]# ssh 10.1.1.3
    The authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.
    RSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.
    root@10.1.1.3's password: 
    Last login: Fri Apr 26 14:46:31 2019 from 10.1.1.1
    
    [root@log-server ~]# tail -f /var/log/messages
    Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
    [root@ssh-server ~]# tail -f /var/log/messages
    Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
    (不想记录就修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)
    
    注意:selinux和防火墙,还有udp和tcp 端口514是否打开
    
    

    六、日志轮转

    日志轮循(轮转):日志轮转,切割,备份,归档

    • 为什么要日志轮转?
    1. 避免日志过大占满/var/log的文件系统
    2. 方便日志查看
    3. 将丢弃系统中最旧的日志文件,以节省空间
    4. 日志轮转的程序是logrotate
    5. logrotate本身不是系统守护进程,它是通过计划crond每天执行
    • 如何进行日志轮转?
      • 了解相关配置文件
    [root@log-server ~]# rpm -ql logrotate
    /etc/cron.daily/logrotate		周期性计划任务
    /etc/logrotate.conf				配置文件
    /etc/logrotate.d				子配置文件存放路径
    /usr/sbin/logrotate
    /usr/share/doc/logrotate-3.7.8
    /usr/share/doc/logrotate-3.7.8/CHANGES
    /usr/share/doc/logrotate-3.7.8/COPYING
    /usr/share/man/man5/logrotate.conf.5.gz
    /usr/share/man/man8/logrotate.8.gz
    /var/lib/logrotate.status
    
    [root@log-server ~]# cat /etc/logrotate.conf
    # see "man logrotate" for details
    # rotate log files weekly
    weekly
    
    # keep 4 weeks worth of backlogs	保留4周备份日志
    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		
    	minsize 1M
        rotate 1	保留1份日志文件,每一个月备份一次日志文件
    }
    
    /var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
    }
    
    # system-specific logs may be also be configured here.
    
    常见的一些参数:
    daily		指定转储周期为每天
    monthly		指定转储周期为每月
    weekly		每周轮转一次
    rotate 4	同一个文件最多轮转4次,4次之后就删除该文件
    create 0664 root uttmp	轮转之后创建新文件,权限是0664,属于root用户和utmp组
    dateext		用日期来做轮转之后的文件的后缀名
    compress	用gzip对轮转后的日志进行压缩
    minsize	30K	文件必须大于30k,且周期到了,才会轮转
    size 30K	文件大于30k才会轮转,不论周期是否已到
    missingok	如果日志文件不存在,不报错
    notifempty	如果日志文件是空的,不轮转
    delaycompress	下一次轮转的时候才压缩
    sharedscripts	不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
    prerotate		如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码
    postrotate		轮转完成后执行postrotate和endscript之间的shell代码
    
    [root@server~]# cat /etc/logrotate.d/syslog 
    这个子配置文件,没有指定的参数都会以默认方式轮转
    /var/log/cron
    /var/log/maillog
    /var/log/messages
    /var/log/secure
    /var/log/spooler
    {
        sharedscripts	不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
        postrotate		转换完后执行postrotate和endscirpt之间的shell代码
    	/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    	轮转后对rsyslog的pid进行刷新(但pid其实不变)
        endscript
    }
    思考:为什么轮转后需要对rsyslog的pid进行刷新?
    ll -i 查看文件的inode	
    -HUP 平滑重启
    
    

    不以时间为后缀进行轮转,在/etc/logrotate.conf/ nodateext

    清空环境

    重启服务

    结论

    后刷新pid的话,logger -t "呵呵" "再见!"会写入旧文件(messages.1)里面

    将这句话放在/bin/kill这条命令后面,会写入新文件里

    最新的文件是messages,第一次强制轮转后的旧文件是messages.1,cat messages.1会看到logger -t "呵呵" "再见!",到第二次就成messages.2。而第二次轮转后的messages.1成了第一次轮转后的messages的老文件。(看时间区别)

  • 相关阅读:
    大型门户网站架构设计的可伸缩性(转载)
    geodatabase的类型(翻译)
    在Windows Server 2008上部署SVN代码管理总结
    可以有效改进项目管理技能的十个过程(转载)
    GTD和知识管理
    查询Oracle版本号
    微软产品组里的十一类人(转载)
    在Win7中创建、部署WebService时遇到的访问被拒绝错误解决方法
    小议地理编码(转载)
    在Win7中将我的电脑快捷方式放入任务栏
  • 原文地址:https://www.cnblogs.com/liuwei-xd/p/11022230.html
Copyright © 2011-2022 走看看