09、日志轮转+rsync同步

--

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 --rhel6里的新参数,表示轮转后,名字后不再以.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‘ --在日志文件里加上一个标记

[[email protected] 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却看到轮转前后的信息都在这里

==============================

进程知识点补充:

-9是参数信号量,以后学到的比较大型的软件的文档都会有关于软件本身的各种信号量的说明

比如:

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有关的进程

[[email protected] ~]# ps -ef |grep httpd |grep -v grep

[[email protected] ~]# lsof -i:80

下面几种方式批量杀掉httpd有关的进程

# kill -9  4205 4206 .......

# ps -ef |grep httpd |grep -v grep|awk ‘{print $2}‘|xargs kill -9

# killall httpd

# pkill httpd

# kill -TERM  父PID   --对比kill -9  父PID

--区别:以httpd服务为例,kill -9 父PID后,子进程还在,web仍然可以被访问,并且它们的父进程变为1了。你再使用service httpd start|stop 都会报错

--kill -TERM  父PID,所有的子进程都没了,web不能被访问了

================================================================

扩展:写一个apache的日志切割脚本

结合crontab实现按时间(每天)的日志切割

#!/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`

--然后把执行这个脚本的语句,放到crontab里每天晚上凌晨01分做

==================================

rhel6里发邮件

rhel6默认的MTA(邮件服务器)为postfix

# /etc/init.d/postfix restart

# netstat -ntlup |grep :25

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      4368/master

tcp        0      0 :::25                       :::*                        LISTEN      4368/master

[[email protected] 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: [email protected]

Subject: /var/log/ssh.3 --主题为轮转不存在的那个日志

--------

# 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: [email protected]

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: [email protected]

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(统一资源定位)

[[email protected] ~]# wget http://10.1.1.35/extra/flash-plugin-10.0.32.18-release.i386.rpm

[[email protected] ~]# 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

思考:能否把上面的rsync做成服务的形式,并加上一些控制功能或日志记录功能呢?

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! @[email protected]"

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

[[email protected] /]# 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 4

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目录下

--提示,配置了ssh等效性的两台机器,scp文件东西不需要输入密码

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工具  --在讲apache时做

日志全并的方法

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

原文地址:https://www.cnblogs.com/steven9898/p/11331197.html

时间: 2024-10-14 07:46:11

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

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

一.目的 将nginx 日志通过普通用户利用rsync公钥认证的方式实时同步到本地服务器上,之后使用elk程序进行处理. 二.遇到问题及解决方法思路 问题1.文件权限:nginx 的日志默认权限如下: [[email protected] ~]# ll /var/log/nginx/access.log -rw-r----- 1 nginx adm 36330 Sep 11 10:26 /var/log/nginx/access.log 我新建的是普通用户,标准的用户组,用rsync同步时,报个

Rsync同步日志服务的搭建

Rsync同步日志服务的搭建 一.Rsync介绍: rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类似程序或协定中所未见的重要特性是镜像对每个目标只需要一次传送.rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝.在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协定或者通过远程shell如RSH或者SSH伺服文件.SSH情况下,rsyn

sersync+rsync同步

一.Sersync安装 (1)Sersync同步需求逻辑图 Sersync依赖于rsync进行数据同步,需在主服务器master上开启Sersync,Sersync负责监控配置文件 中的文件系统的事件变化,然后调用rsync命令把更新的文件同步到目标服务器slave上. 结论:需要在主服务器上配置Sersync,在同步目标服务器上安装rsync-server. Sersync同步示意图 user----}Sersync--------}S1-rsync服务器 服务器--------}S2-rsy

inotify+rsync同步

rsync:一款快速增量备份工具 Remote Sync,实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync rsync 包括如下的一些特性: 能更新整个目录和树和文件系统: 有选择性的保持符号链链.硬链接.文件属于.权限.设备以及时间等: 对于安装来说,无任何特殊权限要求: 对于多个文件来说,内部流水线减少文件等待的延时: 能用rsh.ssh 或直接端口做为传输入端口: 支持匿名rsync 同步文件,是理想的镜像工具: inotif

实现Rsync同步Nginx前端配置

近期,由于我们的阿里前端服务器频频受到恶意的流量攻击,导致前端NGINX进入黑洞而无法正常访问公司网站. 按之前的预计方法,采用加速乐及备用全配置前端的作法,将恶意短时流量攻击的损失时间降到最短.现将C这台机用作全配置的NGINX前端,A和B前端的任何NGINX配置都会通过RSYNC同步到C这台机器上. 部署的思路如下: 规范A和B的nginx配置目录(用include conf.d/*来实现),在这两个服务器上配置一个rsync的服务端进程,然后,在C上每两分钟运行rsync同步进程,及时的将

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

主服务器:192.168.5.13_ubuntu 从服务器:192.168.5.11_centos ================== 1> 在两台主机上分别安装rsync=================== ubuntu安装如下: # apt-get install rsync 编译安装:下载这个免费的软件 rsync.samba.org/ 或者 samba.anu.edu.au/rsync 去官方网站下载最新的版本 解压缩进目录后执行 #./configure && make

Ubuntu rsync同步

>服务器端:Ubuntu 9.10 - 192.168.1.3客户端:Ubuntu 10.04 - 192.168.1.73 我们先来设置一下服务器端的配置 1.ubuntu系统安装完之后,rsync服务默认不是启动的,我们要修改下面的文件.$sudo vi /etc/default/rsyncRSYNC_ENABLE=true 2.修改配置文件$sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc我们先来查看一下这个文件$sudo cat

rsync同步遇到的报错和解决办法

在同步的客户端操作: [[email protected] dbbackup]# /usr/bin/rsync  -avzP  --password-file=/tmp/passwd.txt  [email protected]::dbdata /data/backup/61.160.245.70/dbbackup rsync: read error: Connection reset by peer (104) rsync error: error in rsync protocol data

linux高级技巧:rsync同步(一)

1.rsync简介 rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次发送.rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝. 下面是rsync的图解: 2.搭建rsync服务: 注意事项: 1.做这个实验要使用三个节点,其中节点1作为向外同步的机器.另外两个同步节点1的内容. 2.做好时间同步,防火墙关闭,selinux也最好