|
|
楼主 |
发表于 2023-3-23 15:30:26
|
显示全部楼层
Rsyslog系统日志管理
( G, W4 v$ f) S% @; h1 K课程目标
2 l! c" W1 Z: K8 [! Q/ N1 b4 w! A
了解日志的级别与作用' u! \6 c c( q# v3 t& @/ N
掌握 rsyslog 服务的本地日志和远程日志的管理 h1 n3 x/ l( s) H5 M" i
能够使用 logrotate 程序根据需求对日志进行轮转
& L6 M X- p `/ V+ X9 d* X' C; ]一、常见的系统日志, r: t4 L$ S1 U5 j* |
日志格式:文本日志/二进制日志/数据库日志
+ V) a( U, f- E( P$ J, t' T默认的相关日志文件:
4 A; B" k1 _8 x7 A8 m% z' Y% |* s/var/log/boot.log 系统引导日志,记录开机启动信息' V* K0 T+ t' s6 m1 E
/var/log/dmesg 核心的启动日志
! C2 v" A, P2 p/ o/var/log/message 系统的日志文件
: p0 D, C8 g3 O1 x/ |/var/log/maillog 邮件服务的日志( l$ g# O2 m( B2 {
/var/log/xferlog ftp服务的日志9 |1 X. @" \, H3 [; R9 a
/var/log/secure 网络连接及系统登录的安全信息- ]7 d' f. d( F- v0 k c
/var/log/cron 定时任务的日志
& c0 {/ e" y: C/var/log/wtmp 记录所有的登入和登出 last -f 查看! B1 R4 s1 B1 w! N% h
/var/log/btmp 记录失败的登入尝试% Q$ ~$ V- Z1 _. a' d
二、日志管理程序
# y6 x+ g/ o! N5 Q- j& Y1 y在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。1 `1 Z3 ?2 n3 e6 Y7 ^* M
rsyslog程序管理本地和远程日志
, o8 y0 C2 c* t9 b# X安装软件$ \4 W% G7 J& [
根据需求修改配置文件8 q1 K) q" A3 d4 i9 H
启动服务: J% \ P! U. g
测试验证" v, x4 K* x% O1 U8 E
三、日志级别
! V4 ?+ y' B7 ^0 e. J# man syslog6 ^( G& v% p( d. i5 D/ d
日志信息分为以下级别,从上到下级别一次降低
9 Q4 x/ w8 Y# U0 O9 H v4 _0 U none none不是一个等级,它表示不记录服务的所有信息
5 |1 `7 X+ B" g- e- g* r, T4 M0 emerg 系统不可用, P" r7 B* l+ W/ O: {
1 alert 特别留意的报警信息: b: K9 D9 Y/ Z6 m2 o P+ R
2 crit 非常严重的状况9 a' q0 u8 x2 y2 ]. A) b0 R, U
3 err 错误信息 + O+ i$ X: I% V* g- `$ p- B
4 warning 警告信息
o$ p# g; u* z5 notice 稍微需要注意的信息
1 b0 L4 i1 F9 m: L3 H% X! _' T6 info 正常信息1 q7 w* c: n+ R) t0 Q; |! f
7 debug 调试信息,开发人员使用
& R( S5 v" B0 {& P% k8 K, O
+ S8 q- y' F8 |四、日志配置8 u- F2 K* b1 e: N0 y5 {; }
[root@server ~]# rpm -q rsyslog! ]7 l# `3 v4 {
rsyslog-5.8.10-8.el6.x86_646 n# n8 I6 O3 W7 s
[root@server ~]# rpm -ql rsyslog6 _8 N" k g2 W8 Q$ O
/etc/logrotate.d/syslog3 s; Y/ g# X2 g
/etc/pki/rsyslog
( f% F: g9 H7 {3 a1 v9 F/etc/rc.d/init.d/rsyslog //启动脚本. d f. n- ?6 m8 S6 r o- V' E* Y
/etc/rsyslog.conf //主配置文件
& H+ k# C1 I5 Z* ~9 M/etc/rsyslog.d //子配置文件7 e: s/ G4 w- p( D
/etc/sysconfig/rsyslog% ]8 c. n1 M6 L! x
/sbin/rsyslogd' k- [6 ~1 u a- P
/usr/share/man/man5/rsyslog.conf.5.gz% O7 H; S. U, W
/usr/share/man/man8/rsyslogd.8.gz* Y* V# ~/ n+ ^9 b
" g A* Q% X9 G9 J
[root@server ~]# grep -v ^# /etc/rsyslog.conf 5 ?' D0 K* G0 i! C
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)" E5 X1 p# w8 K$ C
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
. N T4 C% g3 J/ ]$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
9 x g, }4 b0 E- K$IncludeConfig /etc/rsyslog.d/*.conf
5 ]2 r% X: ~6 E' j( L& A7 [
) p3 U0 ~: x6 }+ k- J Z( r# O1 T4 e*.info;mail.none;authpriv.none;cron.none /var/log/messages/ k% V5 D+ P3 `, O0 V, k+ U. R
% n& K- J: [4 oauthpriv.* /var/log/secure: f( E9 q. i5 h5 }* M7 A9 }
# l$ r1 ]. z2 X' b) z. F" u: Fmail.* -/var/log/maillog2 v j) G- u! b: s: {% Z) ^# {+ ?
! y* H: c# [4 e; I5 i1 ?
* e- P" M7 b9 _cron.* /var/log/cron! e" q( y' |. l. {6 }/ U
7 i7 e. X; i2 Y*.emerg *6 Q# G4 E; H& M. `' ?5 `$ e
2 u: H2 S& d% i5 F* }2 y7 H
uucp,news.crit /var/log/spooler
: F$ G$ z3 {* y
& U3 m6 O- U# o% H9 y- vlocal7.* /var/log/boot.log
1 G3 j! k& S+ M) ~2 @; E) B$ e$ b V" E ?! Q
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"9 h& Y7 B f: V: S4 w7 [
+ t% l5 \+ ]1 O* |:programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl+ M, Z) I0 l E! g: R6 h
5 }$ W- M# b- h- N6 y
1.日志定义相关符号
: ^3 W) i, d7 `' [0 b% t6 p4 w配置文件中常见的表示符合$ ?+ F5 a: I- b# V7 d
. 用来分隔服务和级别) ]8 P4 j) V. X( X! e( s
* 任何服务,或者任何级别
% i" U9 s4 S& r6 I2 U5 p/ e= 有等号表示等于某一级别,没有等号表示大于或者等于某一级别
: G+ U+ t' N# a% O' L& `: c, J: N! 排除操作,前面有相同服务的表达式,这个操作才有意义
* M, c' X) U+ t+ z5 t 代表从前面表达式所包含的内容中排除某些内容$ }7 i6 t+ G; [( e" D
; 用于分隔不同的 服务,级别,组合$ Y) ^6 W+ U4 |1 u% b. b
, 用于分隔不同服务
2 ], L: u9 g% J) s* j- 用于指定目标文件时,代表异步写入1 ]; ?4 i: Y/ ^' ^& r5 G
. B, [* j1 x+ j4 c0 E3 L7 \9 D举例说明
7 ?9 ~ d; s4 m4 J# ^& ?mail.=info _$ H# O- ? x! u0 g( L e
mail.info mail服务大于等于info级别的日志- {. u! g0 R* g+ E ^
mail.info;cron.=info /var/log/test.log( ~: h$ x" f2 g3 A$ s, v( a4 f
mail,cron.err
& t4 f: n( _6 ]' ?; p( b7 r8 ccron.=warning
( Z* @+ M( Q& u. [ O$ o; |mail,cron.info0 u$ ?% e7 J- _8 p) D
3 C+ k2 s- L) q- |! ]; F7 @
cron.info;cron.!=err 012456* {/ R( b7 J9 i! Q& I2 e
0123456 0124567& j, F8 g, \( v+ }6 l
cron.info;cron.!err 456
8 b2 z0 M- q5 x4 l( u0123456 4567
% s% W- V ~* Y4 E
. d% W/ x3 z; N特别说明:* |+ X' o6 d0 V- k, R% O% _
The facility is one of the following keywords: auth,6 k' X- H- c7 ^. ^+ s1 I
authpriv, cron, daemon, kern, lpr, mail, mark, news,
# {* K* _' }0 \6 g8 E$ g, H1 ^ security (same as auth), syslog, user, uucp and
. v% L9 z( @- _9 v, u/ B0 F2 n6 F local0 through local7.(设备载体), B) H, J( C7 r
log facility 设备 设施:用来记录一种类型日志的日志设备
% |$ K% D/ p, e# O3 w( C; @6 y- m& Z
daemon5 ~' n4 [' {& F. q! v# |
auth
" L& q v& k' k) J; G. fauthpriv8 ?" K3 [ o+ W) F- o# n; T& r; r
user) H" z f" k: H0 [/ o c
mail
. s: Q: \7 f9 y+ W+ u9 Q9 Ilpr- o( h+ B/ r; n/ U% O+ A7 `( D
news0 c% k2 O0 J& U* Q1 u9 V: r2 k
uucp
: L* d' ]: v% T( j8 c' dftp+ x9 K5 Q- T) i' [; p/ x( ~% p. _
local71 m8 T% t) Q$ h1 L
) f& v3 J" o5 z: d/ L8 @
) q7 p3 Q6 c# S5 ^4 g9 w
本地日志管理ssh$ L; `1 j# _0 @% I! N* Y$ R0 Z
" P* F/ Y( N4 q- ^+ ?3 t; l
[root@server ~]# man sshd_config" Y( ]# g4 h' x# N' a, i
SyslogFacility1 H$ Y* D& a" c [% S% f
Gives the facility code that is used when logging
7 p( w$ t+ A: Y& h6 b2 y messages from sshd(8). The possible values are: DAE-
! x' U1 B6 j' A2 T3 Y3 j# C. H MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
% X$ G- ~; x: v4 U LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. The default
3 U+ Z* P. S! \; m+ E( s" s% q is AUTH.( Y, H- A% R! f% f3 m7 ?6 T
更改ssh服务的默认日志记录载体
9 M9 o+ @' O9 O" O8 W) t2 q通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)
- g4 ]2 \8 j U( m+ Y测试验证
1 r1 ?/ N: {" F( o- B, `1.修改ssh服务配置文件3 L2 v U% ~+ X/ h- K
[root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak+ g) |3 C& C ]# u
[root@server ~]# vim /etc/ssh/sshd_config
: ^1 g$ B& L* e; K! s, @SyslogFacility LOCAL66 r6 t8 b2 A n7 _/ X5 L; z" b
2.重启服务
1 O& i; f" A( @ V, \9 O[root@server ~]# service sshd restart, d% @; s& G e* X2 [6 I
Stopping sshd: [ OK ]
9 J, n2 V5 g. L# A$ bStarting sshd: [ OK ]9 t2 V5 g3 ^& g- w4 d+ I3 Y
3.将来自LOCAL6设备载体日志记录指定位置(rsyslog)0 B: ?% R& C$ H% N
[root@server ~]# vim /etc/rsyslog.conf" {# M6 J5 ]1 U, A
local6.* /var/log/ssh; D) h/ U9 f, W1 ]) V' z
4.重启rsyslog服务2 a% j0 K6 v j# t
[root@server ~]# service rsyslog restart: b: { s W$ b+ ?- P
Shutting down system logger: [ OK ]9 Y/ o& @0 v% O6 x% V7 f
Starting system logger: [ OK ]
8 ~ M+ k4 Q& p1 u/ r/ D5.客户端测试
, U! V! ?( M4 B[root@client ~]# ssh 10.1.1.2
x, y- ]2 \: `# t$ H |. A! {Last login: Fri Apr 26 12:27:33 2019 from 10.1.1.1& E: Y4 H/ n( p# s: Q
[root@server log]# ll ssh
- d9 G+ k& C) t-rw------- 1 root root 0 Apr 26 13:40 ssh5 R6 X& v. r1 z; E" O
[root@server log]# tail -f ssh2 H9 N4 J5 a: e. a3 ]
Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh2. v$ ~) ]( @; \: M
Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user' y& ^4 d( o0 ~, x+ z. K
此时进行ssh访问,日志会在local6和/var/log/messages里都出现) E- D2 t* m: w. o4 `
1 w5 w* P6 }" f" L( n
如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志3 F8 c) ^( i' ]0 A
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
5 ^, I f+ k2 A! ^' {, y
: @8 K) Y5 z h; y8 _/ D五、远程日志管理
! U- O' ?* W6 v2 y; Z目前:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理, `7 e9 C1 p, n3 o1 e
9 A2 X& S8 A6 N1 l+ \4 k5 u环境:
. x( v* y3 ]7 S& O+ V8 E
0 C; S/ L. R6 slog-server:10.1.1.2
. K2 E( ]! [* i- U6 x9 w2 \8 q1 u2 A, J8 M# z/ l3 U
应用服务器:10.1.1.31 @( Y7 l& F2 ^/ Q6 I* g3 ]7 E
3 o8 x# F% J" ]& ?5 G1 V1 pssh服务服务——>其他人远程访问该应用服务器产生ssh服务日志——>远程记录到log-server上# U+ l* B3 J8 ?7 r
+ ?0 x/ Q$ T* N3 }2 u" r) K3 N% ?4 E
client:10.1.1.4$ ~# n8 k& r8 F- L
7 ~1 } G4 D" j4 V$ i# @ssh:10.1.1.3——>日志记录10.1.1.2; J2 ~* T% z3 ]8 A( q
1 `! h& d6 y& \4 R7 v- b8 t1 E, `
需求:把web服务器上的ssh服务日志,远程记录到log-server上
4 V* Y% z2 L+ u6 x& Y. q. H
; |' Q% Y; E6 n4 q6 v, |) i4 H思路:
5 S8 D: A- ]# G3 @2 d' A* b' V
- V1 z2 S0 Q! O. S, w" X; pweb应用服务器上操作$ w+ o0 u1 s6 B) \1 m; e+ n
* K; r5 f6 j$ K$ F
将web服务器上的ssh服务的日志单独记录
. ^( y7 [3 {$ k. I K+ k+ a指定ssh服务的设备载体1 n% I) N4 B7 A$ x
重启服务) m H% i! S* T7 \9 b
将来自于ssh服务的日志设备载体上的日志远程发送到log-server上" o0 l# w1 H& v
以下操作在log-server上操作9 {# S! Q- I+ O+ {+ U% l
6 x8 L( b3 j5 ]+ P1 Y- b7 O* d1 i
通过修改配置文件,打开日志传输端口: A6 J1 F( {, d' T6 C
加载相应模块 tcp | udp Q5 Y% I/ k& C! ]: J, H/ j( R
打开接收端口 默认514端口! ~4 B% l( I% I7 a; j
启动服务后日志默认会保存到/var/log/messages
6 S. ^, r. B1 `, Y& O步骤:' Y' e& E u# S/ Q
4 d/ Q' ?9 W% Y以下操作在log-service(10.1.1.2)服务上完成* s* c1 x2 r; r1 A- i
1.加载相应模块打开接收端口(可以选择udp、tcp都打开), \& {) V" D- C( }% ]+ R, e
[root@log-server ~]# vim /etc/rsyslog.conf
3 E4 Z2 ?2 x/ i) Z6 [3 r) Z& f# Provides UDP syslog reception, A6 q. ~; i8 C% Z4 g
$ModLoad imudp( k# z0 p1 n- @" b6 Z7 C+ \$ L
$UDPServerRun 514/ i; `4 F' R' }+ t' r3 B B5 W7 ^
1 V6 _5 T- k7 ~9 a& I6 C6 y/ `) ?
# Provides TCP syslog reception b, t% Y& h; X, H) A. W9 T) d
$ModLoad imtcp
* c( ?. M! Z3 H* A8 Y, W9 V$ ]$InputTCPServerRun 5143 V- \* K8 o/ |- G, z3 r; D' n
2.重启服务
4 z, A& A# D: b% X ~) Fservice rsyslog restart- B! i6 d' \1 ], S8 q
[root@log-server ~]# netstat -nltup |grep 514 //验证端口是否打开
/ d' d( q6 `9 d" B. E8 ^tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 2822/rsyslogd , l+ S" d6 P2 J2 v3 y" D
tcp 0 0 :::514 :::* LISTEN 2822/rsyslogd 6 V, q! q9 P' |4 H+ `; u" F
udp 0 0 0.0.0.0:514 0.0.0.0:* 2822/rsyslogd
7 L- o( k5 D1 B7 s- Nudp 0 0 :::514 :::* 2822/rsyslogd
( W: @4 Y1 b: X9 ~" B& l! i& y$ `, h
以下操作在应用服务器完成(10.1.1.3):: _- \: M4 w7 _( ~! R- |
1.指定ssh服务的日志文件的设备载体
. d2 F, T: @( z7 c[root@ssh-server ~]# vim /etc/ssh/sshd_config * g( [; K m% A9 i! w; t1 g9 u
SyslogFacility LOCAL0
" Z- C- B- W6 N( ]/ V7 q2.重启ssh服务* h: J6 f2 {- H9 t8 x( d
[root@ssh-server ~]# service sshd restart* n9 {+ u2 f( E1 I# w' \/ O, d
3.修改/etc/rsyslog.conf来指定ssh服务的日志发送到远端去
+ D2 h6 G, p4 I) n# Q/ x; x[root@ssh-server ~]# vim /etc/rsyslog.conf
" P Z$ [9 i% E+ l- Z' J5 U5 X( Q: t
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional6 F: D' e, F5 \) q" W9 @; Y& w
#*.* @@remote-host:514/ }# e) a1 s0 J: H* Z) C# l
+ o K. P* b/ i L2 W
local0.* @10.1.1.2:514 //一个@表示udp,两个@表示tcp
* r/ d! v5 S3 u* m! `# t5 R; O最关键的一步,将日志远程发送给10.1.1.24 @+ Q' |3 F" P( K, s
2 J, ?) G7 l: l( Y( P s, N
* n% w/ s C% Y0 R3 f4.重启rsyslog服务& i6 u. ~4 p7 D: p# x# O- q) w9 W
[root@ssh-server ~]# service rsyslog restart. p; x2 C3 P/ R0 v5 ~) {# m
Shutting down system logger: [ OK ]* w* [! D/ u" C) q9 Z# `: D
Starting system logger: [ OK ]
7 X/ Z: g' S4 L. P5 g) F* h: Q1 B9 L) o/ B4 z
测试验证(client:10.1.1.4)
; d6 k f! b0 A[root@client ~]# ssh 10.1.1.3; o/ i- y3 i- U2 l' o( K( J
The authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.
M, S) ?% p2 S; qRSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.* V$ z3 |: v: C& Y. u7 _# a$ l
Are you sure you want to continue connecting (yes/no)? yes
+ p3 L9 T6 Q+ s: hWarning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.
8 t* S# p: Y- e# _7 ~. Jroot@10.1.1.3's password: ; e# `1 B l5 Y. |8 x7 }# t: _
Last login: Fri Apr 26 14:46:31 2019 from 10.1.1.1
* l" h; p' y) s' h4 P5 C0 i. ^! `4 i1 Q$ H
[root@log-server ~]# tail -f /var/log/messages
. H) l' Z- n8 ~9 ^! s5 }Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
. K$ j, @0 [8 Q) F/ T+ {) v/ Q[root@ssh-server ~]# tail -f /var/log/messages
& H! ?8 J/ y/ RApr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2# o1 u% f+ e/ h& [2 V
(不想记录就修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)
4 ^4 S4 c1 r( ~2 G0 p
! ?5 y! q- w! i5 e注意:selinux和防火墙,还有udp和tcp 端口514是否打开
2 {) N( X+ v. M1 ~/ g: }+ Y
5 L" R+ o6 L3 O8 L) F六、日志轮转
! @; ` _, p4 j, F日志轮循(轮转):日志轮转,切割,备份,归档
K: N! x+ V4 z v# z/ x- D
+ C$ ] [' D) I为什么要日志轮转?2 B5 E" x6 K8 ?9 y7 V
避免日志过大占满/var/log的文件系统& m, H% Q' W8 S7 }2 w
方便日志查看
6 E: V/ { e0 P0 z" S; ]将丢弃系统中最旧的日志文件,以节省空间9 K' l, E& p6 V- d# C, {4 y
日志轮转的程序是logrotate$ D& ?2 `& X& X3 b. I3 k- E
logrotate本身不是系统守护进程,它是通过计划crond每天执行
# O% z w- k, @& P如何进行日志轮转?
! j9 W; q6 m9 L& R了解相关配置文件
3 a8 R9 g F! o4 a) C" }3 @[root@log-server ~]# rpm -ql logrotate. V+ E( g" c& U" q
/etc/cron.daily/logrotate 周期性计划任务- k( z& _ v; @
/etc/logrotate.conf 配置文件
+ j7 i5 m- \, k: v! e/ k @- ]7 ?/etc/logrotate.d 子配置文件存放路径" H2 G6 V# @* E
/usr/sbin/logrotate9 w- W. d7 N! p7 `7 V
/usr/share/doc/logrotate-3.7.8. ?- A) o0 A. Y' ^: T; L# y7 [
/usr/share/doc/logrotate-3.7.8/CHANGES* i. k, L7 e& n& a3 S/ E6 N9 Y, T l1 @
/usr/share/doc/logrotate-3.7.8/COPYING
) R! x; j/ j6 L% J ^/usr/share/man/man5/logrotate.conf.5.gz7 {* m. `- s" x% u8 K: U2 Y2 ^
/usr/share/man/man8/logrotate.8.gz
) P) ]" F7 P" J5 |% t/var/lib/logrotate.status+ H ~9 t* e r7 B: n
9 W, k& D: t9 }- E D( K9 O g# f[root@log-server ~]# cat /etc/logrotate.conf# S( ^" I! o: g/ @8 v& E
# see "man logrotate" for details
( h W/ t: f( ~ i1 [( z# rotate log files weekly$ @4 U& o0 t2 w& ]+ N' i
weekly# a3 y* Z3 k- W( P- T5 N6 C- z# c; Q+ |
. v, m7 J: |1 N0 x. B; T5 q4 Z# keep 4 weeks worth of backlogs 保留4周备份日志
# B8 k6 V( c9 Brotate 4
& _. z2 _; f7 z. M- `
4 p l: J/ ^4 I# create new (empty) log files after rotating old ones F/ q# y" N; O, |3 i5 j! L! l
create5 F9 s* N& O. X4 q7 [: u
' p8 }9 w! r' G5 C7 k: W1 ^# L# use date as a suffix of the rotated file 日期作为后缀给旧文件重命名
& q; O3 F: Q* A$ O, _% @9 y0 N! i0 |dateext
. H- D% `# |+ M, T4 ?0 ?: b# }0 f" s; h/ Y$ c7 D
# uncomment this if you want your log files compressed
9 E' i+ ~- U4 {7 P8 E# ]2 t#compress$ l8 }$ _, ^* t( d8 E
7 ?7 W5 Q% L0 _
# RPM packages drop log rotation information into this directory+ S( c4 N2 Z! ~0 ^$ F6 x; \
include /etc/logrotate.d 加载外部目录. i1 G: I0 W9 s8 \7 k" b
6 |3 L3 d, P, y& [8 A
# no packages own wtmp and btmp -- we'll rotate them here
1 O1 W/ s. @& l$ i/ I1 r/ [ ~! K) Z9 n/var/log/wtmp {
$ I" K# f4 a( p, P monthly
* |( w7 B' }5 j# Y create 0664 root utmp 6 x3 g$ N1 ^8 n3 O8 u4 N
minsize 1M
W) i" ^- l, G+ Y# W- W- N rotate 1 保留1份日志文件,每一个月备份一次日志文件
5 g; P5 n+ J- I6 }$ g5 y! Y}
1 Q+ X" r5 ?2 d+ z- G. }$ k* A! h# e7 ^8 @8 [0 a, Z
/var/log/btmp {
0 w* O% S7 x" b& ]/ m+ a# n missingok5 f, C2 c% v! r
monthly
/ e2 R. ]1 n9 K- n create 0600 root utmp! L7 i+ R5 u9 o" \7 [
rotate 18 @# N9 ]6 c2 W5 F
}! `! x3 B3 M, V+ [% m# u2 z
5 S, W" _7 }: n3 q- \" F
# system-specific logs may be also be configured here.
$ y6 t b! a! f/ I! Q8 X
6 ^, `; v$ R- t5 E9 ~+ T常见的一些参数:
, t3 G: i3 O3 Ndaily 指定转储周期为每天
# @# A; i: ?. E8 X3 Nmonthly 指定转储周期为每月1 y4 R% c9 @ N' d A
weekly 每周轮转一次
1 `9 @0 x0 K* B0 J, Irotate 4 同一个文件最多轮转4次,4次之后就删除该文件
( i% H' l( w/ o; S, M3 acreate 0664 root uttmp 轮转之后创建新文件,权限是0664,属于root用户和utmp组# F: v# K! O1 o l. I/ Y% _
dateext 用日期来做轮转之后的文件的后缀名' B" }6 C% d$ j3 V$ P
compress 用gzip对轮转后的日志进行压缩
5 W+ z5 j; t$ r% j) `; cminsize 30K 文件必须大于30k,且周期到了,才会轮转
7 p5 [) ^1 T5 A1 jsize 30K 文件大于30k才会轮转,不论周期是否已到0 g, B) M" l! i# S8 `1 s
missingok 如果日志文件不存在,不报错+ s: B! w% k2 p( M) A% B4 O
notifempty 如果日志文件是空的,不轮转- h, c3 f7 I j: c, \% P
delaycompress 下一次轮转的时候才压缩# L% Z$ M3 ]$ [# V& a
sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次2 _1 V9 A- }. I, d9 v# z
prerotate 如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码% O2 @, N' n |7 o
postrotate 轮转完成后执行postrotate和endscript之间的shell代码$ l9 }% n4 h4 ~+ _
( {: M) I0 l* D[root@server~]# cat /etc/logrotate.d/syslog
+ W1 n5 H; D4 }这个子配置文件,没有指定的参数都会以默认方式轮转3 I0 p# B8 n* G0 T. [5 ^
/var/log/cron
* W* @) R. J$ \. `. \/var/log/maillog7 u9 ^& r5 R" j0 o0 B3 Z
/var/log/messages0 L% \/ {) k# J7 ~% ^
/var/log/secure
, V$ _$ _; m& w3 x- y! {/var/log/spooler6 ~2 E) F9 D u" |6 g% k, _
{
2 k9 Z' v: w, T3 W, P7 j sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
7 q/ a& ]4 _+ y postrotate 转换完后执行postrotate和endscirpt之间的shell代码6 _' d! }" @% E$ \9 n# Q
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
- V) t! a( f% r: r1 }: { 轮转后对rsyslog的pid进行刷新(但pid其实不变)5 n2 P! z# x4 z
endscript. Z2 F% F2 I4 \1 q7 y8 e
}
+ @ r) I4 q1 s) X' e& o, N- s7 P" O思考:为什么轮转后需要对rsyslog的pid进行刷新?" a: K$ r+ g7 @
ll -i 查看文件的inode 2 h) ]$ V" K5 y. p4 O
-HUP 平滑重启- A$ V& I# l3 R$ S' _ |! x
! ?, w, X; q- K" j% i1 p( F
& S) Q: M$ E) w8 \/ k3 }) b X0 m& v/ L/ E- \' k$ s
7 j3 r; l, s- U0 ?0 W/ S
% W+ |8 N$ Z# m. u; _6 H不以时间为后缀进行轮转,在/etc/logrotate.conf/ nodateext
p$ [7 y$ A5 U1 N0 K5 w0 _- ^2 L$ m& r' m& Z
清空环境* ]' v, ~2 p: j% f
. m' x3 G. P1 u0 Z/ T) J
重启服务. ~' ?+ m5 O: ]6 c! M" q2 X
4 r" m* h% s1 M O" F$ F; \8 k9 s a3 t( P6 N! G9 |3 v# O
: L. Z0 X% Y4 V$ m( O( B5 B
3 l1 s6 L5 }. z
, _: M8 F8 t! C( C% F/ A结论
. C; t9 O# a2 m
1 y7 s3 ]& w' k4 W* d后刷新pid的话,logger -t "呵呵" "再见!"会写入旧文件(messages.1)里面* X; F1 b( }4 E* ~' i5 S5 a4 T
% b6 q' W9 M* q. C# C将这句话放在/bin/kill这条命令后面,会写入新文件里. g2 D. q0 c0 ?) ]+ |
0 L; E% C9 \ d0 O6 Z最新的文件是messages,第一次强制轮转后的旧文件是messages.1,cat messages.1会看到logger -t "呵呵" "再见!",到第二次就成messages.2。而第二次轮转后的messages.1成了第一次轮转后的messages的老文件。(看时间区别)
4 x! ?4 R( R" e7 d% {" X% {4 ~( D1 o9 J' K# Z
|
|