|
|
楼主 |
发表于 2023-3-23 15:30:26
|
显示全部楼层
Rsyslog系统日志管理, \* w& I, W+ U# f5 ?
课程目标
5 Q& ~6 ~# }9 L+ {# y' m# x6 W E; e! Q+ z& \
了解日志的级别与作用6 S# W% f" j$ s0 r1 t
掌握 rsyslog 服务的本地日志和远程日志的管理
( J+ |8 N. |0 {# i% E! k$ g1 Q9 {能够使用 logrotate 程序根据需求对日志进行轮转
+ d) d: p# I; e/ R+ k一、常见的系统日志
/ v: S" w$ h/ O; P: i日志格式:文本日志/二进制日志/数据库日志
+ j" B% }' l6 @3 Z默认的相关日志文件:
( n: J L9 n- @/ l% r! G5 N! @/var/log/boot.log 系统引导日志,记录开机启动信息
4 U+ ^. X% c: s/ t; k4 u6 q/var/log/dmesg 核心的启动日志
g/ W. L0 l2 b, d# `8 A5 [: c s8 Y/var/log/message 系统的日志文件2 i" Z- Y/ D5 r* l
/var/log/maillog 邮件服务的日志+ L0 t, W y* G) E3 V2 e
/var/log/xferlog ftp服务的日志
0 d) B6 ?* s/ N' X. L3 F/var/log/secure 网络连接及系统登录的安全信息, u- d" n3 u) ~* H
/var/log/cron 定时任务的日志/ g. B9 V2 P& E1 D4 a
/var/log/wtmp 记录所有的登入和登出 last -f 查看1 R9 S7 A& Z- `) o' `) V
/var/log/btmp 记录失败的登入尝试$ A8 E: o- U# I
二、日志管理程序
: ~& v) a3 e V" ?: I在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。
6 S. Q( d) P* q' s/ E2 g8 Nrsyslog程序管理本地和远程日志
5 [# t3 D2 J+ Q6 H2 H) D: A安装软件
+ C/ \) K3 ^+ p W9 r根据需求修改配置文件' W+ ?9 K& \& `7 G# N7 Z& D
启动服务* y# R5 _ U8 W, }7 T
测试验证
( j0 }. |/ l9 g三、日志级别
# b% U4 ?) y' x# man syslog
Y. w/ N- B3 A2 d/ s% i8 B7 j- n日志信息分为以下级别,从上到下级别一次降低
7 T F9 h/ W. i N6 T) _7 l( n none none不是一个等级,它表示不记录服务的所有信息; b) O `4 o6 M9 c
0 emerg 系统不可用
7 d; m0 c( `, C' T7 v! y1 alert 特别留意的报警信息
! O8 G+ A/ I E( |0 f& ?/ u2 crit 非常严重的状况
) [2 f- X- \4 E3 err 错误信息 ! B* M* X, w% z1 K5 {# {$ E
4 warning 警告信息1 s2 e% N) z% a. Y o! Z8 j* }8 n. B
5 notice 稍微需要注意的信息$ O" G2 S/ C* F4 D. \6 z
6 info 正常信息
% Z w+ v" U9 Y0 j7 v7 debug 调试信息,开发人员使用' Y' t# H9 v* G# s/ d. }
* W. L$ i( \! y/ U
四、日志配置
( A! f% q% y a7 w/ k7 f- c7 N[root@server ~]# rpm -q rsyslog
- ~: _' I7 h. f7 Ersyslog-5.8.10-8.el6.x86_64
, ^5 i# g8 O; j3 Q# S" D[root@server ~]# rpm -ql rsyslog8 P) O1 a7 {9 r# D+ y$ m
/etc/logrotate.d/syslog) z* m. i4 W l9 ~ D
/etc/pki/rsyslog
/ u+ z$ H7 I& w1 N, w/etc/rc.d/init.d/rsyslog //启动脚本- _2 R F0 i# E% @6 `/ q
/etc/rsyslog.conf //主配置文件
) |, p7 L- {% }4 [5 |/etc/rsyslog.d //子配置文件
1 G i1 v: U* r) I2 w/etc/sysconfig/rsyslog
) n- N) }& K2 x9 a/sbin/rsyslogd: J1 w6 W: F; J0 e0 }; d% x
/usr/share/man/man5/rsyslog.conf.5.gz
7 h4 D. K2 [- S. M. K8 y: F2 {/usr/share/man/man8/rsyslogd.8.gz6 V0 G" S8 x- ~4 z2 w! ^ P
$ J z" C& z- C: X+ p- x; q# K) A& R
[root@server ~]# grep -v ^# /etc/rsyslog.conf ! W+ A; s& B- _7 l" J
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)! F" b/ Q# t" W" G
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
% V; e' ]7 ?/ L( k) z$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
* M& M$ b; X. R$IncludeConfig /etc/rsyslog.d/*.conf
$ W8 {# x3 L8 p; o% [, b, D9 V D' W: O! d O
*.info;mail.none;authpriv.none;cron.none /var/log/messages
2 }6 F9 H+ d1 S( `5 p0 \ o1 s' L0 b3 ?, n
authpriv.* /var/log/secure
& L. P9 F4 m |+ J5 Q: U: ]& Y8 \! {, ~
mail.* -/var/log/maillog1 W5 n, K- t; J+ }7 u
8 K1 x5 i0 ~' L
2 ~, T2 U* }! _& C' r- j% x! Gcron.* /var/log/cron
& ~; e# p N' ?1 v- d
V) F& p- N; ]8 P' d1 B*.emerg *! U8 H6 _" h- z2 m; \( n
1 f1 {% v7 r8 n) E
uucp,news.crit /var/log/spooler# E* d" \* P l; T7 I
( j9 R$ T0 O& U5 h4 C
local7.* /var/log/boot.log9 O. n, q1 ^/ P. ?1 L W1 z' \; \
9 S0 V8 r s9 N8 o) m( U' i$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"+ E: w& W1 D+ W' @8 d
) o3 J% U7 }, C5 T7 ^/ R. a:programname, startswith, "spice-vdagent" /var/log/spice-vdagent.log;SpiceTmpl0 p3 }- Y/ G* l0 q% d
. V: F% }5 k* k, D8 V3 L, m1.日志定义相关符号
' t) S$ f" o: x( A8 K2 g配置文件中常见的表示符合
2 F( S" o9 K- g1 e2 Y9 _. 用来分隔服务和级别/ \1 J: x7 C! m: d- \$ ]
* 任何服务,或者任何级别
- W' K5 J7 c' c3 O= 有等号表示等于某一级别,没有等号表示大于或者等于某一级别" K6 A% ?' J4 |( ^' A; v U! Q- }. f
! 排除操作,前面有相同服务的表达式,这个操作才有意义
, v0 r$ q8 c/ g( j7 w: [& c" D 代表从前面表达式所包含的内容中排除某些内容
4 Z# r7 G7 F0 {8 O# p; 用于分隔不同的 服务,级别,组合/ m( A5 z0 T$ O: g
, 用于分隔不同服务: a: f. A$ [6 u. i
- 用于指定目标文件时,代表异步写入8 Q3 @3 ?& n) @! K5 ]+ U
* \5 h2 S6 V* ^8 t; k
举例说明. D0 i7 }4 O) p/ m6 v
mail.=info
7 L, j* c7 D: o1 r) m( Pmail.info mail服务大于等于info级别的日志1 V7 A7 R( A; V, N" r0 v E0 r& ~7 F
mail.info;cron.=info /var/log/test.log4 b; q: F' T* W- e% {
mail,cron.err1 a9 o* g: d' k
cron.=warning
' Y: H' U1 z& }2 w! ~2 ~mail,cron.info3 k, G* H3 y- j/ Y6 x+ {4 X
9 i: t3 t7 z' F \. F8 g& l! {
cron.info;cron.!=err 012456
; q0 o }' n5 M A7 V" t& J0123456 0124567
2 _1 s+ k1 p4 a( Pcron.info;cron.!err 456- W; m! c( b1 l1 E; y) Q
0123456 45677 o# g( v: `+ n8 f
# L0 j1 w. t( Z$ g5 D: T; D
特别说明:
. S3 ^& j- _. ?' s* b1 A3 z# A The facility is one of the following keywords: auth,/ z+ F" T8 t$ q
authpriv, cron, daemon, kern, lpr, mail, mark, news,
! ^3 L' U l+ `5 h \ security (same as auth), syslog, user, uucp and
2 ~) `1 k# r( S6 L. V3 s local0 through local7.(设备载体)
% K# u6 L, _6 t4 K5 llog facility 设备 设施:用来记录一种类型日志的日志设备
& {9 y2 P: C* H. t8 A O' R
. M! h/ _' q1 h X% q R+ p! w4 Udaemon# @ I$ l) Y H7 ?
auth/ u9 a+ g: W% S/ b6 g
authpriv
! v' Q3 t, A' L6 N1 N0 H0 Z* Guser! q, k" S4 J7 n% }) y' V' U
mail
$ g+ ]" c) U H' r( l! qlpr
) [# ^& h) C7 T% j9 U# [/ Cnews0 i V, m3 B; H- m
uucp' a$ i5 A! z! L8 p, p
ftp* U! D" S) C% M' R- A
local7' E6 a5 Z6 M6 x+ l
/ o- i3 Z4 Q+ n' |2 |/ @- [
' S+ r U) e' z
本地日志管理ssh( ?. d$ S2 I& d$ v! \
7 J; y Y/ q, x) m# j. k
[root@server ~]# man sshd_config
1 {5 `7 m6 P; w; v6 H3 l- ]9 T* r SyslogFacility
5 D5 B; G! R! e$ J9 H$ R5 a Gives the facility code that is used when logging
* n0 q H7 a W messages from sshd(8). The possible values are: DAE-* Q( {$ i3 g) n
MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,- [+ y1 _# w) \8 m# ?! Z
LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. The default/ ?" P! r1 f6 _' B7 {3 k/ ^
is AUTH.1 s- N9 H7 Y( o8 L M
更改ssh服务的默认日志记录载体1 Y) ]' j* z* R! G" z6 H
通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)( i) B/ v6 x p
测试验证1 d2 s& w Y5 l# L
1.修改ssh服务配置文件
: o, ~5 m h6 V( Z3 {& I[root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak. k/ A3 P3 D5 R
[root@server ~]# vim /etc/ssh/sshd_config 8 x$ \8 K8 c) \
SyslogFacility LOCAL6
$ O5 S2 Y# q7 t# s& C/ _$ w2.重启服务
* c& _( L' u. _[root@server ~]# service sshd restart. h% V7 C6 ^. u6 D- \! [
Stopping sshd: [ OK ]; {5 a& i* p$ W& I7 z0 n5 t2 W
Starting sshd: [ OK ]! l0 r6 _$ p, X( B
3.将来自LOCAL6设备载体日志记录指定位置(rsyslog)
; {- V4 E" K& j7 V" }[root@server ~]# vim /etc/rsyslog.conf
( |9 m6 B: R) F* I8 qlocal6.* /var/log/ssh: ^! Q& B8 _* z6 V% W5 \! Y
4.重启rsyslog服务
: T5 Q) f$ T1 D[root@server ~]# service rsyslog restart" Z4 i2 e' f- o5 ?5 p& E
Shutting down system logger: [ OK ]4 E3 u$ Z9 b, X6 a* F& O" ^; W& |& v
Starting system logger: [ OK ]
! b# q0 Z1 [* S5.客户端测试) D+ M5 c3 x( E1 k' O5 T
[root@client ~]# ssh 10.1.1.25 | D4 s; @3 `
Last login: Fri Apr 26 12:27:33 2019 from 10.1.1.1
0 E1 n, Z9 T) p6 O6 F[root@server log]# ll ssh, P9 C3 e% P3 K# {$ Z' N0 `
-rw------- 1 root root 0 Apr 26 13:40 ssh- c$ S" S: U; ]8 `* @7 j
[root@server log]# tail -f ssh, u* C5 q$ H8 @/ R- d1 i
Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh2* e' a5 s" I ]' s& b
Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user
1 M9 h! ]. S# V) K此时进行ssh访问,日志会在local6和/var/log/messages里都出现, Y8 K3 Z( t- T& h
3 ]) B3 D3 X) \! s: b
如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志$ G1 J3 y% X3 j6 d1 M
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
6 g6 l6 l4 r% @6 ?6 w$ B3 J, N# b% X- K
3 Q/ ]! l6 B# w1 X. v五、远程日志管理! V) n7 f; S) J# W$ Z; n
目前:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理
. ~' h- o. i6 p3 B- E! B+ r, o( _& v; Q
环境:! ^5 a6 p8 B# d% N( V) z
' V0 ]% j( F) T2 a! n! J9 b$ z0 ylog-server:10.1.1.2
: M, F, ]9 W. h {% W0 @4 h1 O4 ~& B/ y+ ?4 Y8 Q( j
应用服务器:10.1.1.3# f% g2 v6 D0 K' K% R9 K
( j$ h9 A; ^/ t: e' H9 z& W& ?
ssh服务服务——>其他人远程访问该应用服务器产生ssh服务日志——>远程记录到log-server上
& i" P9 E& @9 e! _' @: f- x0 w. `* O& B9 e, u8 Z( K/ e
client:10.1.1.4, }% T& ~ c3 G3 L3 b) p
3 q$ N$ g+ q2 L9 g& M; Xssh:10.1.1.3——>日志记录10.1.1.2+ Q" S7 c4 m, \: V" g2 r- e6 h# j
/ ]& _) c) {' y" W. C' H" A
需求:把web服务器上的ssh服务日志,远程记录到log-server上. G/ ~- o4 x& q0 Z7 M& ?
$ a+ t% B+ d* u, s) R思路:
6 q- g8 ]9 S6 t# L% H6 E( O4 S# J6 Y" m6 F
web应用服务器上操作
* i& x/ V: L& K: ^
7 i$ \7 e+ t6 a+ `* m4 F3 ^将web服务器上的ssh服务的日志单独记录8 [) e9 N2 p! h7 ^1 s& i' m
指定ssh服务的设备载体5 r0 Y: F! f# D2 K+ f2 n: ?
重启服务+ u4 s K1 c0 A5 F8 b* n5 r
将来自于ssh服务的日志设备载体上的日志远程发送到log-server上
& ?: S8 g5 C9 T' {2 c, L以下操作在log-server上操作9 A! k- V' A. D6 q) ~+ n2 O
. m0 }, R/ S) H) ^6 }! r. a9 \通过修改配置文件,打开日志传输端口
. o5 N1 A3 k0 i, d0 r. S- |加载相应模块 tcp | udp" {5 _' x( h) b, O
打开接收端口 默认514端口
S2 L; ?+ O+ u+ {启动服务后日志默认会保存到/var/log/messages& U& `. ]7 q1 q5 h% X+ n2 r
步骤:
~+ j% O! z5 t8 x0 w0 r9 a2 Z# \5 F0 p& {
以下操作在log-service(10.1.1.2)服务上完成* N/ N( ?4 ~' l3 W; I7 V
1.加载相应模块打开接收端口(可以选择udp、tcp都打开)" L, i, W! ]$ `1 C7 f1 N4 l
[root@log-server ~]# vim /etc/rsyslog.conf b# U* q# U" d! D7 W7 A
# Provides UDP syslog reception
^+ k4 J5 ?) v$ModLoad imudp
9 I5 W9 _) o2 b g. G$UDPServerRun 514
# y8 G0 X+ [, x0 x3 T3 t: [# V! g* Z
( G+ _+ P( j7 F# Provides TCP syslog reception
* r0 v* I% ^) |7 |* ]$ModLoad imtcp; m z& @3 |* H5 N) u% P4 ]
$InputTCPServerRun 5140 r2 P- R( n" d6 `5 v# u6 [
2.重启服务0 K' F/ t7 G6 a
service rsyslog restart
5 V0 o9 X+ }1 ], t( A* ~- R# G* `[root@log-server ~]# netstat -nltup |grep 514 //验证端口是否打开
8 B( j# M2 Z( Gtcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 2822/rsyslogd " R# a6 \( F7 P* q
tcp 0 0 :::514 :::* LISTEN 2822/rsyslogd : I3 F- V8 C9 u0 d* I' C, Q& z
udp 0 0 0.0.0.0:514 0.0.0.0:* 2822/rsyslogd
) X; h1 s: g# O# \6 `udp 0 0 :::514 :::* 2822/rsyslogd
8 V" s! K. u) S# u
. Z6 n. q" ]# r |以下操作在应用服务器完成(10.1.1.3):
# \! q: V. X$ D8 }0 E1.指定ssh服务的日志文件的设备载体3 C2 @2 e+ F5 D. u" R+ k( P2 y
[root@ssh-server ~]# vim /etc/ssh/sshd_config
' X) O9 d0 p- WSyslogFacility LOCAL0 z; a; U1 i9 j% U7 S6 E
2.重启ssh服务
- p/ i* C, g( T) e[root@ssh-server ~]# service sshd restart
4 c q, u: v y( O3.修改/etc/rsyslog.conf来指定ssh服务的日志发送到远端去
4 g& @' ?0 h, [ O3 `7 ]/ P3 d[root@ssh-server ~]# vim /etc/rsyslog.conf % n, o2 @5 z C& ]- L
8 m- ?" q( P# Q" x* t9 U# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
: D8 L. w! S9 v1 H6 S; U' V$ V#*.* @@remote-host:514+ w+ h$ `1 z5 ~- D7 K6 h: v9 `
+ W- K' t4 H) X/ O8 g ]
local0.* @10.1.1.2:514 //一个@表示udp,两个@表示tcp
( M) |5 D8 I7 Z+ x# v! K6 L2 N' G最关键的一步,将日志远程发送给10.1.1.2* }9 H/ m) j& i& @" u
1 d; h6 W' R- K6 f. T) _- }3 O1 m
0 P2 H* P1 U. n" E0 B1 l
4.重启rsyslog服务
c7 G4 J ^9 N" u[root@ssh-server ~]# service rsyslog restart
8 [ o; D3 q" g$ Y7 s: v. uShutting down system logger: [ OK ]
7 Y/ W1 o# o; r8 eStarting system logger: [ OK ]
2 \5 j: o: l( p' z3 t5 I" A( _/ C- \! d1 w
测试验证(client:10.1.1.4)
# ~( h" e/ ?/ l! m" V4 z; h[root@client ~]# ssh 10.1.1.3
4 n) T- k+ v* |* lThe authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.
$ Z+ W$ M6 w8 Z% O7 Y1 x3 w, tRSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.- o) l; V+ X/ }# ~1 V7 e
Are you sure you want to continue connecting (yes/no)? yes
1 Y3 h# y- R# D: E+ YWarning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.( Z3 |' j3 r; F' ]% i
root@10.1.1.3's password:
% O/ D: ]' |. _Last login: Fri Apr 26 14:46:31 2019 from 10.1.1.1* o, j; g6 a x* b2 Y
# u7 X2 g& h% c* w% M
[root@log-server ~]# tail -f /var/log/messages3 W P6 }6 m4 J$ b7 M( ?/ M
Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
6 U" I; ]5 g6 Q( j R, v2 g3 r[root@ssh-server ~]# tail -f /var/log/messages
0 m$ H: \' H" H) |( f3 a: tApr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh21 A; D/ D& }$ M0 H1 b% x
(不想记录就修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)( Z- O0 m. y8 a" h+ l, ]5 S
. A, o! H+ E1 ?# J ^0 _" r' Q注意:selinux和防火墙,还有udp和tcp 端口514是否打开% |2 D+ z8 {( m0 |6 ], b
$ \- q, V+ ]3 O9 a六、日志轮转% @! }. e9 ?( f
日志轮循(轮转):日志轮转,切割,备份,归档; \5 _3 ?+ U' a, H) A V6 T/ i
( f9 j. ~7 X# D8 D. \. p
为什么要日志轮转?
2 |" E: N) o/ N! S避免日志过大占满/var/log的文件系统
4 m5 H: i4 D9 Y9 N* x* K1 R! R7 K方便日志查看, d N, H) f8 ~" H$ f+ m( E
将丢弃系统中最旧的日志文件,以节省空间/ X3 y: j" u* B* d4 q
日志轮转的程序是logrotate% r" X8 v+ Z- c6 n4 X
logrotate本身不是系统守护进程,它是通过计划crond每天执行5 ^4 R3 H. n5 k, {+ s6 r) ]9 ^
如何进行日志轮转?$ u# E/ C; |% q( V
了解相关配置文件
1 r) s% A& K6 z/ Y5 K[root@log-server ~]# rpm -ql logrotate
) d& ]" c! o# ]8 D7 l4 F6 T/etc/cron.daily/logrotate 周期性计划任务$ ~8 f' \# O8 c+ j5 x6 u. p2 e
/etc/logrotate.conf 配置文件7 U# [ f7 k$ [- l2 F, M* v
/etc/logrotate.d 子配置文件存放路径
v, e8 o: t' `& Q5 b9 ~/usr/sbin/logrotate! V# W0 s; D$ s2 H% `/ H& @1 v8 F
/usr/share/doc/logrotate-3.7.81 l* ^. F( [2 |
/usr/share/doc/logrotate-3.7.8/CHANGES E$ X& Z; {, }! ~% Z4 g& U: a/ `
/usr/share/doc/logrotate-3.7.8/COPYING O( i i; n9 n
/usr/share/man/man5/logrotate.conf.5.gz
7 F/ ]1 G9 u* r7 W% C/usr/share/man/man8/logrotate.8.gz
! u4 I/ {" ~( a z/var/lib/logrotate.status4 l6 `- b4 o6 h Q
1 o, A4 Q! J6 [1 S+ |* B' X[root@log-server ~]# cat /etc/logrotate.conf, W I% Y5 v$ W/ f3 U# l X
# see "man logrotate" for details
1 h6 Y0 @2 w$ |# rotate log files weekly
( t5 }* c. D+ [' y" k1 dweekly1 L) c$ P2 K4 c0 h+ a
x/ X$ s0 m9 }2 z" J" @- Y
# keep 4 weeks worth of backlogs 保留4周备份日志
9 g: d; Y; N, Arotate 4
( n$ r' g4 y& e( E7 ]7 M# h" g
- c' a; V( I5 z$ K# create new (empty) log files after rotating old ones
5 A, j* k* K* O/ q c* ~* ocreate
" O1 L& m. o5 n+ s0 k" g- |
2 j* t) `; \+ Y9 V# use date as a suffix of the rotated file 日期作为后缀给旧文件重命名
* V5 d; M9 T( D3 R$ S: s1 l: f9 wdateext
7 @! i* p* `/ W/ n. L8 r% @0 l. n- P) W0 [; g4 f* v O
# uncomment this if you want your log files compressed1 w; P: F# ]7 f/ |# |* ]
#compress4 T" y# X0 R$ @/ f9 U# r1 \
0 _- n) c6 r$ C! z0 ?# RPM packages drop log rotation information into this directory, l! n4 ] z# n) J7 t3 f" R3 \
include /etc/logrotate.d 加载外部目录6 M8 _9 K7 n& G }7 m# Q
* w4 J: k4 f& z- Y+ J) R* f0 E# no packages own wtmp and btmp -- we'll rotate them here
|; ?' a0 h9 Z$ g+ l- Z% a; W/var/log/wtmp {& |( B5 j& a1 K: O1 J J' J9 c
monthly9 v* O+ j9 y; J
create 0664 root utmp ! Z+ e- s! R4 V( p8 n
minsize 1M9 y5 d5 i, q2 A% b
rotate 1 保留1份日志文件,每一个月备份一次日志文件$ J' B$ v T( u+ t
}1 V5 Q6 b5 l* V
/ _7 a. d3 t9 }% J& a/var/log/btmp {8 |7 Y5 J& ?' v7 L c+ E
missingok
% Z; y7 y& w& M& } P0 b monthly" C8 a- J5 G; S' J2 B O
create 0600 root utmp
; N4 N+ {. g# w2 i0 l) q rotate 1 z, L/ F4 o5 y# g, V! Y4 M. i: Q
}$ X& T3 b' _1 t3 L. g$ C$ I
2 _' Z7 {. T. b% _& d# system-specific logs may be also be configured here.
# J1 g* P, i' ` ~
0 _1 J, R/ Z% t) ` ]- V常见的一些参数:
. L2 d2 l/ @. O8 g! c! ^9 kdaily 指定转储周期为每天* w# d! v4 E p P$ j
monthly 指定转储周期为每月
% B' `. d; S* }! d" g# c) K Zweekly 每周轮转一次7 m( i/ j0 m& W/ D
rotate 4 同一个文件最多轮转4次,4次之后就删除该文件
- ^3 T+ r8 W8 Kcreate 0664 root uttmp 轮转之后创建新文件,权限是0664,属于root用户和utmp组
$ X2 w' R% o" _0 N" w3 ~+ a! ydateext 用日期来做轮转之后的文件的后缀名
. a: O& O9 _8 q( ]5 T% Y jcompress 用gzip对轮转后的日志进行压缩
O4 Z2 _( h+ E uminsize 30K 文件必须大于30k,且周期到了,才会轮转
% J W$ k' [5 Y9 a: E* Bsize 30K 文件大于30k才会轮转,不论周期是否已到$ J6 o$ |7 I& I& z1 S. a
missingok 如果日志文件不存在,不报错
8 _6 h7 S, M- znotifempty 如果日志文件是空的,不轮转" \) a9 g) N9 Y
delaycompress 下一次轮转的时候才压缩/ z: P6 v* t7 B0 c, N4 k) Y
sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
1 X; @. H# B/ [+ h8 ]8 gprerotate 如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码4 O9 J$ M [2 p. u8 y$ N
postrotate 轮转完成后执行postrotate和endscript之间的shell代码
1 u/ C; {) }! Q B, Z
) v* H* F8 t: n& }[root@server~]# cat /etc/logrotate.d/syslog 1 O. R7 \4 Z6 X. S/ S
这个子配置文件,没有指定的参数都会以默认方式轮转
7 w8 \8 J) g5 F: X/var/log/cron& w2 _, {9 G6 f$ n
/var/log/maillog& S- ?! Z* [5 W5 b4 ]% n" I. ~
/var/log/messages7 v5 l. N- ]. d
/var/log/secure
: Q( G( p0 O t4 I2 U* r6 S" L/var/log/spooler2 Z$ e6 e; ~' j+ P, C1 T
{
: F+ b( U: o, u" u: q' K+ D sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
+ }7 N% ~" w& c/ e& } postrotate 转换完后执行postrotate和endscirpt之间的shell代码+ F& x9 R6 T. M {) i* f# w4 Q
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true' I$ [0 K- `" q% n; Z9 _
轮转后对rsyslog的pid进行刷新(但pid其实不变)' r& r& ?0 r6 b3 k2 S, _: x" p
endscript
" X% _& B [8 \, W3 k}8 D5 m+ Y5 ]9 C0 K( \
思考:为什么轮转后需要对rsyslog的pid进行刷新?& {- {5 F/ i; r( R, j
ll -i 查看文件的inode ! q( C p f2 b+ l7 Z5 Y4 @( \
-HUP 平滑重启7 f% c0 c* U7 R" A: y! O
/ s# q3 U" d: C2 Z; _
0 g5 W6 U3 W+ m+ n, B; k/ e" z) n/ U: ^0 N7 m' k
" B& Q/ f, p- @. k& J: v( w7 J' ]2 p8 O' r, d7 J' F, S
不以时间为后缀进行轮转,在/etc/logrotate.conf/ nodateext, K* ?* y! M7 B3 F7 [
1 o7 h1 z; ~* a
清空环境
$ |' b$ m ^6 y, F4 _+ u7 Z
" R8 y$ o- j# @% m重启服务( J) t! }& m* u
# @) o, M% ]. m/ L& @9 t
' |& L& h0 l# i
$ k* b' Y. e( y& W; x7 W5 O
, i- v# c1 u% Q2 F* ]3 g! Y6 l
& C. l N S. e, R- ]4 U结论 & n/ L, R1 J- p+ L
2 O; f$ S# r/ l9 g z; }( E/ [后刷新pid的话,logger -t "呵呵" "再见!"会写入旧文件(messages.1)里面' V; I6 O* Z: B/ t: E$ D
} t3 \5 }+ \0 X+ `$ }2 j
将这句话放在/bin/kill这条命令后面,会写入新文件里" j$ w8 \7 e3 {- a8 v, ?6 {5 t
) |; U! t9 g3 Q4 o: b
最新的文件是messages,第一次强制轮转后的旧文件是messages.1,cat messages.1会看到logger -t "呵呵" "再见!",到第二次就成messages.2。而第二次轮转后的messages.1成了第一次轮转后的messages的老文件。(看时间区别)4 G) u, a% s+ F* g# v
! C8 B" E# D6 _ G1 C [ E ~/ _
|
|