- 积分
- 16844
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2023-3-23 15:30:26
|
显示全部楼层
Rsyslog系统日志管理
. }& ~7 R4 L( m7 m; Z课程目标
% n1 e0 T2 X. I9 z, z
& [- t7 u& N. h+ S, |了解日志的级别与作用
% {- x3 I) K3 ?! X( `1 A掌握 rsyslog 服务的本地日志和远程日志的管理
( X% @$ ~( ]& C! _$ F能够使用 logrotate 程序根据需求对日志进行轮转( w& {- A8 o' p; i
一、常见的系统日志) ^1 F9 p! l$ J W
日志格式:文本日志/二进制日志/数据库日志
5 T6 r. R2 g( c9 p {6 y- A3 }' T/ W2 e默认的相关日志文件:
# D+ K1 {& g5 |/ H( i& I5 L/var/log/boot.log 系统引导日志,记录开机启动信息/ F/ s1 V4 A, n7 ^2 j) M, o
/var/log/dmesg 核心的启动日志
' c% S3 [/ Q- P6 q. `* [: O/var/log/message 系统的日志文件" [: F7 D8 y# E% D3 o. |
/var/log/maillog 邮件服务的日志
' S/ a z; N9 F0 l* Z" s6 z" Y" A+ Z/var/log/xferlog ftp服务的日志7 P* b7 Y, n; w# T8 i: i! M" A' v5 g# r
/var/log/secure 网络连接及系统登录的安全信息 x" x0 Z$ f! _
/var/log/cron 定时任务的日志
7 V# |+ k2 R& g! g v( _/var/log/wtmp 记录所有的登入和登出 last -f 查看
" X! I3 f. E, I3 W/var/log/btmp 记录失败的登入尝试( m! z1 i& [# x! Y
二、日志管理程序
" B2 P4 x. R3 v7 \9 e+ C7 I9 @在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。
. c [4 M5 \( M0 |rsyslog程序管理本地和远程日志
" [5 j6 r8 b! t* G/ h安装软件
# Z5 Q( w% @5 G7 e- J& R根据需求修改配置文件
8 }& V' L* O( H. R9 ? j启动服务% }& L7 k' j. P0 m1 c
测试验证, _6 L, W- F" w' B) A$ o! P5 d) u4 Q
三、日志级别' O! f7 B2 i9 Q
# man syslog) m0 ]2 U* n" X1 _: w% S1 l* g, o
日志信息分为以下级别,从上到下级别一次降低) }% K: x6 R/ S+ J- ^4 `% @
none none不是一个等级,它表示不记录服务的所有信息
" z5 X+ V( v5 z1 C# v+ I. ?0 emerg 系统不可用
$ Z Z' f' V* M. D- t1 d: M# q' F: d1 alert 特别留意的报警信息+ t9 {; N2 \) o+ B; _
2 crit 非常严重的状况, \' v3 g( P4 n
3 err 错误信息
) I0 V2 a- a( d, P7 v2 u/ T+ m4 warning 警告信息
* O" H \6 B) W5 notice 稍微需要注意的信息: ]9 x$ Z5 a( `5 s; m# M
6 info 正常信息4 @1 `- ]1 P# `* J$ c( N6 s, `& B
7 debug 调试信息,开发人员使用
: H0 r0 a# |6 W8 [) p. @
# O- P0 Q Z" H; D. J7 [$ E四、日志配置: m+ }3 Y3 C; ]7 k
[root@server ~]# rpm -q rsyslog# x; t* j2 H4 O& M, o1 b& `" L4 j" Z
rsyslog-5.8.10-8.el6.x86_64
# {- Z; u m2 o0 @$ e$ T[root@server ~]# rpm -ql rsyslog2 m2 m' i+ A+ y E2 C
/etc/logrotate.d/syslog
+ Y7 z" q2 `( _" ? [9 x# M) ^/etc/pki/rsyslog 2 z/ f. g: }2 P. k# ?$ b
/etc/rc.d/init.d/rsyslog //启动脚本8 ?& V q! R& X% q0 Y$ E0 O
/etc/rsyslog.conf //主配置文件
. I3 h" u: J( ?, j! F/etc/rsyslog.d //子配置文件
) f1 W' C6 }- P' k: H8 ?/etc/sysconfig/rsyslog
# S6 |) y8 T# j9 `/sbin/rsyslogd, s( D, X5 w, k* F( F2 k
/usr/share/man/man5/rsyslog.conf.5.gz
! \+ J/ D% {5 Q6 e7 O s/usr/share/man/man8/rsyslogd.8.gz
1 S: u) }) t8 ?( m9 `5 y+ z& ]) R4 E) x0 u2 G
[root@server ~]# grep -v ^# /etc/rsyslog.conf , Y! J: }# h2 q* u: g8 U9 c* t. W
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
9 a, M* L- U. G/ n8 H$ModLoad imklog # provides kernel logging support (previously done by rklogd)
' v* C$ d1 d: G: s5 L; e, c# u$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
/ Y# g7 }, k$ Z$IncludeConfig /etc/rsyslog.d/*.conf
5 z' ^: p9 Y8 V# x: @0 U/ n. u
6 V" f4 x! N& ]: R3 @, N+ e*.info;mail.none;authpriv.none;cron.none /var/log/messages
& E. o' ?, p( I0 ^& F8 e% T" J) M( V- x2 ?( ^' l$ {
authpriv.* /var/log/secure* |& }) \+ v: N) {- w' m3 d1 v
' K3 S5 i4 e( v5 a( S0 J
mail.* -/var/log/maillog) L5 {# t2 K1 }! }9 ]+ O
& f0 B4 N2 o" V! C1 @- S1 ^
! x) W" x0 O5 scron.* /var/log/cron; o. p" ]! H$ @0 S. c
% A# ?. a) B9 T1 n. ?1 N- W
*.emerg *9 y2 H5 M8 A( v, r/ Z: F+ `
& ^% Y3 S7 N0 z( r9 ]9 V2 F5 L- V
uucp,news.crit /var/log/spooler0 r$ }# k8 l& l. j1 M( d" V1 A
' u2 Y3 l* R6 c+ X
local7.* /var/log/boot.log
& P2 Y' G7 e, D0 t) n; l1 X- i* k5 t: A' S* g
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"( p* ^0 Y8 E) q7 y. k/ E$ g9 Y
1 Z+ R, h" l5 [5 H( J" m/ D$ |- m/ O
:programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl
4 I8 R7 ] {- f& S* I1 S, Z( u# w. t, Y: B5 K: r6 y
1.日志定义相关符号
" }3 w0 T: Y. H( c配置文件中常见的表示符合
1 O# \' e' N, e/ b. 用来分隔服务和级别3 a: x5 p" @. a; g. b! j! e- [4 \
* 任何服务,或者任何级别% N: w- M ~! e d( ]7 b1 g2 P) K
= 有等号表示等于某一级别,没有等号表示大于或者等于某一级别) W5 g6 Y0 Z( ?: g% u
! 排除操作,前面有相同服务的表达式,这个操作才有意义
" Y3 W+ ^. d" c4 E 代表从前面表达式所包含的内容中排除某些内容
0 o: J+ k X+ h+ c$ x; 用于分隔不同的 服务,级别,组合' F) `& f1 O& ~
, 用于分隔不同服务4 y u8 O- b" i% T3 r. f5 w7 W9 n# T& `
- 用于指定目标文件时,代表异步写入
6 B2 R2 B) m& B; h+ v1 l& D3 a. }, d. d9 l0 T) Z- G+ Y6 N
举例说明1 ?$ |: b% @; j" }+ D2 x
mail.=info: i6 n$ E& F/ y( V* y
mail.info mail服务大于等于info级别的日志
/ X, j8 u+ ^' f9 i; p7 l) Lmail.info;cron.=info /var/log/test.log
' Q# F* C$ E' n3 t R6 l2 }mail,cron.err( b j, q# _( y" L7 I/ [6 B
cron.=warning9 z" i9 T) A4 H: I
mail,cron.info
4 w* J! @$ r9 H4 l5 _% D- G$ ^- A ~6 D* U
cron.info;cron.!=err 012456: f( ]* _% p" f- R( y" Y
0123456 0124567
3 t$ |9 ?& V7 p; r. e) R: S5 Bcron.info;cron.!err 456
- c1 H: T. W( V4 _- q2 E0123456 4567/ y% D2 z+ \0 C Z# c* g# R! I
2 D" M: j/ Z2 x, G1 v! ^9 ?特别说明:8 ^, C% B$ C4 i) U
The facility is one of the following keywords: auth,! c# c7 p: X" {2 l% X
authpriv, cron, daemon, kern, lpr, mail, mark, news,, w8 s4 Y; W# [0 n
security (same as auth), syslog, user, uucp and
" c) ~. t8 @( ~; q" J( z local0 through local7.(设备载体)
8 X5 R1 [( U* C2 rlog facility 设备 设施:用来记录一种类型日志的日志设备% v; v: H/ P. {1 }+ R
$ B3 h( T& k0 N5 N/ u% p- t$ hdaemon
! w2 {5 C$ Y4 hauth
9 m1 E# V% w7 u! g+ E8 q7 Cauthpriv
/ q9 v" ~1 a/ C5 E# `! Guser
: b: r. h! T/ N3 E# v. s0 O! s0 I5 Pmail/ d& B/ c( Q1 Q6 H9 g
lpr: b: b; v6 d+ A* P$ q& i7 L) z
news
. x+ @; y. W4 {8 v P7 Z* Auucp+ Z* ]7 p) C7 ~3 t/ \- i' L
ftp
s1 y4 A+ T( t/ Flocal7
: u1 j# F+ }- h$ B! E N- i/ | * e9 |1 D8 E6 U3 n# J
2 r( |; F& U9 i( J6 i% P
本地日志管理ssh
2 h, S: I: X b4 m6 }, C4 `* R7 I
[root@server ~]# man sshd_config
( o% I* E6 {3 K) S' X SyslogFacility9 `! d7 F& v6 L+ o2 y
Gives the facility code that is used when logging
' K) ?3 }9 _0 k. j/ l7 n% b* ]2 G, E messages from sshd(8). The possible values are: DAE-& J5 w4 i2 Y6 P) ?9 C \3 E
MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,- G8 o% _0 C& J# {0 i, ^; d4 J
LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. The default0 t" Z- D6 L, d/ U* e( D
is AUTH.+ H3 L5 r+ ]1 i$ {* k0 I1 H$ o% U
更改ssh服务的默认日志记录载体
. h6 ?9 f& z3 ]通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf): z9 K# H! F/ i" k* T; L
测试验证5 O* s/ _( P0 C$ u* R" @8 Q! Q
1.修改ssh服务配置文件
( M5 z( ^7 D% C/ U[root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak6 g0 ^1 l3 s/ F- b* \7 u% d$ r
[root@server ~]# vim /etc/ssh/sshd_config ( r3 w$ A6 ~9 q) A; a
SyslogFacility LOCAL64 W3 u2 E T4 J: y* v9 C* ^: w
2.重启服务! o+ N8 M0 ~: y6 r. M2 e4 Z; c% h
[root@server ~]# service sshd restart
4 {; I/ M, n$ x) LStopping sshd: [ OK ]5 ~0 D% j, h2 q& _. T' h" T# Z
Starting sshd: [ OK ]
% h2 |& W H& G; `! q4 I3.将来自LOCAL6设备载体日志记录指定位置(rsyslog)
2 c% i' C9 [& U0 f: e3 b* v7 |[root@server ~]# vim /etc/rsyslog.conf
! ^# @- K$ A9 o2 U/ R' [local6.* /var/log/ssh
- ^% N( a+ X+ m4.重启rsyslog服务
: B$ H6 v' i3 h/ U[root@server ~]# service rsyslog restart
, J( F9 g b" G5 W7 L' L' d* P s+ }Shutting down system logger: [ OK ]) R* _& \" C8 b7 x& l4 z! F
Starting system logger: [ OK ]+ r/ [; E+ ?& a* h( j B' B
5.客户端测试
1 S# j! d- |8 e e& S[root@client ~]# ssh 10.1.1.2
, S2 n6 W' i) ~- ^+ ]/ PLast login: Fri Apr 26 12:27:33 2019 from 10.1.1.1$ Y/ W1 n2 `; [) H$ f! i; X
[root@server log]# ll ssh" e( J: u; q* b3 t1 p. k
-rw------- 1 root root 0 Apr 26 13:40 ssh
) O; Q* e; T3 q0 `[root@server log]# tail -f ssh) l$ e7 a3 g' z V ?
Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh26 h1 I. L. p4 x# G4 V
Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user
* A1 q2 M- |! j w5 o! v- q' P此时进行ssh访问,日志会在local6和/var/log/messages里都出现4 h9 ^9 Q1 W0 L$ p' O
, L5 ^5 M& g, H8 B# `3 U& n( g" C3 x
如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志4 g; r3 ] z) }+ Z r( N
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
% G; W/ f1 d3 W& M0 O ^0 M7 o( i! G4 @# R- Q* b" m I% B
五、远程日志管理
, b# Y+ Z% x! W" M0 v5 m, u% i; T5 `目前:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理' f" H5 _* T% h7 A. T7 S
7 B3 P5 V* r. [环境:
/ r8 u/ |# w) z8 N6 `9 a$ C6 |& N+ f) `" l2 u
log-server:10.1.1.2
9 V: e& M! Y5 f, N0 p/ R M0 t6 _' @8 Z. J" @) } n
应用服务器:10.1.1.3$ m3 K* W. I9 Q" L% a- V
- }; n2 k% K- J. [2 J+ Sssh服务服务——>其他人远程访问该应用服务器产生ssh服务日志——>远程记录到log-server上$ \# X) q: M# [8 U0 x: n
) Y& H" G& {8 F/ g+ j
client:10.1.1.4
3 @# ]7 Z8 Z- k4 j) n
" I4 i# f) a% L) }ssh:10.1.1.3——>日志记录10.1.1.2/ a' v) d; d& m% w
6 M2 H4 H q6 V; x. z$ l8 b% [
需求:把web服务器上的ssh服务日志,远程记录到log-server上
8 u$ E. w9 e2 T& C* p* |: {. m* F M/ [
思路:# O$ v4 J! |1 d5 c6 D. U1 g
q! q6 |) I& B+ ~web应用服务器上操作
& A: f" O1 X3 |' {$ S1 o2 d( [, W2 _) V5 `5 b
将web服务器上的ssh服务的日志单独记录. h$ `; A! J+ N+ w
指定ssh服务的设备载体
" W. G2 t3 j/ Z) H- k! x6 {" b重启服务5 U% I2 }& n! }
将来自于ssh服务的日志设备载体上的日志远程发送到log-server上3 ^- c/ _; `, t$ n" g
以下操作在log-server上操作% S7 i5 Q- r. p5 N( M/ M0 e! R
7 Y/ J8 O1 z- ^' t" _' k% @& r( C
通过修改配置文件,打开日志传输端口, \ x, P% d# W. m# D
加载相应模块 tcp | udp
( o. r+ @; E: [9 s2 {- | Z* U, f% Y: i打开接收端口 默认514端口
& u; |) |4 o: D$ Z0 a* m2 m* Y启动服务后日志默认会保存到/var/log/messages
k2 `$ \1 [1 L+ E; b) y步骤:2 ]5 v1 g {% H0 G) ?$ c8 @* o
! m% Z' g9 N& C& x/ h. ~' z以下操作在log-service(10.1.1.2)服务上完成$ X$ g* [: M" f
1.加载相应模块打开接收端口(可以选择udp、tcp都打开). S: G# ?7 s" m. H. @! B
[root@log-server ~]# vim /etc/rsyslog.conf
; B9 r+ I3 p# z6 O1 H& B2 h# Provides UDP syslog reception5 W0 {% a6 i3 t. T p& e- m- i% J
$ModLoad imudp' T L5 e4 B2 k, i% z
$UDPServerRun 514
$ q$ [9 K& j7 j/ H7 k# U; v g; B3 P Y6 {
# Provides TCP syslog reception* o4 E. H; I, y4 R/ ]/ u
$ModLoad imtcp/ _9 u2 T- F6 U2 ^% |& u
$InputTCPServerRun 514
& K1 {$ t4 P9 p2.重启服务
9 m: ~0 k8 U# A3 P9 T7 vservice rsyslog restart, ]/ w) b, w$ Y3 M* c
[root@log-server ~]# netstat -nltup |grep 514 //验证端口是否打开
4 m/ ~7 p, B- S/ D9 |6 @2 ^. |tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 2822/rsyslogd : f2 x% M" i C
tcp 0 0 :::514 :::* LISTEN 2822/rsyslogd , c9 b: S& z. m; d' v2 Z
udp 0 0 0.0.0.0:514 0.0.0.0:* 2822/rsyslogd & b+ H" l$ Q) z/ P# h
udp 0 0 :::514 :::* 2822/rsyslogd
* `. n( v$ o* S' l
; x* F# g4 a$ ~2 t2 I3 ^) I以下操作在应用服务器完成(10.1.1.3):
( |* Q% W) T) j; X% A" c1.指定ssh服务的日志文件的设备载体
# @0 M- J+ E' _! L y3 g[root@ssh-server ~]# vim /etc/ssh/sshd_config 5 Z, m1 |( z0 Z6 m) _. k7 e
SyslogFacility LOCAL0
6 y+ A" O( {, q+ J0 ^2.重启ssh服务
$ z: P+ Z9 }4 Y4 k# s7 w4 Q[root@ssh-server ~]# service sshd restart
( i+ F: X- n$ B [6 O, u R3.修改/etc/rsyslog.conf来指定ssh服务的日志发送到远端去
2 E- V z+ I5 N[root@ssh-server ~]# vim /etc/rsyslog.conf
# Z" p) }+ h5 j; ~( Y# v7 H7 ?; S2 J# a; B; @
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional2 v- l5 ~, n# C$ g2 i' j
#*.* @@remote-host:514& G8 F2 G& q' q8 g5 z# @
5 n8 I! n2 [/ q
local0.* @10.1.1.2:514 //一个@表示udp,两个@表示tcp 6 m& k" ^. U& j# N) O
最关键的一步,将日志远程发送给10.1.1.2* `; O3 N( I! h
. a. \2 A6 e+ E1 T9 D. r2 P
$ {& I9 R Z6 P+ _3 X/ W! H5 L! E, r
4.重启rsyslog服务; m! u, |( E# G3 |' W$ } A* u
[root@ssh-server ~]# service rsyslog restart
s) E- c* O; K0 H$ N3 a8 kShutting down system logger: [ OK ]
2 ]3 B$ K0 p L& P( u; W5 ~Starting system logger: [ OK ]) f6 l- _0 ?, P$ Y6 s/ }
4 I7 S4 n" j. H测试验证(client:10.1.1.4)
! \! p0 v* C. _ H4 N, m+ Z[root@client ~]# ssh 10.1.1.3( L% X- o) f7 o4 V$ p7 b2 m
The authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.
. I& \3 j& c) y' M2 l! u" M% R. y! ARSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.9 x; S+ N5 g [7 Q* n! X/ K
Are you sure you want to continue connecting (yes/no)? yes
$ Q- L V% U2 v; A9 UWarning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.
9 ~& y: r4 r: t5 l& droot@10.1.1.3's password:
2 G! X$ E& B, G! K3 W" k1 J9 B) qLast login: Fri Apr 26 14:46:31 2019 from 10.1.1.1
5 o' Z0 A U3 B* |! ]% n2 f( y2 r x' m1 b; o& z3 i' l
[root@log-server ~]# tail -f /var/log/messages
) d+ ?2 H& C8 ~- eApr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh28 ?- H& G% M# N' W. }$ v+ g7 F5 P
[root@ssh-server ~]# tail -f /var/log/messages
% T% `, _, A2 t$ ?8 e# p% tApr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
5 @! W7 o4 j3 I6 |6 ]; e* p(不想记录就修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)
: G# T' b) c, ?3 F6 z D; S( |
0 C" t" F5 L7 g) a0 ]) `- ?, c; D8 ]+ b注意:selinux和防火墙,还有udp和tcp 端口514是否打开
5 W) }0 @3 ~3 X/ y7 V4 K. l L7 i
六、日志轮转& b" s' N/ `5 w; m" r3 i
日志轮循(轮转):日志轮转,切割,备份,归档
* M1 H8 O: T2 N& j- B/ M) \
\9 s' Q' y+ G z为什么要日志轮转?. H- W8 S- ~5 j9 B: x& s0 h
避免日志过大占满/var/log的文件系统
. @, ~) O, `/ W+ e方便日志查看
4 {) @. O9 r4 a! T将丢弃系统中最旧的日志文件,以节省空间
- w( P5 ^' O. G) ~: k. i: x0 I" Y日志轮转的程序是logrotate% k4 {( j" X5 B
logrotate本身不是系统守护进程,它是通过计划crond每天执行/ B: G9 H; H5 {5 j: U" h& i) x# Z
如何进行日志轮转?, d0 l( @7 E$ S4 Z8 O! _7 F
了解相关配置文件
& b. d. z4 [$ a[root@log-server ~]# rpm -ql logrotate
+ n+ [$ @8 C! Z' X/etc/cron.daily/logrotate 周期性计划任务/ U+ R0 s' G$ P
/etc/logrotate.conf 配置文件9 n+ H. s3 ]! F f2 K
/etc/logrotate.d 子配置文件存放路径
$ B! r; V3 e# g, B/usr/sbin/logrotate( H1 P& A" x6 `5 _+ G
/usr/share/doc/logrotate-3.7.8+ ^; [( N1 U% B! {3 B3 ~; Y
/usr/share/doc/logrotate-3.7.8/CHANGES
8 n# [: |) H2 g, Z" h' v/usr/share/doc/logrotate-3.7.8/COPYING+ e6 j. e9 C& Z1 { G# F
/usr/share/man/man5/logrotate.conf.5.gz
4 x) ?0 w, Y _3 r s% g/usr/share/man/man8/logrotate.8.gz& e: s" R0 K8 ?4 d* c/ d
/var/lib/logrotate.status6 Z+ a( o9 d: l, c/ r9 F1 e1 N* C
+ ~" z ~2 f# d% Z3 }8 S[root@log-server ~]# cat /etc/logrotate.conf
! v! K( b: |4 b4 L# see "man logrotate" for details
7 T4 n) J. F! e: P5 V6 ^. ?# rotate log files weekly; v' M! l+ k7 v% K9 A
weekly1 A) a w" E3 {2 N1 e2 Z3 U9 M$ n
# Z2 ^# A% j/ U. m' l" F$ w
# keep 4 weeks worth of backlogs 保留4周备份日志9 ]% b- J2 ^7 ~
rotate 4& l: B% {+ ~* w1 r6 y! T5 V# R i" j7 P
$ h) j5 j( X3 h$ e+ f) p8 K0 |/ h
# create new (empty) log files after rotating old ones- C& ?3 E$ R7 m# {- t8 i
create3 @8 V% z! f. d S* e# t
& ^; q; {) v7 f- e0 i+ d8 V8 L# use date as a suffix of the rotated file 日期作为后缀给旧文件重命名2 j$ c( y0 J2 h9 n( q9 T. J
dateext
5 A8 L+ c2 Z4 S, r- B8 B* ~0 ]' A- B6 |1 b# z$ c L1 F
# uncomment this if you want your log files compressed7 j; R8 {- s5 u& d, H7 J
#compress, t) l$ u; ^5 H1 y: {) y( s7 T
; ?+ z* k P9 B4 w3 x5 Q6 Z
# RPM packages drop log rotation information into this directory0 ^: d- D4 y \
include /etc/logrotate.d 加载外部目录$ Y/ ]; I3 a W
1 m5 m6 p. U' @
# no packages own wtmp and btmp -- we'll rotate them here
" v, m! P1 r7 a' Y+ \0 }4 ]/var/log/wtmp {
# m/ V* Y& y3 S% W monthly! B( O# G& C0 T& T8 A2 f" Y
create 0664 root utmp
5 t0 S q1 M, ?# _ minsize 1M7 }1 x9 ?& k% B% `: X
rotate 1 保留1份日志文件,每一个月备份一次日志文件
9 c, q' f$ m2 e5 {1 d( `* _}( ?* m/ @7 W0 @+ L8 j
0 {3 E# D5 J, I$ U( H- h/var/log/btmp {
2 {$ V' s' \: T7 p* l# {0 U missingok8 x1 M) W" m: S
monthly
& x; l- t; A( X# r4 e& r create 0600 root utmp
$ N) K4 R- m" ]. x+ H% m7 m rotate 10 t4 M% D& R8 R8 w+ v$ a; `
}
( n( M6 k, \$ a& {. k' h, k B( D9 o2 P- r" U5 a* z
# system-specific logs may be also be configured here.& @4 c; H/ y( ]% l# [0 Z) X7 B
; U3 Q2 S, N) a' @$ g3 g
常见的一些参数:+ k0 O- }) _# z* d
daily 指定转储周期为每天
i& }7 B* o% ?4 c2 O. Pmonthly 指定转储周期为每月
8 @& ^! r: [/ {4 t, L7 f/ T. T- sweekly 每周轮转一次- q! A( D* M1 V. u0 [
rotate 4 同一个文件最多轮转4次,4次之后就删除该文件
, X8 w# m4 v) }4 ]create 0664 root uttmp 轮转之后创建新文件,权限是0664,属于root用户和utmp组
6 f( K0 v5 @4 m+ E, z/ n" d7 Gdateext 用日期来做轮转之后的文件的后缀名
~- ^. y* H: J/ Y2 ~compress 用gzip对轮转后的日志进行压缩. A/ P2 |; M% H- N4 I
minsize 30K 文件必须大于30k,且周期到了,才会轮转1 f: @& j* d* j2 b5 B. e% J7 W* A- I
size 30K 文件大于30k才会轮转,不论周期是否已到1 @) r1 G5 @& S2 Y5 j
missingok 如果日志文件不存在,不报错5 L: u, r" Q! k4 f( G4 [1 Y
notifempty 如果日志文件是空的,不轮转' W, h5 s/ |4 @: X+ m6 o3 G7 N G
delaycompress 下一次轮转的时候才压缩
6 ~- T$ {' [/ Fsharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次) u" e5 ?) }0 N; x: N7 D! `
prerotate 如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码
0 [" ?. w: X' U5 t# o: C5 \4 epostrotate 轮转完成后执行postrotate和endscript之间的shell代码
5 y0 m; O' B& p3 Y5 x: o4 d' a! x5 `! N- G
[root@server~]# cat /etc/logrotate.d/syslog 3 @7 z4 p( D/ [' a# \
这个子配置文件,没有指定的参数都会以默认方式轮转
" F, t% `- O0 i9 @8 r4 y/var/log/cron
* L6 }4 i5 I) U$ V4 t/var/log/maillog7 F7 ^8 B, f) g, {. i
/var/log/messages
: a: u" d- R; g2 L/var/log/secure. ?, n6 D/ t+ j: t' L, W& }
/var/log/spooler5 `* R3 L$ L# R# k: ] q
{' g( b5 l$ ^' @1 ?( U7 y2 X) v; p) y+ y# L
sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
$ s9 Z8 a! K! B# [+ L0 K postrotate 转换完后执行postrotate和endscirpt之间的shell代码
1 E2 H# n4 ^! k) ^1 y* |: E6 k /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true G) E X9 @$ D7 L- A/ `( q
轮转后对rsyslog的pid进行刷新(但pid其实不变)
8 z" ~2 |' L4 H endscript
`+ @( M+ J8 B% Y}. g6 _ e m* ~* J3 i
思考:为什么轮转后需要对rsyslog的pid进行刷新?6 X$ d% k# p) j
ll -i 查看文件的inode
5 ?$ B( O' {' Q p0 V& i-HUP 平滑重启
$ `8 y% J5 }) h. e! h/ i% F$ L+ s. q( Z6 R2 Z0 x$ q# b
4 W( q3 \. ~# n& ` i5 M4 `. H
* @& \5 B( B$ h6 B: d$ ~8 c% B
0 p0 V. Z! p, f7 f" n) `0 G7 o
& I1 z7 Z% z3 C. U: U不以时间为后缀进行轮转,在/etc/logrotate.conf/ nodateext
8 e* |8 F& o* Z( L4 C4 X, ^8 C+ u u2 G7 {) ~; R6 Q
清空环境
" W2 `% ?+ g$ c q1 l" }& m/ G, N
重启服务; c; f! h* T, T8 J
! H" G1 O$ _( a3 P5 ^2 g- D3 F5 a
, S- V* j) z' X9 ~8 n! ]& v- f4 j
6 d0 j; J+ I* T" ?
N7 l! f2 y/ l$ ?& _( J6 w6 J
- y1 c4 w/ @% T0 J! j8 u结论 0 H# a0 z; O: B* m8 j4 {. ~
; Z* a/ S* L7 O. z
后刷新pid的话,logger -t "呵呵" "再见!"会写入旧文件(messages.1)里面
9 y9 R, [% ]; O6 W: u( a
0 f" B( I5 q/ x8 A; ]) \8 P% f将这句话放在/bin/kill这条命令后面,会写入新文件里' L$ p$ }7 F% \$ V
: z) X, S- {+ F |2 R _7 ~3 [# J
最新的文件是messages,第一次强制轮转后的旧文件是messages.1,cat messages.1会看到logger -t "呵呵" "再见!",到第二次就成messages.2。而第二次轮转后的messages.1成了第一次轮转后的messages的老文件。(看时间区别)# g$ V& L! O9 t( A; s) T* {
0 Z- M% @7 _+ Z$ G& O* a4 V O |
|