logrotate   -  rotates,  compresses,  and    mails system logs

日志轮转 rotate 日志切割
轮转   切割   备份   归档
常见的默认已经定义轮转的日志有:
/var/log/messages
/var/log/cron
/var/log/boot.log
/var/log/maillog
/var/log/secure
vim /etc/logrotate.conf --配置文件
# see "man logrotate" for details
# rotate log files weekly
weekly --默认是一个星期rotate一次
# keep 4 weeks worth of backlogs
rotate 4 --默认保留4个
# use date as a suffix of the rotated file
dateext --表示轮转后,名字后不再以.1,.2这样的结尾,而以时间来结尾,时间格式也可以由dataformat参数来设定
# 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 --这表示/etc/logrotate.d目录下的所有配置文件都生效
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp { --针对wtmp单独的配置,这里是绝对路径
    monthly --一个月rotate一次,取代上面的全局配置里的一个星期一次
    minsize 1M --指定最小大小为1M,才rotate,就算大小到了,但时间没到,不轮转;如果时间到了,就轮转; 这样看设定这个大小就没意义了;但如果只设定大小,不设定时间就有意义了
    create 0664 root utmp --定义创建的为属性为0664,属主为root,属组utmp
    rotate 1 --保留一个
}
 
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}
做原理测试:
把主配置文件里的dateext参数给注释掉,再来做下面的测试;如果不注释,时间也不变的话,就不会轮转出4个文件出来,因为名字一样
# logrotate -f /etc/logrotate.conf --强制轮转,然后可以看到/var/log/下很多时间都开始轮转了
例5:配置/var/log/ssh日志每星期轮转一次,保留2份备份日志,并且最小要2M才轮转,忽略文件不存在的情况
# vim /etc/logrotate.conf --加上下面一段
/var/log/ssh {
weekly
minsize 2M
missingok
create 0600 root root
rotate 2
}
或者上面那段不写到主配置里,建一个子配置文件,把上面那段加进去,也是一样的
# logrotate -f /etc/logrotate.conf --使用此命令去验证
================================
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 --脚本结束
}
--上面的/bin/kill -HUP的这两句其实就是做了/etc/init.d/syslog reload
--为什么轮转之后要reload,因为如果aaa.log轮转成aaa.log.1,又新create一个aaa.log,如果不reload的话,则新的日志还是会记录到aaa.log.1里去,只有reload后,才会记录到新的aaa.log里
结构如下:
sharedscripts
prerotate
xxxxx --轮转之前执行XXXX
endscript
sharedscripts
postrotate
xxxxx --轮转之后执行xxxx
endscript logger -t 'aa' 'bb' --在日志文件里加上一个标记
[root@li test]# tail -n 1 /var/log/messages
May 8 15:33:02 li aa: bb --可以看到刚才加的标记
例七:
      /bin/logger -t 'rotate' 'end'
/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
--在上面例六的基础上,把/bin/logger -t 'rotate' 'end'这句放到kill -HUP两句的前面
再logrotate -f /etc/logrotate.conf强制轮转一下
cat /var/log/messages去查看
发现/var/log/messages里没有轮转前后的信息
cat /var/log/messages.1却看到轮转前后的信息都在这里
==============================
进程知识点补充:
kill -HUP  (pid) --一般指刷新进程,reload
kill -USR1  (pid) --类似HUP
kill -TERM  (pid) --强制杀掉进程
 
通过对httpd软件的进程给不同的信号来理解信号的作用
# yum install httpd* -y
# /etc/init.d/httpd start
# ps -ef |grep httpd |grep -v grep --找到它的父PID
# kill -TERM 父PID   --发现httpd服务被强制关闭
再次启动
# kill -HUP  父PID  --发现所有的子PID都会变化,也就是刷新(相当于就是/etc/init.d/httpd reload)
 
--可以使用下面的两条命令都可以查出httpd有关的进程
[root@li ~]# ps -ef |grep httpd |grep -v grep
[root@li ~]# lsof -i:80
下面几种方式批量杀掉httpd有关的进程
# kill -    .......
# ps -ef |grep httpd |grep -v grep|awk '{print $2}'|xargs kill -
# killall httpd
# pkill httpd
# kill -TERM 父PID --对比kill - 父PID
--区别:以httpd服务为例,kill -9 父PID后,子进程还在,web仍然可以被访问,并且它们的父进程变为1了。你再使用service httpd start|stop 都会报错
--kill -TERM  父PID,所有的子进程都没了,web不能被访问了
 
一个apache的日志切割脚本
#!/bin/bash
year=`date -d '-1 day' +%Y`
month=`date -d '-1 day' +%m`
day=`date -d '-1 day' +%d`
mkdir /var/log/httpd/$year/$month -p mv /var/log/httpd/access_log /var/log/httpd/$year/$month/access_log-$day
touch /var/log/httpd/access_log
kill -HUP `cat /var/run/httpd/httpd.pid`
rhel6默认的MTA(邮件服务器)为postfix
# /etc/init.d/postfix restart
# netstat -ntlup |grep :25
tcp               0.0.0.0:                  0.0.0.0:*                   LISTEN      /master
tcp ::: :::* LISTEN /master
[root@li Desktop]# mail user1    --root用户给本地的user1用户发邮件
Subject: hello user1 --主题
i am root
haha --正文
. -- 点表示结束
EOT
# cat /var/mail/user1 --邮件在这里
 
关于mail ,mailfirst,maillast这几个logrotate自带的发邮件的参数的讨论
先把/etc/logrotate.d/syslog里的配置还原
# echo > /var/mail/root --清空邮件,方便查找(这一步可选,非必要)
以前面做的/var/log/ssh这个来配置做示例
# vim /etc/logrotate.conf
/var/log/ssh {
weekly
minsize 2M
missingok
mail root
create 0600 root root
rotate 2
}
# logrotate -f /etc/logrotate.conf
# cat /var/mail/root
To: root@cluster.com
Subject: /var/log/ssh.     --主题为轮转不存在的那个日志
# vim /etc/logrotate.conf
/var/log/ssh {
weekly
minsize 2M
missingok
mail root
     mailfirst --再加一个mailfirst
create 0600 root root
rotate 2
}
# logrotate -f /etc/logrotate.conf
# cat /var/mail/root
To: root@cluster.com
Subject: /var/log/ssh.1 --主题为just-rotate的日志
---------------
# vim /etc/logrotate.conf
/var/log/ssh {
weekly
minsize 2M
missingok
mail root
    maillast --换成maillast
create 0600 root root
rotate 2
}
# logrotate -f /etc/logrotate.conf
# cat /var/mail/root
To: root@cluster.com
Subject: /var/log/ssh.3 --主题为轮转不存在的那个日志,结果和什么都不加是一样的,是默认值
--可以看到上面它自带的邮件提醒没有什么正文内容,如果要自定义邮件通知,可以按下面的做法
 
# vim /etc/logrotate.d/ssh --对ssh这个子配置文件进行邮件通知

/var/log/ssh {
rotate 2
missingok
minsize 2M
create 0664 root root
sharedscripts
postrotate
kill -HUP `cat /var/run/sshd.pid`
echo "ssh.2 is gone!, ssh.1 变成了ssh.2 ,ssh 变成 了ssh.1 " |mail -s 'ssh日志轮转了' user1
endscript
}
=============================================================
rsync 同步
rsync     remote sync    远程同步     比wget要好
rsync  - faster, flexible replacement for rcp
rsync  - a fast, versatile, remote (and local) file-copying tool
    Wget - The non-interactive network down-loader.
wget http://127.0.0.1/ule07.txt --直接接url  uniform  resource locate(统一资源定位)
[root@li ~]# wget http://10.1.1.35/extra/flash-plugin-10.0.32.18-release.i386.rpm
[root@li ~]# wget ftp://10.1.1.35/ule/ule12.txt
# wget -m -k -np http://10.1.1.35/ule
还支持https(http+ssl+tls)协议  
rsync   特点:
1.可以镜像保存整个目录树和文件系统
2.容易做到保存原有的权限,时间(修改时间,modify time),软硬链接
3.传输效率高,使用同步算法,只比较变化的
4.支持匿名传输,方便网站镜像
 
rsync 参数介绍
-v    verbo
-a 归档模式,递归的方式传输文件,并保持文件的属性
-l 保留软链接
-R   保留相对路径
-H 保留硬链接
-p ,-o,-g,-A   分别保留权限,属主,属组,acl等,但如果加了-a,这些就都包括了
-D 等于--devices --specials 表示支持b,c,s,p类型的文件
-e ‘ssh –p 22’     通过ssh协议安全同步
普通应用:
rsync -av  /home    /backup         --本机上的同步,把/home目录下的内容同步到/backup目录下(包括隐藏文件)
rsync -av /home/ 10.1.1.218:/backup       --把本地的/home目录内容,同步到远端218的/backup目录下
rsync -av 10.1.1.218:/backup/ /backup/      --把远端218的/backup目录下的内容同步到本地的/backup目录
 
1. 同步时保留原路径,也就是把/home同步到/backup会变成/backup/home/*再内容
--原目录后面加不加/也影响你的同步
 
下面这三个有区别:
rsync -av /home/ /backup/      --/home下的内容直接同步到/backup下 (最常用)
 
rsync -av  /home    /backup/
rsync -aRv  /home/    /backup/    --这两个是/home被同步成/backup/home/*
 
# rsync -av /share/120214 /backup/    --被同步成/backup/120214/*
 
# rsync -aRv /share/120214/ /backup/    --被同步成/backup/share/120214/*
2。如果源目录有文件被删除了,那同步的目录是删除还是不删除,是否可以用参数来控制?
--delete
扩展:
man rsyncd.conf
 
服务器端的配置:
1.第一步:
vim /etc/rsyncd.conf
motd file=/etc/rsyncd.welcome
[abc]
path=/test
vim /etc/rsyncd.welcome     --手动建立自己定义的motd文件,并写上欢迎信息
2.第二步:
vim /etc/xinetd.d/rsync     --修改服务启动脚本
service rsync
{
disable = no --yes改为no 打开rsync服务功能
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

第三步:

/etc/init.d/xinetd restart --重启服务
netstat -ntlup |grep 873 --服务端就会有873的端口在监听了
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4080/xinetd
客户端的操作:
# rsync -v 10.1.1.35::     --直接这样可以查看35这个服务器共享了哪些
        "hello today! @_@"
notes         
# rsync -avlR 10.1.1.35::abc /root/Desktop/      --这样同步,是不需要密码的;注意abc为共享名,前面有两个::
 
例二:在上面的基础上加上一些功能    --(这里要求使用man rsyncd.conf的参数来实现,而不是man xinetd.conf使用super daemon的参数来实现)
要求:
1.把日志记录到/var/log/rsyncd.log
2.共享模块要求隐藏(也就是说客户端查看不到这个模块名)    参数list
3.并且同时只能1个客户端连接进行同步这个module   参数max connections
4.只能允许192.168.20.123同步这个module   参数hosts allow
[root@li /]# vim /etc/rsyncd.conf
motd file=/etc/rsyncd.welcome
log file=/var/log/rsyncd.log
[abc]
path=/share/weekend4
list=false
max connections=1
hosts allow=192.168.20.123
rsync的补充:
实现实时同步(也就是源一变化,它就会触发同步)
inotify+rsync
sersync
 
软件路径
/share/soft/inotify-tools-3.13.tar.gz
# tar xf /share/soft/inotify-tools-3.13.tar.gz -C /usr/src/
# cd /usr/src/inotify-tools-3.13/
# ./configure ;make ;make install
--安装完后,就会产生下面两个命令
/usr/local/bin/inotifywait
/usr/local/bin/inotifywatch
 
做测试:
测试本机/test目录里一有(增,删,改,属性改变),就会同步到/test3目录
--使用下面的脚本来做
#vim /tmp/1.sh
#!/bin/bash
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib /test |while read files
do
  rsync -a --delete /test/ /test3/
  echo "$files 被同步" >> /var/log/rsync.log 2>&1
done
#sh /tmp/1.sh  &
再然后对/test进行各种操作,验证可以实时同步到/test3
 
--实现双向的实时同步,也有相关的软件可以专门来做双向的实时同步,但我们就可以用inotify反向再做一次也一样可以简单去实现
==================================================
一:要求
1.使用两台虚拟机和真实机一起做ssh等效性,要求互相ssh不需要密码
2.真实机做日志管理服务器,在/var/log/clientssh.log里记录两台虚拟机的ssh信息
3.真实机对/var/log/clientssh.log配置日志轮转
要求:(1)配置到/etc/logrotate.conf文件里或者配置到/etc/logrotate.d/目录里的子配置文件
   (2)每天轮转一次
   (3)最多保留4个副本
4.真实机在对/var/log/clientssh.log的日志轮转之前自动把/var/log/clientssh.log的最后一个副本(也就是/var/log/clientssh.log.4)文件给cp到/backup/4天前的年/4天前的月/4天前的日期
clientssh.log的格式(比如:今天为2011-04-28,cp的文件名就是/backup/2011/04/24.clientssh.log)
/var/log/clientssh.log {
daily
rotate
sharedscripts
prerotate
cp /var/log/clientssh.log /var/log/`date -d '-4 day' %F`.clientssh.log
kill -HUP `cat /var/run/sshd.pid`
endscript
}
5.真实机配置每月1号的凌晨3点打包/backup目录(格式自定),并自动scp到两台虚拟机的/backup目录下
6.真实机在每月四号(时间应该在当前日志轮转之后,一般logrotate默认被定义在凌晨4点02分,所以这个时间定义在4点02分之后)对上个月的所有日志进行结合分析,只需要分析下面两句结果,并把邮件发给root就可以)
 
linux下有两种比较流行的开源日志分析工具:
awstats
webalizer
 
--上面两个工具就可以直接帮你做日志合并,如果不使用工具的话,要做日志合并,也可以使用下面的方法:
1.直接追加到同一个文件,再用sort命令来排序
2.sort -m -o all.log  1.log 2.log 3.log
--关于日志切割和合并的总结:
一般的切割方法有:
logrotate
写脚本
使用cronolog工具  
 
日志全并的方法
sort      使用日志分析工具awstats,webalizer
7.搭建rsyncd服务,使用它自带的日志,因为日志里的时间比我们现在北京时间要晚8个小时,请写一个脚本对它处理成北京时间
# cat rsycd.log
2012/11/19 00:41:12 [7653] rsync on weekend/ from li.cluster.com (172.16.2.35)
2012/11/19 01:41:12 [7653] building file list
2012/11/19 02:41:27 [7653] sent 466382582 bytes received 27709 bytes total size 466234513
2012/11/19 05:43:05 [7686] rsync on weekend/ from li.cluster.com (172.16.2.35)
2012/11/19 08:43:05 [7686] building file list
2012/11/19 18:43:11 [7686] sent 466382582 bytes received 27709 bytes total size 466234513
# cat rsycd.log |sed -r 's/:/ /g'|awk  '$2<=1 {print $1" 0"$2+8":"$3":"$4" "$5" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13" "$14}    $2>1 && $2<16 {print $1" "$2+8":"$3":"$4" "$5" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13" "$14}   $2>=16 {print $1" 0"$2+8-24":"$2":"$3":"$4" "$5" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13" "$14}'
2012/11/19 08:41:12 [7653] rsync on weekend/ from li.cluster.com (172.16.2.35)
2012/11/19 09:41:12 [7653] building file list
2012/11/19 10:41:27 [7653] sent 466382582 bytes received 27709 bytes total size 466234513
2012/11/19 13:43:05 [7686] rsync on weekend/ from li.cluster.com (172.16.2.35)
2012/11/19 16:43:05 [7686] building file list
2012/11/19 02:18:43:11 [7686] sent 466382582 bytes received 27709 bytes total size 466234513
===================================================================
#!/bin/bash
touch /var/log/newrsyncd.log
sed '' /var/log/rsyncd.log | while read message
do
time=`echo $message | awk '{print $1" "$2}'`
newtime=`date +%Y-%m-%d" "%k:%M:%S -d "$time 8 hour"`
newmessage=`echo $message | awk -F[ '{print $2}'`
if [ `echo $newtime | awk '{print $2}' | awk -F: '{print $1}'` -le 9 ]
then
newtime=`echo $newtime | awk '{print $1" 0"$2}'`
fi
echo $newtime" ["$newmessage >> /var/log/newrsyncd.log
done
mv -f /var/log/newrsyncd.log /var/log/rsyncd.log

09、日志轮转+rsync同步的更多相关文章

  1. rsync同步Nginx日志遇到问题总结

    一.目的 将nginx 日志通过普通用户利用rsync公钥认证的方式实时同步到本地服务器上,之后使用elk程序进行处理. 二.遇到问题及解决方法思路 问题1.文件权限:nginx 的日志默认权限如下: ...

  2. rsync同步工具学习笔记

    rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...

  3. linux rsync同步工具

    linux rsync同步工具 1.rsync介绍rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows ...

  4. 运维工作中常用到的几个rsync同步命令

    作为一个运维工程师,经常可能会面对几十台.几百台甚至上千台服务器,除了批量操作外,环境同步.数据同步也是必不可少的技能.说到“同步”,不得不提的利器就是rsync. 下面结合本人近几年运维工作中对这一 ...

  5. Linux rsync 同步实践

    目录[-] 1. rsync 同步的大致思路 2. rsync的安装 3. rsync的配置 4. rsync的基本操作 服务器端启动 注2. 实时同步 注3. rsync通过linux防火墙 公司网 ...

  6. Ubuntu下多服务器 Rsync同步镜像服务配置

    主服务器:192.168.5.13_ubuntu 从服务器:192.168.5.11_centos ================== 1> 在两台主机上分别安装rsync========== ...

  7. 【Linux】rsync同步文件 & 程序自启动

    rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...

  8. Windows 之间用rsync同步数据(cwRsyncServer配置)

    rsync是一款优秀的数据同步软件,在跨服务器,跨机房,跨国备份服务器的首选工具,下面就来介绍下如何配置安装cwRsyncServer很大多数软件一样是B/C架构,cwRsyncServer是rsyn ...

  9. 实现Rsync同步Nginx前端配置

    近期,由于我们的阿里前端服务器频频受到恶意的流量攻击,导致前端NGINX进入黑洞而无法正常访问公司网站. 按之前的预计方法,采用加速乐及备用全配置前端的作法,将恶意短时流量攻击的损失时间降到最短.现将 ...

随机推荐

  1. win10 anaconda3 python3.6安装tensorflow keras tensorflow_federated详细步骤及在jupyter notebook运行指定的conda虚拟环境

    本文链接:https://blog.csdn.net/weixin_44290661/article/details/1026789071. 安装tensorflow keras tensorflow ...

  2. 6.2 DataFrame

    一.DataFrame概述 在Spark SQL中,DataFrame就是它的数据抽象,对DataFrame进行转换操作. DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅 ...

  3. vue操作select获取option值

    如何实时的获取你选中的值 只用@change件事 @change="changeProduct($event)" 动态传递参数 vue操作select获取option的ID值 如果 ...

  4. [C8] 聚类(Clustering)

    聚类(Clustering) 非监督学习:简介(Unsupervised Learning: Introduction) 本章节介绍聚类算法,这是我们学习的第一个非监督学习算法--学习无标签数据,而不 ...

  5. 解决angular单页面页面底部跳转到新页面滚动条不在顶部的问题

    以上jquery,下面js this.router.events.subscribe((event) => { document.body.scrollTop=0; }); 另一种写法 impo ...

  6. git 入门教程之 git bash 竟然不支持 tree 命令

    开门见山 git bash 是 Windows 用户安装 git 时默认安装的命令行工具,不仅界面漂亮功能也不错,大多数情况下可以替代 Windows 原生的 cmd 命令行. 然而,git bash ...

  7. git--github使用

    什么是github GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub. GitHub于2008年4月10日正式上线,除了Git代码仓 ...

  8. Codeforces Round #554 (Div. 2) C 数论

    https://codeforces.com/contest/1152/problem/C 题意 a和b,找到k,使得lcm(a+k,b+k)最小(a,b:1e9) 题解 设gcd=gcd(a+k,b ...

  9. 重构与模式 (Joshua Kerievsky 著)

    第1章 本书的写作缘由 第2章 重构 第3章 模式 第4章 代码坏味 第5章 模式导向的重构目录 第6章 创建 第7章 简化 第8章 泛化 第9章 保护 第10章 聚集操作 第11章 实用重构 参考文 ...

  10. React服务器端渲染框架next.js项目实战及部署上下文context问题解决办法

    在前段时间折腾过搭建react服务器端项目架构,点击这里了解下,正好最近有个重构PC网站的需求,考虑SEO等因素.在做技术选型的时候决定采用nextjs.项目开发过程中,nextjs的体验非常棒,个人 ...