|
|
楼主 |
发表于 2023-3-23 15:30:26
|
显示全部楼层
Rsyslog系统日志管理# a9 G" U3 B' ?2 A! K
课程目标
0 P& L* g0 e5 p0 i$ H( }& l' J7 X8 a/ T( @& @
了解日志的级别与作用
# X0 L6 J7 I4 ] x( z5 F2 Z掌握 rsyslog 服务的本地日志和远程日志的管理" X* U8 Y; j( U
能够使用 logrotate 程序根据需求对日志进行轮转
) ^- B( S8 g' a/ H+ U V一、常见的系统日志/ |1 Q- X) c. q1 w
日志格式:文本日志/二进制日志/数据库日志
0 T3 ]8 j4 n# l& b) R* i默认的相关日志文件:6 z) k' R0 p% t. W6 t
/var/log/boot.log 系统引导日志,记录开机启动信息
: x. [, _' T8 v: a" h E$ `, Q/var/log/dmesg 核心的启动日志$ S1 K. P1 a9 e$ \
/var/log/message 系统的日志文件
6 D- B' v4 M+ M8 H* c2 b4 I/var/log/maillog 邮件服务的日志5 Q4 x( q3 n# S G" E
/var/log/xferlog ftp服务的日志
+ O1 T; [9 g- {3 ?4 S1 s/var/log/secure 网络连接及系统登录的安全信息' _+ x y0 ~" o
/var/log/cron 定时任务的日志
/ ]. b: B0 g0 |1 C/var/log/wtmp 记录所有的登入和登出 last -f 查看
* ?2 Y0 h G, N% g* K% ~/var/log/btmp 记录失败的登入尝试3 M( n$ b3 L; u: W3 B7 t
二、日志管理程序' s! [ Z0 v7 c! Q3 d" y8 I
在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。& A* t6 z4 F( u* z v
rsyslog程序管理本地和远程日志
' ]0 x3 w" e" j1 G& ]& ?8 {$ C: S安装软件; J$ G. P' v5 R* [0 B! q+ H
根据需求修改配置文件
1 x, o- B+ m: \7 Q. J! q- G启动服务
( G# G. E+ J% M3 V: J测试验证6 _5 t) L% y$ s
三、日志级别- \" j# L/ [1 @8 D- E
# man syslog
0 _) S( w. ~6 x- Q日志信息分为以下级别,从上到下级别一次降低
1 U4 ?5 c5 V$ ^3 e( N! M( U+ H/ W none none不是一个等级,它表示不记录服务的所有信息
: Q" h) H* U. U0 emerg 系统不可用/ k( L1 Q5 u6 S. x' W4 {* O
1 alert 特别留意的报警信息8 {& s9 u( K1 n1 I' h6 Q0 H
2 crit 非常严重的状况6 e: s0 P8 {- N, y1 _# l. H4 l
3 err 错误信息
$ t% k* ?0 m" G4 warning 警告信息+ N2 H0 }; \* e; S8 ~
5 notice 稍微需要注意的信息
& I0 J) [, R2 L! }6 info 正常信息
8 g( x* n2 j" s% |) I7 E; E' s7 debug 调试信息,开发人员使用
, w4 j8 I% |* |4 j+ X8 Y
' A. o( F3 O# `8 j: m( \四、日志配置
9 s) q; i: F. E, i) ^[root@server ~]# rpm -q rsyslog
$ {" N" t% z& b5 C# B% G2 d srsyslog-5.8.10-8.el6.x86_64
6 ~5 n% N ~* ^* Z" d+ I. l4 g[root@server ~]# rpm -ql rsyslog
9 w! E6 K; h2 h0 m! C( K/ f7 r/etc/logrotate.d/syslog; R7 L+ ~+ w$ t/ K6 u% d- N
/etc/pki/rsyslog
5 ~7 B5 u2 V) S; Z+ k8 H/etc/rc.d/init.d/rsyslog //启动脚本
& ~3 a( c, D5 ^) _0 Q" b/ E/etc/rsyslog.conf //主配置文件5 \, {, a, T' w' }* d. N2 L4 [
/etc/rsyslog.d //子配置文件0 M! B* J' O3 `1 f, Y& S' }# x
/etc/sysconfig/rsyslog' ?" y) o8 p0 m4 h# J( S2 L6 s$ t, l
/sbin/rsyslogd) ]& w( c* e' ^- [
/usr/share/man/man5/rsyslog.conf.5.gz
5 V: P2 [1 S; q# e& ~/usr/share/man/man8/rsyslogd.8.gz1 h' {; A* ^. i: B8 ~9 ~9 ~$ w! _
4 g0 P& }& b' A4 @6 s
[root@server ~]# grep -v ^# /etc/rsyslog.conf
7 D% ]& T- R. ~. Y; I$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)* @) _/ b p2 w6 h
$ModLoad imklog # provides kernel logging support (previously done by rklogd): k+ e: L; l! g6 J- D' l
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
5 R! T4 _/ \. \' Q$IncludeConfig /etc/rsyslog.d/*.conf# A- ^, Q* H1 i u. L
1 l5 w1 V4 c/ u
*.info;mail.none;authpriv.none;cron.none /var/log/messages2 r1 n1 U2 j2 _. Q( G; r3 h0 o A
; x/ U: x" Z0 A" jauthpriv.* /var/log/secure
8 r7 K/ r' j- ^6 }- v
& v* H" b. c6 n& A b% Q9 {+ @mail.* -/var/log/maillog K, `; V2 [4 P1 D
! ~$ \4 W9 _6 c0 ]8 Z' j! ^$ b
1 K: f+ O5 J' A8 |! t0 i3 G- X; Mcron.* /var/log/cron! h( C$ O6 O3 p/ y# V* t9 V
& G, A V# y$ K
*.emerg *
( h' }8 t0 l, r! L% ^( G5 d
$ ~4 V7 V2 d: B7 u. f" ?, tuucp,news.crit /var/log/spooler6 U" M) l3 g4 Z
% Z# I M+ `: [& B
local7.* /var/log/boot.log3 Y2 a+ n. i. x
/ W# U" T, h' S. X' H* G B: e$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"0 q0 A* R4 K/ [
3 e. B! i# a; C6 s+ Z
:programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl
. _+ S* l! Z8 Q' g" @; f8 O9 ^2 y R5 q, u$ n
1.日志定义相关符号
& U# O$ S6 ^; [# G5 g% g- t/ Y配置文件中常见的表示符合 f5 J$ L; t% I" E. B
. 用来分隔服务和级别
4 t& J6 \# a2 R$ y* 任何服务,或者任何级别+ t9 r! F# m6 N: ^4 N
= 有等号表示等于某一级别,没有等号表示大于或者等于某一级别
: j \8 n% A# Z. R) x1 b. N! 排除操作,前面有相同服务的表达式,这个操作才有意义
" K2 ^. }5 V, r+ K 代表从前面表达式所包含的内容中排除某些内容: R0 M0 \( m# K! C* _ X
; 用于分隔不同的 服务,级别,组合
T% |+ u* a% H1 X1 A% T, 用于分隔不同服务
# A3 G" i, p* M; ? q: e- 用于指定目标文件时,代表异步写入
* e5 k- z( [: O9 K! C: c9 _& I8 W' o; g9 w
举例说明
' {3 \; M3 N8 nmail.=info
; m; |% A1 f/ h! imail.info mail服务大于等于info级别的日志, t1 Q" c0 g+ T! l* _
mail.info;cron.=info /var/log/test.log
, x5 Y* M, k; M& u& ^& d7 }mail,cron.err
' [) e ?# W" V: Dcron.=warning
; C& O" u: F6 Bmail,cron.info
" S8 B) ^6 g& N* K& `5 n3 B# E
* g7 [: {; w4 t y8 w6 V8 i/ Gcron.info;cron.!=err 0124568 v* N! V, u* a/ t
0123456 01245673 e6 L& p( {! j0 [6 K
cron.info;cron.!err 456* d( D2 I/ m" P
0123456 4567( g& | x0 C! o8 k
, c$ f& D& f" K2 |. `. m
特别说明:
S' t/ z7 H4 F! O+ W% L/ ~3 o; ^ The facility is one of the following keywords: auth,
% E/ X( N6 k! _$ b0 m' |! p+ y+ B authpriv, cron, daemon, kern, lpr, mail, mark, news,
, b0 r+ A# O* V% z% I security (same as auth), syslog, user, uucp and
8 r" M( C% z0 a local0 through local7.(设备载体)3 |& M2 v" I; i4 r
log facility 设备 设施:用来记录一种类型日志的日志设备, l+ @6 j* s. {/ Y. I
" O. Z* `2 i: d4 H6 g( ]+ R$ Tdaemon+ A. P) Q) \8 S, e# y. y
auth
) _# J( p6 y" f B' I; Xauthpriv5 N) v2 D. c1 n. |3 o9 T: s
user
) t5 ] d( @* b* Y8 j; V; rmail
6 Y N% S! k/ C7 r nlpr! k( l9 r# e7 ~, |( C
news2 h- w0 u6 l+ }' `- i2 W1 p3 T
uucp/ g8 [; G3 N, ]" P, \. E
ftp
5 O7 | z* u- m- Vlocal7
' N* R# q8 ]9 ?( S }, n) Z3 p; p
9 d; B; o2 K' _: O/ e9 j& l$ e5 u- t( `! G% N# f- N' q
本地日志管理ssh
% x! C @* w/ v. z2 F3 O) U$ t# ^6 W I: ~- {6 a6 H7 u- ?1 S
[root@server ~]# man sshd_config5 u% _3 c. w2 @( r& [ q
SyslogFacility
0 `! @2 S- w0 Y" S Gives the facility code that is used when logging* j, V# A# A9 \, i4 Q
messages from sshd(8). The possible values are: DAE-! m. N m3 H5 Y- W
MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
* M* k2 F( R5 k ]3 m3 L+ Q# N. u" m LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. The default9 W; X, n* V' a/ [
is AUTH.- Y; P" T* P: J
更改ssh服务的默认日志记录载体
- O( k( V$ q9 L& n) I$ z通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)8 `# d1 T! H. c+ q: |6 t
测试验证 ?( D( @1 U! W Q; i$ F( g& D
1.修改ssh服务配置文件
- O1 d! J% w" N/ s. r[root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak G9 ?2 m9 M p8 S$ I
[root@server ~]# vim /etc/ssh/sshd_config
' a2 ^4 ^+ G/ t3 S- VSyslogFacility LOCAL6- \: I9 W1 P9 u8 m
2.重启服务* q' z8 ^7 I9 R
[root@server ~]# service sshd restart
& A# J7 o6 [2 O! u0 X1 D. dStopping sshd: [ OK ]
6 h7 b- X* e* j3 x& lStarting sshd: [ OK ]$ Z2 R- h( [0 x2 J
3.将来自LOCAL6设备载体日志记录指定位置(rsyslog)
- z9 t! m! r z3 h[root@server ~]# vim /etc/rsyslog.conf
) _* s1 n8 u( F( Ilocal6.* /var/log/ssh, p7 B% [( o4 w
4.重启rsyslog服务
+ f+ p/ u8 V9 y3 ^[root@server ~]# service rsyslog restart
" D, b9 s! P8 i1 W+ B4 G4 k7 n- _Shutting down system logger: [ OK ]
6 t6 @- L& T. |7 Q$ J7 w0 F- m: ?, u6 L$ UStarting system logger: [ OK ]
+ j1 B0 U# v, P9 n, G I9 e, y5.客户端测试
, N- ?8 X' v" {' ?9 j[root@client ~]# ssh 10.1.1.28 R& e& ^ u/ `0 g/ i. G4 e5 [
Last login: Fri Apr 26 12:27:33 2019 from 10.1.1.1
! y! v# q5 S8 H! p. G9 k' E[root@server log]# ll ssh# ?* B) K5 G- {! Q
-rw------- 1 root root 0 Apr 26 13:40 ssh% }! P$ A% L8 Z# @ q
[root@server log]# tail -f ssh( t0 H/ n0 \6 W; q6 M; b
Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh2
$ n( ^1 m; O% D. a9 X: t" ?Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user2 M5 |( G: e g2 h# T8 }
此时进行ssh访问,日志会在local6和/var/log/messages里都出现9 l2 y! E, o: `
8 I2 t% ?0 G, w4 _$ B1 C
如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志. W% T* k1 y9 d, u% d3 v
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
7 k% T+ n7 v+ p; a
1 N1 w2 K+ x: v0 H) m# O五、远程日志管理* R( p9 E7 Z+ [; M
目前:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理
( V3 v0 S5 c# [6 f5 B
& i6 X4 a2 m% J环境:' q6 I, M2 F8 \' m6 o
$ `" v. l% g, ^ v `
log-server:10.1.1.27 A7 D5 ~! G+ f: L# I
- v0 o5 v0 ]+ r* }3 s$ n9 J4 s, U
应用服务器:10.1.1.3+ E k4 x+ j, E0 M0 \% Z
' K3 X; l8 Q+ B/ n7 E
ssh服务服务——>其他人远程访问该应用服务器产生ssh服务日志——>远程记录到log-server上
, Q( u; M, K$ H& ^
1 w% I! q( G* R5 ]5 yclient:10.1.1.4
5 i5 u* m* r. u: `) d8 {* A c( a- y7 y2 g' d8 o
ssh:10.1.1.3——>日志记录10.1.1.2% C1 J: o9 b2 E+ o% ^, U3 A
$ C: w8 Q& A0 T# _& e需求:把web服务器上的ssh服务日志,远程记录到log-server上
1 A2 W% Y( l# W# d1 B1 X! }, Z* Z# A$ ~8 P* u9 o
思路:. n$ M$ @, m, R2 ^
& v$ y, U3 I8 H* Y
web应用服务器上操作& y3 c, L* t& j8 h, u8 b0 j
+ L; T# d; l7 g! ^: I; O# l. }- C
将web服务器上的ssh服务的日志单独记录
: h' K2 Y" ?# Y! c2 {! O7 Z指定ssh服务的设备载体/ j- o4 {9 }0 f& P0 w7 a
重启服务6 U8 y% k- w# p0 h
将来自于ssh服务的日志设备载体上的日志远程发送到log-server上9 v d! ^1 M# C; C6 F# r8 E
以下操作在log-server上操作
3 [6 I9 U# ~" i& B( z( x& Y; D" S/ N, m
通过修改配置文件,打开日志传输端口
& V0 \ Q) ]' g% y3 \( {2 c加载相应模块 tcp | udp2 D" K7 N" O/ ~2 e$ Q" T7 s- G+ e
打开接收端口 默认514端口
$ @. ?: [, ~" T! S启动服务后日志默认会保存到/var/log/messages
( m T/ ` M: _步骤:
$ I& ^2 r4 q6 H7 g% m$ o1 z T; R# J8 z* _5 ~
以下操作在log-service(10.1.1.2)服务上完成5 P! E9 [4 ^) a0 A* K
1.加载相应模块打开接收端口(可以选择udp、tcp都打开)
3 Y+ H/ g3 |1 Y" }3 n[root@log-server ~]# vim /etc/rsyslog.conf+ S7 f+ a6 l! @3 G2 T
# Provides UDP syslog reception: p4 u' [; E* y
$ModLoad imudp# Q0 W/ h& C& X4 ^( C1 V2 t
$UDPServerRun 514+ V8 c; u( |9 R3 H1 c- S) Q( L
5 r- ^" ~4 o& S( K/ m7 ~5 j
# Provides TCP syslog reception, y/ a2 I) B( `; N8 H; B( \; S0 n
$ModLoad imtcp2 ^/ h9 \' o; P8 T3 e7 v2 w
$InputTCPServerRun 514
; `& B* d/ j! Q; e8 Z4 G0 z2.重启服务
5 K! U0 a# V6 f" z/ C: ]! N2 T jservice rsyslog restart& s" b5 s2 N$ [' P: ?, a @* o3 C
[root@log-server ~]# netstat -nltup |grep 514 //验证端口是否打开
+ s8 o4 y5 E0 Y9 ~tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 2822/rsyslogd ! k% W* q( b4 \, s% j, {3 S
tcp 0 0 :::514 :::* LISTEN 2822/rsyslogd - x$ F4 ^; y- g$ S; O
udp 0 0 0.0.0.0:514 0.0.0.0:* 2822/rsyslogd , f, T2 z: c" C2 U( `& B3 z
udp 0 0 :::514 :::* 2822/rsyslogd
8 i: p2 U' ^( R) l) K- E+ f' R. e6 W9 o+ }% i
以下操作在应用服务器完成(10.1.1.3):# c: ~, ?5 X6 |8 r- L
1.指定ssh服务的日志文件的设备载体$ @+ b. O8 M9 |) h
[root@ssh-server ~]# vim /etc/ssh/sshd_config
; z3 S3 B9 z" C0 @- |) H; ^SyslogFacility LOCAL0
3 R. F1 o- r- Y* Y4 g& F( s2.重启ssh服务; ]3 G0 Z# {* G/ s5 X2 K
[root@ssh-server ~]# service sshd restart7 x; }1 e! y9 o& y
3.修改/etc/rsyslog.conf来指定ssh服务的日志发送到远端去
( r4 B I5 y7 S2 K[root@ssh-server ~]# vim /etc/rsyslog.conf ) I; h! D7 \4 {0 ?! _4 o
8 }8 C& R) ], Y f, l, L, @# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
( q! [2 H! q4 Z/ K+ w2 M#*.* @@remote-host:514! t) B6 K V9 r5 d) [+ E
0 ~- t; r* \- G/ @% b% z" q! Nlocal0.* @10.1.1.2:514 //一个@表示udp,两个@表示tcp + l' f# }0 ]( X. ]$ C9 g
最关键的一步,将日志远程发送给10.1.1.2
; O5 ~5 l/ `/ p& W9 N: M) a0 N
( ^; x6 @* r; }9 A2 o% P. i8 o. S) ~9 }2 R! Y
4.重启rsyslog服务2 [5 Z% D, j u1 T; P' B
[root@ssh-server ~]# service rsyslog restart! E f" w3 s4 s2 u' o: o
Shutting down system logger: [ OK ]! a/ r% Q w, d) O5 B1 b$ q
Starting system logger: [ OK ]
2 x; Z: v' E' [& F- A" A! E" S
; N3 o! U- A+ P$ ~$ B2 Q8 d测试验证(client:10.1.1.4), V3 X" r5 `' p3 U, C9 }* F
[root@client ~]# ssh 10.1.1.3) v1 ]/ y- l: m- k7 B( P4 p% z+ i# g
The authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.# L; K1 O- H- M" p9 t
RSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.2 P, _$ x4 b1 ~3 N' q0 d
Are you sure you want to continue connecting (yes/no)? yes
2 k/ m7 t1 n! p( b! F) T6 ^# ?4 NWarning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.
0 Y2 J; B9 k9 D$ e( j) ~6 Oroot@10.1.1.3's password: 9 X3 E" U j* {( g e* x
Last login: Fri Apr 26 14:46:31 2019 from 10.1.1.1: b+ a: ^8 v% Q
' o- k6 I3 |. k& C! ~8 @[root@log-server ~]# tail -f /var/log/messages/ O7 U3 @3 Y/ j l2 o- m
Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2& k3 ?3 O3 W; g8 B O1 O! g/ B
[root@ssh-server ~]# tail -f /var/log/messages
0 z0 q" X5 J6 j i B3 AApr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2( \0 a' e' [3 }7 X
(不想记录就修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)7 j! b# W' _# X! x
/ D: x. J' S) `9 k4 A4 M3 q; C
注意:selinux和防火墙,还有udp和tcp 端口514是否打开2 B0 k, ] H( g" \" ?* x& R7 }/ K
0 k: w7 a; e, R4 i% _! Q六、日志轮转! s0 ~4 T6 h! R8 g. T: d5 X0 C/ Y
日志轮循(轮转):日志轮转,切割,备份,归档
' B; K( ~& c& z6 w' y8 L5 c! ?) q$ ~ N7 q1 l
为什么要日志轮转?
# ?. t! {# A: f避免日志过大占满/var/log的文件系统
4 Q6 A6 r+ o+ {方便日志查看
7 a, m$ E4 I% A! K2 H将丢弃系统中最旧的日志文件,以节省空间" z# ^3 S$ d; H7 f7 ] U2 E
日志轮转的程序是logrotate6 k. `) [/ x$ r- C7 Y# I2 v9 b
logrotate本身不是系统守护进程,它是通过计划crond每天执行
/ z8 V+ p3 O( g2 o; }9 h. L: a; u( `如何进行日志轮转?# g. f% S) w0 d
了解相关配置文件; d; m+ d* @- Z1 D
[root@log-server ~]# rpm -ql logrotate# i0 W( z3 j5 J- W9 C3 X T. J8 P
/etc/cron.daily/logrotate 周期性计划任务/ \% J2 X" w. Q( S' m, l+ f
/etc/logrotate.conf 配置文件: X# u0 B# S9 X% K! Z6 x8 m$ Y
/etc/logrotate.d 子配置文件存放路径
2 E# D& v/ [* u; j6 w8 K/usr/sbin/logrotate% q W/ B$ ?: Q
/usr/share/doc/logrotate-3.7.8# k/ v6 o$ g* N l. Q
/usr/share/doc/logrotate-3.7.8/CHANGES% V4 V2 h, q. }* F
/usr/share/doc/logrotate-3.7.8/COPYING. j9 j% j) e' D" ]5 u+ a
/usr/share/man/man5/logrotate.conf.5.gz4 ?; i. Y# K* N; y
/usr/share/man/man8/logrotate.8.gz
: ^* L$ `3 j2 E8 G/var/lib/logrotate.status$ c }- T `5 _% Y/ F
% T+ x* m0 r \4 K) w8 o& O3 \% P[root@log-server ~]# cat /etc/logrotate.conf9 K1 @2 E' G1 v1 G% [$ C, L
# see "man logrotate" for details
0 d5 g7 E" `, |6 K) Q# rotate log files weekly
6 [: _ o* w' J0 t. v2 \" dweekly. I; Y6 n$ y) k
7 f5 i8 H1 E* ], Q$ ~# keep 4 weeks worth of backlogs 保留4周备份日志
9 _- [& D/ S2 w6 |( orotate 4
. f, K8 e% U& O4 T: i4 m7 s! [9 K' P( @0 F0 R# \' P' ]
# create new (empty) log files after rotating old ones1 u. | v8 w# t5 N+ s
create, @9 ]; u. d( z# a$ \
y/ w4 k: v8 v3 @2 l* b: `
# use date as a suffix of the rotated file 日期作为后缀给旧文件重命名5 j) i5 \) @" y4 X( ^% K/ m
dateext
; B3 t H! Y7 a# o l4 \! ^) e- ^) z. G2 D1 i/ L1 l4 ]( Y
# uncomment this if you want your log files compressed
/ w8 m! F. c7 q2 Q' J" |2 I+ s0 `#compress
0 x, |( m! ]( Z
( {4 L C, X: E, D% D6 ^# RPM packages drop log rotation information into this directory( F9 v6 P1 \7 Q3 t
include /etc/logrotate.d 加载外部目录( a9 h% X' H0 c* I6 h- E0 K
$ m P: {7 r+ J/ L9 w( R
# no packages own wtmp and btmp -- we'll rotate them here
, o. N3 E U9 n/var/log/wtmp {
# S! S5 x' Q* Q& y8 M: X monthly6 ?6 u4 O& Y: _- B
create 0664 root utmp ' l" s0 O/ e0 R3 w
minsize 1M
: a( X' t! D) b5 N4 l" w+ k! r0 { rotate 1 保留1份日志文件,每一个月备份一次日志文件
) x# K6 R7 \8 P" C0 v, [* W8 H}+ X, B S0 b7 ?5 A, B
2 A7 I) J" ]* S; Z% p6 _
/var/log/btmp {8 D" E6 [1 O8 ]+ E2 N4 ^6 x5 _0 A
missingok4 o7 R+ z* H+ d- ^. K: F6 f5 q
monthly) f- ?( X$ A; c1 f) L. J
create 0600 root utmp6 N C5 g: H. i; F2 N" ~
rotate 1" B( M" O* q+ l: ^7 x+ J
}
8 ]0 }1 k/ M! ]6 c2 e2 @
6 }& ^' F0 }' F8 N! |# system-specific logs may be also be configured here.6 p4 |- T S, X. r5 w! q. A4 n
' {+ Y6 ?+ B; R( M3 z/ A常见的一些参数:
1 U e5 u, M3 Z, Qdaily 指定转储周期为每天
5 v! j8 x: [1 o& A" {monthly 指定转储周期为每月
& F" [: U% m2 ]weekly 每周轮转一次
* Z3 d h' M4 _: Y- erotate 4 同一个文件最多轮转4次,4次之后就删除该文件
6 s$ g5 K. n; _4 P" r7 wcreate 0664 root uttmp 轮转之后创建新文件,权限是0664,属于root用户和utmp组
! R- N! w: P/ c$ P/ pdateext 用日期来做轮转之后的文件的后缀名
8 V- c6 F1 {7 A3 y, vcompress 用gzip对轮转后的日志进行压缩
8 r/ B' |# O" M- z# L6 n/ qminsize 30K 文件必须大于30k,且周期到了,才会轮转
. ~/ c8 ~ j. S) O1 D. jsize 30K 文件大于30k才会轮转,不论周期是否已到% X* W7 k' R' D E
missingok 如果日志文件不存在,不报错4 k2 I, Z" ^7 a& R! M
notifempty 如果日志文件是空的,不轮转" W) ]2 @+ ~8 l- [ B
delaycompress 下一次轮转的时候才压缩+ l; v8 `' C, I. s. ^8 H
sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
+ V0 V- q7 r5 A: {+ `7 V+ Lprerotate 如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码2 I9 o$ s+ F0 W: @( t7 `' J3 V* Z
postrotate 轮转完成后执行postrotate和endscript之间的shell代码( j" z8 C* j5 S. i3 K2 v' t3 f
/ @+ a- B& Y* A' r- i2 i$ H[root@server~]# cat /etc/logrotate.d/syslog # U: R! r- c7 C- ^
这个子配置文件,没有指定的参数都会以默认方式轮转" l: H7 G! q# k
/var/log/cron
. Y0 Z1 {1 {) J: r/var/log/maillog
# [% F" f+ P& S z8 l3 x/var/log/messages
3 U! c+ h4 g: t+ i' [/var/log/secure- R- k/ K& n" D/ S1 y8 j, B5 m, K. @
/var/log/spooler- {: ~; z4 u$ L
{
# g' v) t: z- l8 L5 M sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
2 h$ ^/ ?/ j+ V h8 T5 N8 U postrotate 转换完后执行postrotate和endscirpt之间的shell代码5 J# j. l( G7 z
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
9 k6 {) I# ^9 z: M' D 轮转后对rsyslog的pid进行刷新(但pid其实不变)! T: N7 |4 o# \# Y- o% l! S
endscript
1 Q6 ^6 V; }4 A# f( e}
5 {$ ]$ t0 ?; a/ Z, @6 F思考:为什么轮转后需要对rsyslog的pid进行刷新?6 k) i9 g: P0 a+ ]
ll -i 查看文件的inode _+ ?+ z+ s7 f- l6 |3 X" r
-HUP 平滑重启
: k$ }/ E: G2 `' W6 I) W0 o0 k' [1 Z5 u, M0 M1 M8 \1 P* M3 K
$ q0 V3 c4 s( l! v% M) C
" b. p' u2 Z) \
& M" x# z- z: b, o+ G0 _1 w. u5 i7 `; d8 y& r6 @
不以时间为后缀进行轮转,在/etc/logrotate.conf/ nodateext
7 M, u, ]$ A, g6 I
1 k! |! ?) U- j N1 B; g# m清空环境
+ L& P# q' c# x( b/ _% t u8 H) Z, F9 J, x9 B0 _
重启服务. i) S# N/ |/ m8 i
l/ b2 k9 ^2 t
4 l, d) v9 v1 W2 R/ [
$ X F* ~: v9 {8 ~. b9 ^0 R: t) O* U/ y6 h: H; K
4 l& v- T$ ?8 P" A; [- l
结论 + n+ K' P1 a9 O1 |: T
' h& X2 N2 r$ S8 g+ h, [0 N! Q后刷新pid的话,logger -t "呵呵" "再见!"会写入旧文件(messages.1)里面+ F% t; m7 e1 L- R* C; n) C
3 G2 k8 f+ j* F, S将这句话放在/bin/kill这条命令后面,会写入新文件里
9 o- {/ _& h4 w: ^7 o/ W2 l8 \- Z
$ S4 {# W8 q) b0 A, Y# W# t最新的文件是messages,第一次强制轮转后的旧文件是messages.1,cat messages.1会看到logger -t "呵呵" "再见!",到第二次就成messages.2。而第二次轮转后的messages.1成了第一次轮转后的messages的老文件。(看时间区别)1 d9 j; N3 x' r) Q
- v0 V7 P( ~1 B/ J* E
|
|