zoukankan      html  css  js  c++  java
  • 学习笔记:CentOS7学习之十七: Linux计划任务与日志的管理

    学习笔记:CentOS7学习之十七: Linux计划任务与日志的管理


    本文用于记录学习体会、心得,兼做笔记使用,方便以后复习总结。内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK老师和学神教育的优质教学。希望各位因学习需求而要进行转载时,能申明出处为学神教育,谢谢各位!


    17.1 计划任务-at-cron-计划任务使用方法

    计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据

    CROND:这个守护进程是为了周期性执行任务或处理等待事件而存在

    任务调度分两种:系统任务调度,用户任务调度

    计划任务的安排方式分两种:

    • 一种是定时性的,也就是例行。就是每隔一定的周期就要重复来做这个事情,通过at实现
    • 一种是突发性的,就是这次做完了这个事,就没有下一次了,临时决定,只执行一次的任务,通过crontab实现

    at和crontab这两个命令:

    • at:它是一个可以处理仅执行一次就结束的指令
    • crontab:它是会把你指定的工作或任务,比如:脚本等,按照你设定的周期一直循环执行下去

    17.1.1 at计划任务的使用

    语法格式: at 时间 ;服务:atd

    如下所示:

    centos7下

    
    [root@centos-7-24 ~]# systemctl start atd # 启动atd服务
    [root@centos-7-24 ~]# systemctl status atd # 查看atd服务状态
    ● atd.service - Job spooling tools
       Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
       Active: active (running) since 五 2019-06-21 00:11:10 CST; 3min 37s ago #状态为active表示已经启动
     Main PID: 7149 (atd)
        Tasks: 1
       CGroup: /system.slice/atd.service
               └─7149 /usr/sbin/atd -f
    
    6月 21 00:11:10 centos-7-24 systemd[1]: Started Job spooling tools.
    [root@centos-7-24 ~]# systemctl enable atd #将atd服务加入开机启动
    [root@centos-7-24 ~]# systemctl list-unit-files --type service|grep atd #查看atd服务开机状态,显示enable,成功
    atd.service                                   enabled 
    rpc-statd-notify.service                      static  
    rpc-statd.service                             static  
    
    

    centos6下

    
    [root@centos6-22 ~]# service atd start #启动atd服务
    [root@centos6-22 ~]# service atd status #查看atd服务状态
    atd (pid  11139) is running...
    [root@centos6-22 ~]# chkconfig --list  |  grep atd #查看atd自启动设置
    atd            	0:off	1:off	2:off	3:off	4:off	5:off	6:off
    [root@centos6-22 ~]# chkconfig atd on #开启atd服务开机自启动
    [root@centos6-22 ~]# chkconfig --list  |  grep atd #在runlevel 2、3、4、5下均为on说明开机自启动已经设置好了
    atd            	0:off	1:off	2:on	3:on	4:on	5:on	6:off
    
    
    

    实例:使用at创建计划任务

    [root@centos6-22 ~]# date #查看当前时间
    Fri Jun 21 00:36:36 PDT 2019
    [root@centos6-22 ~]# at 00:39 
    at> mkdir /test  #输入需要执行的命令
    at> touch /test/attest1.txt
    at> <EOT>  #crtl+D结束
    job 1 at 2019-06-21 00:39
    [root@centos6-22 ~]# at -l #查看计划任务
    1	2019-06-21 00:39 a root
    [root@centos6-22 ~]# atq #查看计划任务
    1	2019-06-21 00:39 a root
    [root@centos6-22 ~]# ll /test/ #查看发现执行成功
    total 0
    -rw-r--r--. 1 root root 0 Jun 21 00:39 attest1.txt
    [root@centos6-22 ~]# at -l #执行完成后,计划任务清空
    
    

    17.1.2 查看和删除at将要执行的计划任务

    查看,只能看到还没有执行的。如果这个任务已经开始执行或者执行完成了,是看不到的

    如下所示:

    
    [root@centos6-22 ~]# at 03:20am #创建at任务
    at> rm -rf /test/attest1.txt
    at> cp /etc/passwd /test/
    at> echo "ok"  
    at> <EOT>
    job 2 at 2019-06-21 03:20
    [root@centos6-22 ~]# at -l #查看at任务列表
    2	2019-06-21 03:20 a root
    

    at任务列表说明

    任务编号 执行的时间 队列 执行者
    2 2019-06-21 03:20 a root
    [root@centos6-22 ~]# at -c 2 #查看编号为2的at任务详情
    #!/bin/sh
    # atrun uid=0 gid=0
    # mail yangjie 0
    umask 22
    HOSTNAME=centos6-22; export HOSTNAME
    SHELL=/bin/bash; export SHELL
    HISTSIZE=1000; export HISTSIZE
    USER=root; export USER
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
    MAIL=/var/spool/mail/root; export MAIL
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
    PWD=/root; export PWD
    LANG=en_US.UTF-8; export LANG
    SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass; export SSH_ASKPASS
    HISTCONTROL=ignoredups; export HISTCONTROL
    SHLVL=1; export SHLVL
    HOME=/root; export HOME
    LOGNAME=root; export LOGNAME
    LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
    G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
    XAUTHORITY=/root/.xauth9hNSXA; export XAUTHORITY
    cd /root || {
    	 echo 'Execution directory inaccessible' >&2
    	 exit 1
    }
    ${SHELL:-/bin/sh} << 'marcinDELIMITER44b61201' #这里时at任务的详细类容
    rm -rf /test/attest1.txt
    cp /etc/passwd /test/
    echo "ok"
    
    marcinDELIMITER44b61201
    
    [root@centos6-22 ~]# ls /var/spool/at/ #at计划任务在/var/spool文件夹下
    a00002018d02ec  spool
    [root@centos6-22 ~]# tail -5 /var/spool/at/a00002018d02ec  #查看末尾5行就能查看任务详细内容
    rm -rf /test/attest1.txt
    cp /etc/passwd /test/
    echo "ok"
    
    marcinDELIMITER44b61201
    
    

    删除at计划任务

    语法: atrm 任务编号

    
    [root@centos6-22 ~]# at -l
    3	2019-06-21 04:00 a root
    2	2019-06-21 03:20 a root
    [root@centos6-22 ~]# atrm 3 #删除at定时任务3
    [root@centos6-22 ~]# at -l
    2	2019-06-21 03:20 a root
    
    
    

    17.1.3 crontab定时任务的使用

    crond命令定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。

    linux任务调度的工作主要分为以下两类:

    系统执行的工作:系统周期性所要执行的工作,如更新whatis数据库 updatedb数据库,日志定期切割,收集系统状态信息,/tmp定期清理
    用户执行的工作:定时备份数据库等

    启动crond服务:

    
    [root@CentOS 7-23 ~]# systemctl start crond #启动crond服务
    [root@CentOS 7-23 ~]# systemctl enable crond #设置crond开机启动
    
    

    17.1.4 cron命令参数介绍

    crontab的参数:

    crontab -u hr #指定hr用户的cron服务
    crontab -l #列出当前用户下的cron服务的详细内容
    crontab -u yangjie -l #列出指定用户yangjie下的cron服务的详细内容
    crontab -r #删除cron服务
    crontab -e #编辑cron服务

    例如:

    crontab -u root -l     # root查看自己的cron计划任务
    crontab -u san -r      # root想删除san的cron计划任务
    
    

    cron -e 编辑时的语法,如下图所示:

    星期日用0或7表示

    一行对应一个任务,特殊符号的含义:

    * 代表取值范围内的数字 (任意/每)
    / 指定时间的间隔频率 */10 0-23/2
    - 代表从某个数字到某个数字 8-17
    分开几个离散的数字 6,10-13,20

    17.1.5 创建计划任务

    例1:每天凌晨2点1分开始备份数据

    
    [root@CentOS 7-23 ~]# crontab -e #创建当前用户root的定时任务
    ...
    1 2 * * * tar czvf /opt/grub2.tar.gz /boot/grub2
    ...
    
    no crontab for root - using an empty one
    crontab: installing new crontab
    
    
    [root@CentOS 7-23 ~]# crontab -u yangjie -l #查看用户yangjie的定时任务
    30 0 * * 0 cp /etc/passwd /home/yangjie
    
    
    

    注:所有用户的计划任务,都会在/var/spool/cron/下产生对应的文件

    
    [root@CentOS 7-23 ~]# ll /var/spool/cron
    总用量 8
    -rw-------. 1 root root 49 6月  22 00:27 root
    -rw-------. 1 root root 40 6月  22 00:37 yangjie
    
    

    17.1.6 系统级别的计划任务

    
    [root@CentOS 7-23 ~]# ll /etc/crontab #查看系统级别的定时任务
    -rw-r--r--. 1 root root 451 6月  10 2014 /etc/crontab
    [root@CentOS 7-23 ~]# vim /etc/crontab #查看系统界别的定时任务列表
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    
    

    也可以直接在/etc/crontab中添加计划任务

    使用crontab命令的注意事项:

    环境变量的问题

    清理你的邮件日志 ,比如使用重定向 >/dev/null 2>&1

    
    [root@CentOS 7-23 ~]# ll /etc/cron*
    -rw-------. 1 root root   0 11月 20 2018 /etc/cron.deny #控制用户是否能做计划任务的文件;
    -rw-r--r--. 1 root root 451 6月  22 00:40 /etc/crontab #主配置文件 也可添加任务;
    
    /etc/cron.d: #是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面。
    总用量 16
    -rw-r--r--. 1 root root 128 11月 20 2018 0hourly
    -rw-r--r--. 1 root root 108 10月 30 2018 raid-check
    -rw-r--r--. 1 root root 459 10月 16 2018 sa-update
    -rw-------. 1 root root 235 10月 31 2018 sysstat
    
    /etc/cron.daily: #每天执行的文件在这个目录下面
    总用量 12
    -rwx------. 1 root root 219 10月 31 2018 logrotate
    -rwxr-xr-x. 1 root root 618 10月 30 2018 man-db.cron
    -rwx------. 1 root root 208 4月  11 2018 mlocate
    
    /etc/cron.hourly: #每小时执行的文件在这个目录下
    总用量 8
    
    
    

    还有:

    cron.monthly/ #每月执行的脚本;

    cron.weekly/ #每周执行的脚本;

    17.1.7 常见的计划任务写法和案例

    1、每天晚上21:00 重启apache

    0 21 * * * systemctl restart httpd # 0 21 * * * /etc/init.d/httpd restart

    2、每月1、10、22日的4 : 45重启apache

    45 4 1,10,22 * * /etc/init.d/httpd restart

    3、每月1到10日的4 : 45重启apache

    45 4 1-10 * * /etc/init.d/httpd restart

    4、每隔两天的上午8点到11点的第3和第15分钟重启apache

    3,15 8-11 */2 * * /etc/init.d/httpd restart

    5、晚上11点到早上7点之间,每隔一小时重启apache

    0 23-7/1 * * * /etc/init.d/httpd restart

    6、周一到周五每天晚上 21:15 寄一封信给 root@panda:

    15 21 * * 1-5 mail -s "hi" root@panda < /etc/fstab

    7、案例要求:

    每天2:00备份/etc/目录到/tmp/backup下面

    将备份命令写入一个脚本中

    每天备份文件名要求格式: 2017-08-19_etc.tar.gz

    在执行计划任务时,不要输出任务信息

    存放备份内容的目录要求只保留三天的数

    
    [root@CentOS 7-23 ~]# mkdir /tmp/backup #创建/tmp/backup文件夹
    [root@CentOS 7-23 ~]# vim backup.sh #编辑backup脚本
    #!/bin/bash
    
    tar -czvf /tmp/backup/`date +'%Y-%m-%d'`_etc.tar.gz /etc/ #创建以日期+_etc.tar.gz命名的/etc/归档文件
    
    find /tmp/backup/ -name *_etc.tar.gz -mtime +3 -exec rm -rf {}; #删除/tmp/backup下修改日期超过3天的归档文件
    
    [root@CentOS 7-23 ~]# chmod 755 backup.sh #修改backup.sh文件的执行权限
    [root@CentOS 7-23 ~]# crontab -u root -e #为用户root添加定时任务
    1 2 * * * tar czxf /opt/grub2.tar.gz /boot/grub2
    0 2 * * * /root/backup.sh & > /dev/null #明天02:00执行backup.sh同时不显示任何信息
    
    crontab: installing new crontab
    [root@CentOS 7-23 ~]# crontab -l #查看定时任务列表
    1 2 * * * tar czxf /opt/grub2.tar.gz /boot/grub2
    0 2 * * * /root/backup.sh & > /dev/null
    
    

    17.2 日志的种类和记录的方式-自定义ssh服务日志类型和存储位置

    在centos7中,系统日志消息由两个服务负责处理:systemd-journald和rsyslog

    17.2.1 常见日志文件的作用

    系统日志文件概述:/var/log目录保管由rsyslog维护的,里面存放的一些特定于系统和服务的日志文件

    日志文件 用途
    /var/log/message 大多数系统日志消息记录在此处。有也例外的:如与身份验证,电子邮件处理相关的定期作业任务等
    /var/log/secure 安全和身份验证相关的消息和登录失败的日志文件。 ssh远程连接产生的日志
    /var/log/maillog 与邮件服务器相关的消息日志文件
    /var/log/cron 与定期执行任务相关的日志文件
    /var/log/boot.log 与系统启动相关的消息记录
    /var/log/dmesg 与系统启动相关的消息记录

    例1:查看哪个IP地址经常暴力破解系统用户密码

    [root@centos-7-24 ~]# ssh root@192.168.234.23 #在24上远程登陆23,故意输错三次密码
    The authenticity of host '192.168.234.23 (192.168.234.23)' can't be established.
    ECDSA key fingerprint is SHA256:y4YpS7A4EB9G7GdT8weTstd5C4Y7iic8CoeTUy7Dc04.
    ECDSA key fingerprint is MD5:32:66:6e:7a:76:ef:d7:c4:e9:0a:d3:f8:fe:33:7c:11.
    Are you sure you want to continue connecting (yes/no)? y
    Please type 'yes' or 'no': yes
    Warning: Permanently added '192.168.234.23' (ECDSA) to the list of known hosts.
    root@192.168.234.23's password: 
    Permission denied, please try again.
    root@192.168.234.23's password: 
    Permission denied, please try again.
    root@192.168.234.23's password: 
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    
    [root@CentOS 7-23 ~]# grep Failed /var/log/secure #在23上查看登陆失败信息
    Jun 24 21:44:03 CentOS 7-23 sshd[18379]: Failed password for root from 192.168.234.24 port 59360 ssh2
    Jun 24 21:44:09 CentOS 7-23 sshd[18379]: Failed password for root from 192.168.234.24 port 59360 ssh2
    Jun 24 21:44:13 CentOS 7-23 sshd[18379]: Failed password for root from 192.168.234.24 port 59360 ssh2
    
    [root@CentOS 7-23 ~]# grep Failed /var/log/secure|awk '{print $12}'|uniq -c
    
    #awk '{print $11}'  #以空格做为分隔符,打印第11列的数据
    #uniq命令用于报告或忽略文件中的重复行,-c或——count:在每列旁边显示该行重复出现的次数;
    
          3 192.168.234.24
    
    

    例2:/var/log/wtmp文件的作用

    /var/log/wtmp也是一个二进制文件,记录每个用户的登录次数和持续时间等信息。
    可以用last命令输出wtmp中内容: last 显示到目前为止,成功登录系统的记录

    
    [root@CentOS 7-23 ~]# last #使用last查看系统最近的登陆信息
    yangjie  pts/0        :0               Mon Jun 24 21:40   still logged in   
    yangjie  :0           :0               Mon Jun 24 21:40   still logged in   
    reboot   system boot  3.10.0-693.el7.x Mon Jun 24 21:39 - 21:51  (00:12)    
    yangjie  pts/1        :0               Sat Jun 22 01:08 - 01:34  (00:26)    
    yangjie  pts/0        :0               Sat Jun 22 00:18 - 01:34  (01:15)    
    yangjie  :0           :0               Sat Jun 22 00:18 - down   (01:16) 
    
    
    [root@CentOS 7-23 ~]# last -f /var/log/wtmp
    yangjie  pts/0        :0               Mon Jun 24 21:40   still logged in   
    yangjie  :0           :0               Mon Jun 24 21:40   still logged in   
    reboot   system boot  3.10.0-693.el7.x Mon Jun 24 21:39 - 21:54  (00:15)    
    yangjie  pts/1        :0               Sat Jun 22 01:08 - 01:34  (00:26)    
    yangjie  pts/0        :0               Sat Jun 22 00:18 - 01:34  (01:15)    
    yangjie  :0           :0               Sat Jun 22 00:18 - down   (01:16) 
    
    

    例3:使用 /var/log/btmp文件查看暴力破解系统的用户

    /var/log/btmp文件是记录错误登录系统的日志。如果发现/var/log/btmp日志文件比较大,大于1M,就算大了,就说明很多人在暴力破解ssh服务,此日志需要使用lastb程序查看

    
    [root@CentOS 7-23 ~]# ll /var/log/btmp
    -rw-------. 1 root utmp 1536 6月  24 21:44 /var/log/btmp
    
    [root@CentOS 7-23 ~]# lastb
    root     ssh:notty    192.168.234.24   Mon Jun 24 21:44 - 21:44  (00:00)    
    root     ssh:notty    192.168.234.24   Mon Jun 24 21:44 - 21:44  (00:00)    
    root     ssh:notty    192.168.234.24   Mon Jun 24 21:44 - 21:44  (00:00)    
    root     pts/0                         Mon Jun 24 21:42 - 21:42  (00:00)    
    
    btmp begins Mon Jun 24 21:42:00 2019
    
    #发现后,使用防火墙,拒绝掉:命令如下:
    iptables -A INPUT -i eth0 -s. 192.168.234.24 -j DROP
    
    

    17.2.2 日志的记录方式

    日志的命名规则:分类-》级别,形式为:分类.级别,分别说明如下::

    日志的分类:

    分类 说明
    daemon 后台进程相关
    kern 内核产生的信息
    lpr 打印系统产生的
    authpriv 安全认证
    cron 定时相关
    mail 邮件相关
    syslog 日志服务本身的
    news 新闻系统
    local0~7 自定义的日志设备

    备注:local0-local7 8个系统保留的类, 供其它的程序使用或者是用户自定义

    日志的级别: 轻>重

    编码 优先级 严重性
    7 debug 信息对开发人员调试应用程序有用,在操作过程中无用
    6 info 正常的操作信息,可以收集报告,测量吞吐量等
    5 notice 注意,正常但重要的事件
    4 warning 警告,提示如果不采取行动。将会发生错误。比如文件系统使用90%
    3 err 错误,阻止某个模块或程序的功能不能正常使用
    2 crit 关键的错误,已经影响了整个系统或软件不能正常工作的信息
    1 alert 警报,需要立刻修改的信息
    0 emerg 紧急,内核崩溃等严重信息

    17.2.3 rsyslog日志服务

    rhel5 ->服务名称syslog ->配置文件 /etc/syslog.conf
    rhel6-7 ->服务名称rsyslog ->配置文件 /etc/rsyslog.conf

    查看日志的配置文件信息:

    
    [root@CentOS 7-23 ~]# vim /etc/rsyslog.conf
    ....
    
    # Provides UDP syslog reception
    #$ModLoad imudp
    #$UDPServerRun 514 #允许514端口接收使用UDP协议转发过来的日志
    
    # Provides TCP syslog reception
    #$ModLoad imtcp
    #$InputTCPServerRun 514 #允许514端口接收使用TCP协议转发过来的日志
    ....
    
    ....
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    # 所有的类别级别是info以上 除了mail,authpriv,cron
    
    # The authpriv file has restricted access.
    authpriv.*                                              /var/log/secure
    #所有的认证的信息存放到/var/log/secure
    
    # Log all the mail messages in one place.
    mail.*                                                  -/var/log/maillog
    #所有的邮件相关的信息存放到/var/log/maillog,“- ”号: 邮件的信息比较多,现将数据存储到内存,达到一定大小,全部写到硬盘.有利于减少I/O进程的开销,数据存储在内存,如果关机不当数据消失
    
    
    # Log cron stuff
    cron.*                                                  /var/log/cron 
    #计划任务相关的信息存放到 /var/log/cron
    
    # Everybody gets emergency messages
    *.emerg                                                 :omusrmsg:*
    
    
    # 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
    #开机时显示的信息存放到/var/log/boot.log
    

    17.2.4 日志输入的规则

    .info 大于等于info级别的信息全部记录到某个文件

    .=级别 仅记录等于某个级别的日志

    	例:.=info  只记录info级别的日志
    

    .!级别 除了某个级别意外,记录所有的级别信息

    	例.!err  除了err外记录所有
    

    .none 指的是排除某个类别 例: mail.none 所有mail类别的日志都不记录

    17.2.5 自定义ssh服务的日志类型和存储位置

    
    [root@CentOS 7-23 ~]# vim /etc/rsyslog.conf
    
    #添加:local0.*                 /var/log/sshd.log #把local0级别的所有日志添加到/var/log/sshd.log
    
    

    定义ssh服务的日志类别为local0,编辑sshd服务的主配置文件

    
    [root@CentOS 7-23 ~]# vim /etc/ssh/sshd_config
    [root@CentOS 7-23 ~]# ll /var/log/sshd.log
    -rw-------. 1 root root 151 6月  24 23:12 /var/log/sshd.log #查看发现/var/log下面存在sshd.log文件,说明修改成功
    [root@CentOS 7-23 ~]# cat /var/log/sshd.log
    Jun 24 23:12:24 CentOS 7-23 sshd[20137]: Server listening on 0.0.0.0 port 22.
    Jun 24 23:12:24 CentOS 7-23 sshd[20137]: Server listening on :: port 22.
    
    

    17.3 日志切割-搭建远程日志收集服务器

    17.3.1 日志的切割

    在linux下的日志会定期进行滚动增加,我们可以在线对正在进行回滚的日志进行指定大小的切割(动态),如果这个日志是静态的。比如没有应用向里面写内容。那么我们也可以用split工具进行切割;其中Logrotate支持按时间和大小来自动切分,以防止日志文件太大。

    logrotate配置文件主要有:

    /etc/logrotate.conf 以及 /etc/logrotate.d/ 这个子目录下的明细配置文件。

    logrotate的执行由crond服务调用的。

    
    [root@CentOS 7-23 ~]# vim /etc/cron.daily/logrotate  #查看logrotate脚本内容
    
    #!/bin/sh
    
    /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf #调用/etc/logrotate.conf文件
    EXITVALUE=$?
    if [ $EXITVALUE != 0 ]; then
        /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
    fi
    exit 0
    
    [root@CentOS 7-23 ~]# less /etc/logrotate.conf #查看/etc/logrotate.conf文件
    
    # 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 #配置有wtmp和btmp日志的logrotate日志切割配置
    /var/log/wtmp {
        monthly
        create 0664 root utmp
            minsize 1M
        rotate 1
    }
    
    /var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
    }
    
    # system-specific logs may be also be configured here.
    
    [root@CentOS 7-23 ~]# ll /etc/logrotate.d #查看/etc/logrotate.d下的明细配置文件,存在不同服务的logrotate配置文件
    总用量 64
    -rw-r--r--. 1 root root   91 4月  11 2018 bootlog
    -rw-r--r--. 1 root root  160 9月  15 2017 chrony
    -rw-r--r--. 1 root root   71 4月  11 2018 cups
    -rw-r--r--. 1 root root  172 9月  30 2016 iscsiuiolog
    -rw-r--r--. 1 root root  165 5月  29 08:16 libvirtd
    -rw-r--r--. 1 root root  142 5月  29 08:16 libvirtd.qemu
    -rw-r-----. 1 root named 514 6月   5 03:26 named
    -rw-r--r--. 1 root root  106 4月  11 2018 numad
    -rw-r--r--. 1 root root  136 6月  10 2014 ppp
    -rw-r--r--. 1 root root  408 8月   3 2017 psacct
    -rw-r--r--. 1 root root  115 10月 31 2018 samba
    -rw-r--r--. 1 root root   68 10月 16 2018 sa-update
    -rw-r--r--. 1 root root  224 10月 30 2018 syslog
    -rw-r--r--. 1 root root  188 10月 31 2018 vsftpd
    -rw-r--r--. 1 root root  100 10月 31 2018 wpa_supplicant
    -rw-r--r--. 1 root root  103 11月  5 2018 yum
    [root@CentOS 7-23 ~]# cat /etc/logrotate.d/yum #查看yum服务的logrotate配置文件
    /var/log/yum.log {
        missingok #在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误
        notifempty #如果日志文件为空,轮循不会进行
        maxsize 30k #文件超过30k进行日志切割
        yearly #每年执行一次日志回滚
        create 0600 root root #重建用户为root,属组为root,执行权限为0600的/var/log/yum.log文件
    }
    
    

    logrotate程序每天由cron在指定的时间(/etc/crontab)启动

    日志是很大的,如果让日志无限制的记录下去 是一件很可怕的事情,日积月累就有几百兆占用磁盘的空间。

    因此需要做日志切割,当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志.

    17.3.2 实战演示

    编辑配置文件

    
    [root@CentOS 7-23 ~]# vim /etc/logrotate.conf
    
    # 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
    
    # 说明:(全局参数)
    #weekly :	  每周执行回滚,或者说每周执行一次日志回滚
    #rotate: 	  表示日志切分后历史文件最多保存离现在最近的多少份   [rəʊˈteɪt] 旋转
    #create :   指定新创建的文件的权限与所属主与群组
    #dateext :  使用日期为后缀的回滚文件  #可以去/var/log目录下看看
    
    # RPM packages drop log rotation information into this direct
    ory
    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
    }
    
    /var/log/btmp {  #	指定的日志文件的名字和路径
        missingok #如果文件丢失,将不报错
        monthly #每月轮换一次
        create 0600 root utmp 设置btmp这个日志文件的权限,属主,属组
        minsize 1M #文件超过1M进行回滚,所以大家要知道它不一定每个月都会进行分割,要看这个文件大小来定
        rotate 1  #日志切分后历史文件最多保存1份,不含当前使用的日志
    }
    
    # system-specific logs may be also be configured here.
    
    

    其它参数说明:

    • monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
    • rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
    • compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
    • delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
    • missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
    • notifempty: 如果日志文件为空,轮循不会进行。
    • create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
    • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

    /var/lib/logrotate/status中默认记录logrotate上次轮换日志文件的时间

    [root@CentOS 7-23 ~]# vim /var/lib/logrotate/logrotate.status
    logrotate state -- version 2
    "/var/log/yum.log" 2019-6-20-21:0:0
    "/var/log/cups/page_log" 2019-6-20-21:0:0
    "/var/log/sa-update.log" 2019-6-20-21:0:0
    "/var/log/cups/error_log" 2019-6-20-21:0:0
    "/var/named/data/named.run" 2019-6-20-21:0:0
    "/var/log/boot.log" 2019-6-20-21:0:0
    "/var/log/cups/access_log" 2019-6-20-21:0:0
    "/var/log/wtmp" 2019-6-20-21:0:0
    "/var/log/chrony/*.log" 2019-6-20-21:0:0
    "/var/log/spooler" 2019-6-20-21:0:0
    "/var/log/btmp" 2019-6-20-21:0:0
    "/var/log/xferlog" 2019-6-20-21:0:0
    "/var/log/iscsiuio.log" 2019-6-20-21:0:0
    "/var/log/maillog" 2019-6-20-21:0:0
    "/var/log/libvirt/libvirtd.log" 2019-6-20-21:0:0
    "/var/log/libvirt/qemu/*.log" 2019-6-20-21:0:0
    "/var/log/wpa_supplicant.log" 2019-6-20-21:0:0
    "/var/log/secure" 2019-6-20-21:0:0
    <lib/logrotate/logrotate.status" 25L, 984C 1,1
    
    

    17.3.3 使用 logrotate 进行ssh日志分割

    定义了ssh日志存储在/var/log/sshd的基础上执行:

    
    [root@CentOS 7-23 ~]# vim /etc/logrotate.d/sshd #创建一个sshd的logrotate配置文件
    /var/log/sshd.log{
    missingok
    weekly
    create 0600 root root
    minsize 1M
    rotate 3
    }
    
    
    
    [root@CentOS 7-23 ~]# systemctl restart rsyslog #重启日志服务
    [root@CentOS 7-23 ~]# logrotate -vf /etc/logrotate.d/sshd 
    #强制轮循,也就是说即使轮循条件没有满足,也可以通过加-f强制让logrotate轮循日志文件
    reading config file /etc/logrotate.d/sshd
    Allocating hash table for state file, size 15360 B
    
    Handling 1 logs
    
    rotating pattern: /var/log/sshd.log forced from command line (3 rotations)
    empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
    considering log /var/log/sshd.log
      log needs rotating
    rotating log /var/log/sshd.log, log->rotateCount is 3
    dateext suffix '-20190625'
    glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    renaming /var/log/sshd.log.3 to /var/log/sshd.log.4 (rotatecount 3, logstart 1, i 3), 
    renaming /var/log/sshd.log.2 to /var/log/sshd.log.3 (rotatecount 3, logstart 1, i 2), 
    renaming /var/log/sshd.log.1 to /var/log/sshd.log.2 (rotatecount 3, logstart 1, i 1), 
    renaming /var/log/sshd.log.0 to /var/log/sshd.log.1 (rotatecount 3, logstart 1, i 0), 
    old log /var/log/sshd.log.0 does not exist
    fscreate context set to system_u:object_r:var_log_t:s0
    renaming /var/log/sshd.log to /var/log/sshd.log.1
    creating new /var/log/sshd.log mode = 0600 uid = 0 gid = 0
    removing old log /var/log/sshd.log.4
    set default create context
    [root@CentOS 7-23 ~]# ll /var/log/sshd* #轻质轮循4次后,查看sshd日志文件,发现只保存了最近的4的日志文件
    -rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log
    -rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log.1
    -rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log.2
    -rw-------. 1 root root 0 6月  25 00:16 /var/log/sshd.log.3
    
    

    17.3.4 日志配置步骤总结:

    在/etc/rsyslog.conf文件中配置相应等级的存放位置或文件,如配置local0.*等级日志存放到/var/log/sshd.log

    在/etc/相应服务的配置文件中配置日志的等级,如在/etc/ssh/sshd_config文件中配置日志等级为local0

    在/etc/logrotate.d目录中配置sshd服务的日志分割配置文件,如配置/etc/logrotate.d/ssh文件

    17.3.5 配置远程日志服务器-实现日志集中的管理

    使用23作为server端配置

    
    [root@CentOS 7-23 ~]# vim /etc/rsyslog.conf #修改rsyslog.conf配置文件
    
    # 改:19 #$ModLoad imtcp
    #     20 #$InputTCPServerRun 514
    #为:
    #19 $ModLoad imtcp
    #20 $InputTCPServerRun 514
    
    [root@CentOS 7-23 ~]# systemctl restart rsyslog #重启rsyslog服务
    [root@CentOS 7-23 ~]# netstat -anutp|grep 514 #查看服务监听状态
    tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      21476/rsyslogd      
    tcp6       0      0 :::514                  :::*                    LISTEN      21476/rsyslogd      
    [root@CentOS 7-23 ~]# getenforce 
    Enforcing
    [root@CentOS 7-23 ~]# setenforce 0 #关闭selinux功能
    [root@CentOS 7-23 ~]# getenforce
    Permissive
    [root@CentOS 7-23 ~]# systemctl stop firewalld #关闭防火墙
    [root@CentOS 7-23 ~]# systemctl status firewalld #查看防火墙状态
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
       Active: inactive (dead) since 二 2019-06-25 00:36:54 CST; 23s ago
         Docs: man:firewalld(1)
      Process: 6523 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
     Main PID: 6523 (code=exited, status=0/SUCCESS)
    
    6月 24 21:39:27 CentOS7-23 systemd[1]: Starting firewalld... 
    6月 24 21:39:34 CentOS7-23 systemd[1]: Started firewalld ...
    6月 25 00:36:54 CentOS 7-23 systemd[1]: Stopping firewall...
    6月 25 00:36:54 CentOS 7-23 systemd[1]: Stopped firewalld...
    Hint: Some lines were ellipsized, use -l to show in full.
    [root@CentOS 7-23 ~]# iptables -F #清空防火墙规则
    
    

    使用24作为cilent端配置

    [root@centos-7-24 ~]# vim /etc/rsyslog.conf #编辑/etc/rsyslog.conf文件
    
    *.* @@192.168.234.23:514 #在末尾添加
    
    [root@centos-7-24 ~]# systemctl restart rsyslog.service #重启rsyslog服务
    [root@centos-7-24 ~]# logger "aaaaa" #在客户端24进行测试,使用logger模拟发送的日志“aaaaa”
    
    

    在23服务端动态查看日志

    
    [root@CentOS 7-23 ~]# tail -f /var/log/messages|grep centos --color 
    #在23上动态查看message日志文件,发现24日志发送成功
    Jun 25 00:50:20 centos-7-24 systemd: Stopping System Logging Service...
    Jun 25 00:50:20 centos-7-24 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="21170" x-info="http://www.rsyslog.com"] exiting on signal 15.
    Jun 25 00:50:20 centos-7-24 systemd: Stopped System Logging Service.
    Jun 25 00:50:20 centos-7-24 systemd: Starting System Logging Service...
    Jun 25 00:50:20 centos-7-24 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="21265" x-info="http://www.rsyslog.com"] start
    Jun 25 00:50:20 centos-7-24 systemd: Started System Logging Service.
    Jun 25 00:51:03 centos-7-24 yangjie: aaaaa
    

    注:
    总结:服务器使用udp协议,客户端只能使用的配置文件中这一行只能有一个@
    . @192.168.234.24:514
    服务器使用tcp协议,客户端只能使用的配置文件中这一行必须有两个@@
    . @@192.168.234.24:514


    END
    2019/6/25 0:58:21
  • 相关阅读:
    【elementUI系列】在elementUI中新建FormData对象组合上传图片和文件的文件对象,同时需要携带其他参数
    sau交流学习社区—vue总结:使用vue的computed属性实现监控变量变化,使用vue的watch属性监控变量变化从而实现其他业务
    Docker Hub工作流程-Docker for Web Developers(6)
    用Markdown格式写一份前端简历
    使用Dockerfile构建镜像-Docker for Web Developers(5)
    掌握Docker命令-Docker for Web Developers(4)
    Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)
    使用Docker-Docker for Web Developers(2)
    运行第一个Docker容器-Docker for Web Developers(1)
    前端学习杂谈
  • 原文地址:https://www.cnblogs.com/yj411511/p/11080556.html
Copyright © 2011-2022 走看看