|
syslog服务和logrotate服务
, _9 I4 ~# M6 z8 n3 x/ A3 g======================================================================. k: x/ T5 Q+ t% i8 Y r
rsyslog 是一个 syslogd 的多线程增强版。, N. T) J1 k. L6 r! u
现在Fedora和Ubuntu, rhel6默认的日志系统都是rsyslog了
& D' a V. {) E! x' ersyslog负责写入日志, logrotate负责备份和删除旧日志, 以及更新日志文件
! n \! y$ I( \" h+ V) n———————————————————————-
. w; H% X3 k% R5 ^rsyslog 服务) x0 B7 _8 C+ ~3 A% @ Q
———————————————————————-
6 J6 `/ U/ y$ e+ h+ W# ] s$ l软件包:+ _" V/ P! m! o n( r5 S
[root@centos ~]# yum install rsyslog rsyslog-mysql logrotate
3 m; t( P2 W. }1 g, Q查看当前rsyslog服务的状态:5 `0 F1 E6 @7 E" [' m
[root@centos ~]#/etc/init.d/rsyslog status
! Z; c" U1 ]" @rsyslogd (pid 1343) is running…
* _2 k; O5 e7 F3 ^! }8 S$ R0 ]9 c在centos6中, rsyslog服务默认是开机启动的1 O! _' J! t5 E: d: k% H( b$ k9 J* p+ J/ u6 `
我们先看一下它的进程::
+ p9 l+ j6 N6 n2 R% X' ]! C! k2 S) K[root@centos ~]# ps -ef | grep rsyslogd | grep -v grep
+ J1 D- P' j8 \9 U) Wroot 1343 1 0 12:09 ? 00:00:00 /sbin/rsyslogd -c 4
; V2 U1 s& \6 K. m+ v; a" @8 M从上面命令的输出结果看到rsyslog执行时使用的参数是-c 4.
* z1 S( P6 H, j5 k; b$ D5 o它的意思是指定rsyslog运行(兼容)的版本号, 这个参数必须是第一个参数, 当然也可以省略, 默认为-c0, (命令行兼容sysklogd)
1 @' c9 C8 o2 Y; c; \. M t; C这个参数是在文件/etc/sysconfig/rsyslog中指定::
% D+ I. Q: G, g[root@centos ~]# cat /etc/sysconfig/rsyslog
1 N: s: |% W5 U* e1 u9 S- # Options to syslogd
* J0 V0 k) x! k. _5 j& f& @$ y: w4 A - # syslogd options are deprecated since rsyslog v31 S D! T) C$ I( U {% v
- # if you want to use them, switch to compatibility mode 2 by “-c 2″) U* x9 G! [; o: t* x" p( P( q
- SYSLOGD_OPTIONS=”-c 4″ / W- W1 A0 _/ ?3 z8 c$ A
( |" L- s8 y. `" H8 D3 ^9 w J* H6 l* F3 [& s
[root@centos ~]# chkconfig –list | grep rsyslog k' E8 _$ x' p) w u
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
. W, X# a, I0 D V0 t0 L注意,这里的服务名是rsyslog!
1 V! X% k" ~9 [1 `% n( O4 I———————————————————————-
! y$ b0 f+ o. k" o2 l$ D3 }配置文件$ e6 ^& p3 q; ~, l8 ~+ R
———————————————————————-
; M9 }- F8 A# d# _( B% u/ s/etc/rsyslog.conf. K) U( Y# ?/ \8 }$ b* R* t% y$ g
配置文件的基本信息
4 j# [$ d! ?3 c; E- l配置文件中有很多内容, 但最主要的是指定需要记录哪些服务和需要记录什么等级的信息::% g2 s0 F5 p5 @ l8 q* v; U- i* w2 _
cat /etc/rsyslog.conf - S) A1 g$ k% H* j
- #rsyslog v3 config file6 B3 h2 f% Z& Q: u# D
- # if you experience problems, check1 K1 N9 G- h1 n, V% h
- # http://www.rsyslog.com/troubleshoot for assistance+ K; J) P& x( F) {5 R: |' A
- #### MODULES #### 加载 模块# U3 d' t/ P! K& y' e
- $ModLoad imuxsock.so –> 模块名 # provides support for local system logging (e.g. via logger command) 本地系统日志4 t6 `5 H! s2 E. p" J6 b* Q
- $ModLoad imklog.so # provides kernel logging support (previously done by rklogd)
2 u5 J V" S$ B, m T( L/ X - #$ModLoad immark.so # provides –MARK– message capability- Q; b$ l# y/ _/ f" S
- # Provides UDP syslog reception8 Z- C" }, ~) N1 j9 U: _9 l
- # 允许514端口接收使用UDP协议转发过来的日志- N/ c; ^8 m; K2 \, J" s- i. J
- #$ModLoad imudp.so
$ V. y1 A+ S1 @8 R* x - #$UDPServerRun 514
: Q2 e! A( C6 y- D& \! S# q' q7 c - # Provides TCP syslog reception
: y# z% e9 v/ T( t @" \ - # 允许514端口接收使用TCP协议转发过来的日志
, f' T, U( m+ Y; R0 S8 Y. |0 u$ J* { - #$ModLoad imtcp.so
% o9 q+ ~$ s q7 f2 b - #$InputTCPServerRun 514
7 F8 J4 d/ g2 @ b3 G# H' w - #### GLOBAL DIRECTIVES ####' [$ n# b# ^( g8 L
- 定义日志格式默认模板 / o9 H$ t# l3 j# `) }# @
- # Use default timestamp format. q: W+ e" W% T+ N
- $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
& j- U1 c0 O/ G: K - # File syncing capability is disabled by default. This feature is usually not required,9 r6 Q- u; m& c* Y. ]
- # not useful and an extreme performance hit
4 \# T/ A! r8 [. ` - #$ActionFileEnableSync on0 `# R) { S+ p6 o
- #### RULES ####
- j+ d' D1 V+ K6 ~4 Y Y9 | - # Log all kernel messages to the console.
; Y2 K. L6 X2 p, b4 w- e. ^ - # Logging much else clutters up the screen.
4 z2 N. k: M h; \, l8 g: ^ - #kern.* /dev/console 关于内核的所有日志都放到/dev/console(控制台)
3 Z$ u, l. p$ x3 z# L& @ - # Log anything (except mail) of level info or higher.) G9 p R' j5 U' C' \
- # Don’t log private authentication messages!
1 h4 q- y7 Q( j& M* d - # 记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外6 Z* u" J! l$ I% l( C7 C$ p
- *.info;mail.none;authpriv.none;cron.none /var/log/messages 9 c. q. R" g! T: i4 q
- # The authpriv file has restricted access.& i! o; H- Z+ r
- # authpriv验证相关的所有信息存放在/var/log/secure
9 i+ ]0 X1 Y$ k - authpriv.* /var/log/secure
; Q& B- P% A( D( x O9 x& E# p' w7 A - # Log all the mail messages in one place.
* M8 j$ }, Y) O& O) q6 r! U% \ - # 邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大9 n9 h8 ?% o7 k" o
- mail.* -/var/log/maillog % O# I( U# H; o7 s1 ~
- # Log cron stuff2 b2 [8 Q0 n( @* Z
- # 计划任务有关的信息存放在/var/log/cron b6 |8 Z) { @/ M) ~
- cron.* /var/log/cron + ~- E$ d7 V/ N V& P0 k
- # Everybody gets emergency messages
# Y$ R1 j+ r/ m7 s! V - # 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
7 K( q C: r/ b( b4 g - *.emerg * *代表所有在线用户
6 k3 J# X2 i5 G: {/ `0 y9 J6 p - # Save news errors of level crit and higher in a special file.
8 b- `9 K4 U# O( v q9 n" y - # 记录uucp,news.crit等存放在/var/log/spooler
, _& k' ]% h ? L - uucp,news.crit /var/log/spooler 4 `4 ]! K& M) C: F
- # Save boot messages also to boot.log 启动的相关信息; G" Z0 i0 b! `/ Q7 t6 Q2 ?
- local7.* /var/log/boot.log7 M, P1 }+ k: k w0 e6 E
- #:rawmsg, contains, “sdns_log” @@192.168.56.7:10514
; r* ?& j% }+ M9 j9 w7 o/ _ - #:rawmsg, contains, “sdns_log” ~' ?1 q% B; o" Q' s% Z2 y- [
- # ### begin forwarding rule ### 转发规则2 y$ c' Z- ~2 S
- # The statement between the begin … end define a SINGLE forwarding/ Q5 B5 _: p. N- G, z5 f: K0 M8 n
- # rule. They belong together, do NOT split them. If you create multiple7 J' Z) V- b5 z6 B: |
- # forwarding rules, duplicate the whole block!
% f. ~0 N; _# |: t- p - # Remote Logging (we use TCP for reliable delivery)
9 V7 C0 F( B# I* T- | - #
" I# J) a- T- ] - # An on-disk queue is created for this action. If the remote host is3 [; v) G0 @% W5 C9 D+ k( W
- # down, messages are spooled to disk and sent when it is up again.& L, ] t( h4 s/ j$ G m
- #$WorkDirectory /var/spppl/rsyslog # where to place spool files; h2 c# }& ^5 C% c4 ?1 H
- #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
. k; [, ]" X v; t - #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)# i/ j4 H; j a
- #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown/ o4 {* ~+ }( {: l. V
- #$ActionQueueType LinkedList # run asynchronously+ M* z n! r' } e1 p2 U( O# z- p
- #$ActionResumeRetryCount -1 # infinite retries if host is down
2 ^6 G( _+ S1 }. B( I/ F" t `' h - # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional" L. C0 M3 i, x% @( G) W F
- #*.* @@remote-host:514 # @@表示通过tcp协议发送 @表示通过udp进行转发
$ |. p% W& p9 p - #local3.info @@localhost :5149 @' d% T% I: ^; M: q w8 _
- #local7.* # @@192.168.56.7:514
8 r' n1 `, _, C* I4 e- b) j - # ### end of the forwarding rule ###
/ E, O& A4 N/ n. I3 B5 N: {. L4 n# m
! _0 B# n0 L' w2 z3 p+ e5 x F格式::* }! O( j9 j# s& t
日志设备(类型).(连接符号)日志级别 日志处理方式(action)& U7 o( f7 H+ C& @! s" R
日志设备(可以理解为日志类型):
- Z$ A5 p. C3 n7 X& ~3 p0 B& P———————————————————————-
- ?$ ~5 K8 n- @" |- @; T1 c, nauth –pam产生的日志) H! o$ |4 I! W1 Y, g; Y n
authpriv –ssh,ftp等登录信息的验证信息* n. r/ e/ L/ Q p2 ^3 h& i; y/ Z
cron –时间任务相关
. n, k0 i' }8 p% jkern –内核& x' j- _' T* H0 C1 o( E" v) e& F
lpr –打印
% y+ _8 p0 H% r2 t4 v0 i8 \2 i, Vmail –邮件6 u+ m) l1 V- i3 V/ ]5 j) X
mark(syslog)–rsyslog服务内部的信息,时间标识+ |0 G8 t( y- g) A9 e- i" d
news –新闻组/ C' O3 P; u6 Y0 w& U: K P0 u% X
user –用户程序产生的相关信息1 d( U' J7 s" M( p6 }; h. o% H
uucp –unix to unix copy, unix主机之间相关的通讯
$ J' p, W* w8 C7 {7 vlocal 1~7 –自定义的日志设备7 f% F% m& y/ m( L0 p6 c
日志级别:
: ?- i: u. G2 t" t9 G+ R$ r8 c0 c———————————————————————-
, ]7 t8 }8 T4 d' _9 i0 ^debug –有调式信息的,日志信息最多
) ^+ m+ @7 L4 c. R! w4 linfo –一般信息的日志,最常用
0 \ ]; G2 O! X( Onotice –最具有重要性的普通条件的信息
# W/ u( a, g) F5 }; z* awarning –警告级别8 w: ^+ @- Q* |8 ~+ S8 l& J; ~7 _
err –错误级别,阻止某个功能或者模块不能正常工作的信息
, \4 y' M6 E2 g8 T& s! M2 u( ~) z8 i/ ccrit –严重级别,阻止整个系统或者整个软件不能正常工作的信息: y0 v4 d! g. y1 f
alert –需要立刻修改的信息3 d8 M8 `! V2 n+ b/ h3 w" A1 x
emerg –内核崩溃等严重信息6 l9 h c: F4 t7 x3 ^1 q+ }
none –什么都不记录
' t4 O* c+ N. a$ D9 C从上到下,级别从低到高,记录的信息越来越少
. b8 ^3 E p% q6 [3 p详细的可以查看手册: man 3 syslog6 }/ h! g p, M' E) e
连接符号6 o' ]5 [4 k* ?9 p. N
———————————————————————-
; K" z$ E# Q5 W.xxx: 表示大于等于xxx级别的信息
2 n; s. S3 p. i& x, H0 s.=xxx:表示等于xxx级别的信息% Q, T* L* \# {" m
.!xxx:表示在xxx之外的等级的信息2 c1 c. \! c2 O- [3 b" J
Actions; \; V% F; _! L1 G: i; G
———————————————————————-; _; f2 }, @1 g7 e5 k+ I Q3 ]
1. 记录到普通文件或设备文件::
* {! K" u6 S' S*.* /var/log/file.log # 绝对路径
( [2 r. {( P$ N+ x6 R0 T1 `, J*.* /dev/pts/0
! H9 ]+ D4 d- w% {# e0 s$ i测试: logger -p local3.info ‘KadeFor is testing the rsyslog and logger ‘ logger 命令用于产生日志5 A# _! o: d+ [% f( e3 a& S
2. 转发到远程::2 J6 ~) w! m8 V* N
*.* @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口+ j& c: W( ^4 e2 c/ i) A
*.* @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514(默认)端口
& A$ `9 x: m: o( o% X, N; H3. 发送给用户(需要在线才能收到)::
/ j, a2 F, i- G( k3 U% z*.* root
& ?* B2 @: F! J" S*.* root,kadefor,up01 # 使用,号分隔多个用户6 L6 ]' P9 V) x' a* {; s( c
*.* * # *号表示所有在线用户5 h" ~+ b& n. Z1 j6 `- r, ?
4. 忽略,丢弃::
, _0 B. h4 [8 u. o$ Z: Elocal3.* ~ # 忽略所有local3类型的所有级别的日志
4 n5 p* s; \, v8 r5. 执行脚本::9 I! ~" B$ p g7 c1 k
local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径0 C0 T, y8 `: \" Q8 o* S
# 日志内容可以作为脚本的第一个参数.2 l. x. A& F1 i* m {
# 可用来触发报警
- e/ g4 b! K3 s3 p.. note:: K& Q- _- R) Q0 @
日志记录的顺序有先后关系!9 v. J; f- M8 s0 U0 e
======================================================================
2 o$ E' S- l. n( \" d! h一个标准的简单的配置文件, L& G0 A: i3 S
======================================================================
! r' B0 q; M" ]::
- Y/ B1 y0 x7 Q0 _*.info;mail.none;authpriv.none;cron.none /var/log/messages
% i6 n* H! w5 u3 V1 h3 pauthpriv.* /var/log/secure+ X& v' l* F, d) l( X0 _" ~
mail.* /var/log/maillog
% b7 G, m6 ?0 Lcron.* /var/log/cron+ J% [: j ` u
*.emerg *
1 B0 }$ I9 q D/ A! o8 Z! ouucp,news.crit /var/log/spooler
) k r: v% S( Xlocal7.* /var/log/boot.log
$ U2 a; y- ^, B* }4 _======================================================================3 c7 x& e3 F6 }/ t
实例: 指定日志文件, 或者终端( \! `$ M% m2 A$ b0 E% |( c3 O
======================================================================" d+ ^. _! [3 m" L1 X" C1 u0 p
[root@kadefor ule-sa3]# vi /etc/rsyslog.conf6 w/ F# I j& F9 x: }$ T8 t
[root@kadefor ule-sa3]# grep local3 !$0 V/ K$ t" \6 l u
grep local3 /etc/rsyslog.conf3 A! E8 m# c8 j
local3.* /var/log/local3.log
* Q/ N$ U1 ~8 @( F2 }3 V[root@kadefor ule-sa3]# rm -rf /var/log/local3.log
8 }; r L, v! ]/ h$ N[root@kadefor ule-sa3]# /etc/init.d/rsyslog reload
8 h& S# }8 i& N9 k# mReloading system logger… [ OK ]
# r; c/ C! } c1 N! A[root@kadefor ule-sa3]# ls /var/log/local3.log
- q) ]/ K' i" |/ b, O0 j8 r/var/log/local3.log
+ `' A2 C# E/ H* h, P& B5 I[root@kadefor ule-sa3]# logger -t ‘LogTest’ -p local3.info ‘KadeFor is testing the rsyslog and logger’; w; J0 x+ s& O9 N
[root@kadefor ule-sa3]# cat /var/log/local3.log0 ~8 e6 @6 ] {+ O A
Jun 10 04:55:52 kadefor LogTest: KadeFor is testing the rsyslog and logger
$ _- s, M& [; X( C. Q[root@kadefor ule-sa3]#/ `( R* C. R8 r1 x& ~
自己实验日志发送给某个终端1 R6 A) Y# X7 }1 |
======================================================================0 p8 h( n! F# b |7 h
实例: 过滤特定的日志到文件, 忽略(丢弃)包含某个字符串的日志
+ \3 |9 W- k3 f9 C6 w; d$ l======================================================================
) ~% R, x8 Y5 H4 ]# 过滤日志, 由:号开头 Z) w& Y. k8 h! \* ^/ R7 W) b- ^
:msg, contains, “error” /var/log/error.log1 A8 A5 Y% C5 S! E5 N
:msg, contains, “error” ~ # 忽略包含error的日志3 f6 l- v i7 y$ |
:msg, contains, “user nagios” ~6 B: M3 q6 Q1 V8 [+ E0 |
:msg, contains, “user kadefor” ~
- h( J/ V# c2 q8 g0 s; t4 i4 \ _:msg, contains, “module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write” ~; D& }" G% B0 P3 s- i& t9 R: g
local3.* ~
+ n- q h- j: N3 [4 D& |* CPS.
8 I- F7 m1 b$ t1 a& ~ # 忽略所有的日志
0 B8 k- v+ I! M* h把包含’oracle’的日志保存在/var/log/oracle.log
1 B" ~% F* Z% ?0 H' [5 Q- N, W======================================================================
; X J; Y) k. q6 R8 r/ K8 Z% M' r实例: 使用模板来定义日志格式
; x' u7 c/ \& b/ d& {======================================================================
# L O! S" V+ q0 |! }/ J2 f: {定义默认的日志格式: ( T/ v) C# G( G6 `* B+ n4 q6 r
- $template myFormat,”%rawmsg%\n” / @# ]& ? m: J( x; I; B$ }
- $ActionFileDefaultTemplate myFormat - I4 ?: g& x0 {$ `* X: m
- #如果不要$ActionFileDefaultTemplate myFormat这一行, 就需要像这样来使用模板:) \: H! o$ }. ~% o5 P4 R3 H" T
- #在日志文件后添加模板名, 并用;号分隔* f r6 h* v) F U; T2 e N
- $template myFormat,”%rawmsg%\n”
4 Z7 W: i8 p' o - # The authpriv file has restricted access.9 z. M* u" l# s; Q6 I8 i' {, h
- authpriv.* /var/log/secure;myFormat ) }7 A: T' I0 b n* S: b; A5 X2 m' c
- # Log all the mail messages in one place.
8 R) P' k- x( k- ^* k: s - mail.* /var/log/maillog;myFormat
+ B1 u2 U& G3 [3 \: L - # Log cron stuff
8 B( V4 h9 R, w - cron.* /var/log/cron;myFormat + ?: a0 o% [0 h- L6 j3 K# T
- # Everybody gets emergency messages n3 \4 Y G! X/ s( _1 j
- *.emerg * 2 k3 ?& a" \( P1 X
- # Save news errors of level crit and higher in a special file.
/ F7 j3 D; o. I y - uucp,news.crit /var/log/spooler;myFormat
* T. q5 E9 m( g0 q9 L - # Save boot messages also to boot.log
( O. ?* f |4 E0 h - local7.* /var/log/boot.log;myFormat 8 I, }& o7 p: t
: ]6 B4 h1 h& F! S ) P3 R- a* c- Z: E) i5 o# O7 X
======================================================================6 Y) i0 R' D0 k% s0 A. Q5 M( P% ?
实例: remote log 远程发送与接收:2 O1 s: _2 X8 q( \7 P( Y- Z
======================================================================
$ ]6 V2 c7 E0 D4 ~ c, ]如果要修改为非514的端口, 需要设置selinux. f3 s0 A( A$ D6 K0 z
只要在rsyslog.conf中加入
1 s; O$ Q9 s! x: u2 U*.* @192.168.0.10
+ F& s3 W4 i' Y*.* @192.168.0.10:10514 # 带端口号9 s# t! Z1 d1 R0 p( X
*.* @@192.168.0.10 # TCP% x* ]6 G! q" c" M$ i3 P4 }! L. D
但是没有定义保存在远程的哪一个文件啊?
& O1 }8 [' f9 M0 W其实保存在什么文件, 那是远程日志服务器接收到日志之后它自己的事情了.
3 y+ c, `& B% J例1:3 o4 C. T7 j& d+ M
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
. i% o0 M, K4 H' \2 c———————————————————————-
" u8 Y5 H2 W$ S7 p. BClient(send):; M7 o6 G! X* U1 {% @9 O
———————————————————————-+ ?2 s5 b9 y4 e8 j
::1 A: c2 A$ u& D' T: I
local3.* @@192.0.2.1:10514
5 I H7 n! c" @% p8 b) g3 `# if you need to forward to other systems as well, just
5 P8 j) k$ A- @; g1 f+ s& c! ^4 ^4 G# add additional config lines:: E( v8 X% d: g& G
# *.* @@other-server.example.net:10514
( u) E3 p, k0 P/ l6 U( a" C! W" E# Log anything (except mail) of level info or higher.
M/ P+ |- A5 p3 t0 w/ d/ b5 h6 X, k, U# Don’t log private authentication messages!
E' e" W* s" T*.info;mail.none;authpriv.none;cron.none /var/log/messages
V4 g. F1 C% b2 ~# L! R& O# The authpriv file has restricted access. g7 G) P9 H' ]$ [( ~0 x
authpriv.* /var/log/secure2 S/ O+ m9 I% B- p* ]. I0 Y
# Log all the mail messages in one place.* E7 D, P/ s* `
mail.* /var/log/maillog j; l# f3 `* a- \4 A% k/ }" @
# Log cron stuff
/ k' |* m% \$ \ Z( b/ r0 |cron.* /var/log/cron
6 C/ {" K2 V/ j# Everybody gets emergency messages2 P% m5 O7 O. [& c, T, I9 a
*.emerg *, N) T# H' B* O! `! B+ n* F
# Save news errors of level crit and higher in a special file.% k2 ~4 P3 r, @" s, h# d
uucp,news.crit /var/log/spooler
; C7 a! y+ A2 V; w* F# Save boot messages also to boot.log/ C7 |/ |# b% X+ ~0 _ P
local7.* /var/log/boot.log
5 P z. M3 z/ O$ W' z———————————————————————-; Q* m( }, @ U& y$ z" h
Server(receive): <1>& a' Z3 v% @% y" h1 Q/ p' B5 w
———————————————————————-
8 C- u+ Z8 Q' \5 [% V2 f::
. B/ q0 [( D: L# W! z8 u. R, N# for TCP use:
$ i. m( Q6 f; a: ~$modload imtcp$ T4 m" r- t1 i5 |0 p
$InputTCPServerRun 10514( T' D2 F& t- E2 @$ h% q
# for UDP use:
( V/ r% R4 F5 ]1 x, n$modload imudp
, a* Q8 U( b, r' B6 c) H$UDPServerRun 514
* @+ v' D u4 Z. q) y/ _% a# Log anything (except mail) of level info or higher.! j3 @, p2 a0 G0 j- f
# Don’t log private authentication messages!) { X1 E) }1 b6 V- A; i7 X
*.info;mail.none;authpriv.none;cron.none /var/log/messages* R( O8 ?' m% {4 A) ~( q
# The authpriv file has restricted access.% Y0 H$ A+ N7 t; `) q8 k$ w
authpriv.* /var/log/secure
7 `+ c1 B- m9 M5 L' Z; m2 e# Log all the mail messages in one place.
/ g' @, R$ j; t# f2 j3 }mail.* /var/log/maillog
1 E$ r H% U+ G5 L# Log cron stuff
& ]2 U$ n. y! C* ?# y0 ^/ O& {cron.* /var/log/cron
! J4 S. @/ G6 D T' h( i, _( b# Everybody gets emergency messages
4 k f6 `. s6 o7 S! ]*.emerg *
2 ]# f) P) ^: b4 O: r7 U# Save news errors of level crit and higher in a special file.8 N" t& C* e: Y8 y
uucp,news.crit /var/log/spooler
, P; Z- I) d3 Z3 c# Save boot messages also to boot.log
7 Z+ x/ E$ a6 g' Y* U) o. \local7.* /var/log/boot.log+ _ W3 Q1 R9 Y4 z0 c& b( b
local3.* /var/log/local3.log # 测试用1 A2 i) ]" u& a7 X8 U3 D0 {
例2 (仅做了解, 不做要求)# U% x. F9 t) r" e
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
G5 B+ e) S7 B#配置服务端(接收)1 O1 X+ Z1 u, @8 ^
———————————————————————-: D. n1 q0 [/ @( M! k2 `
vi /etc/rsyslog.conf #在文件开始加上,同时确保514端口能够被客户端用tcp访问0 j* c3 }( ^" S. ?2 f
$ModLoad imtcp.so # needs to be done just once #使用tcp方式
7 @4 J' r3 k+ K* g$InputTCPMaxSessions 500 # tcp接收连接数为500个* [1 {" n& d7 b4 t7 r
$InputTCPServerRun 514 # tcp接收信息的端口
; B9 h; N U0 D% W6 M5 q; k$template logformat,”%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n” # 定义一个名为logformat模板, 为信息加上日志时间
" a2 z# W$ P* T( n" y$template DynFile,”/var/log/tlog%$year%%$month%%$day%.log” # 定义日志文件的名称,按照年月日
; A: N6 T9 k: b' R5 {:rawmsg, contains, “sdns_log” ?DynFile;logformat # 把rawmsg(也可以使用msg)日志中包含sdns_log标志的信息写到DynFile定义的日志文件里) W& M8 M. y7 M
:rawmsg, contains, “sdns_log” ~ # 这个表示丢弃包含sdns_log标志的信息, 一般都加上它, 以免多个日志文件记录重复的日志
. H. G3 E" G! P" g1 D#配置客户端(发送)' s% p. T2 v% h2 C; b- E$ I
———————————————————————-
% T. |* y- g& _vi /etc/rsyslog.conf #在文件开始加上
% a. a6 v% f* K/ q" O6 X#把包含sdns_log的信息通过tcp发到192.168.1.2 @@表示tcp @表示udp$ b6 ?6 j4 z/ b- u" E
:rawmsg, contains, “sdns_log” @@192.168.1.2 # 默认514端口 U3 f' i5 q9 U
#这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message C! j& h$ o9 z" n( O; ~, a$ a+ N
:rawmsg, contains, “sdns_log” ~+ v% F3 D+ S% P/ g+ N5 L
#测试
9 d |7 ^" S1 g* E, A- O———————————————————————-" s5 ~) p& S4 `
在客户端上执行( ~& n _2 s/ G# C$ E
logger -p user.info “sdns_log 34334″! S/ |' c- ^1 O0 V1 K) r$ H7 _3 x
在服务端的/var/log/目录里是否有tlog*日志产生% a' l/ }) M, }
补充:. Y, `6 a4 _- c2 n/ G6 a
———————————————————————-- J5 N( n( [- Q3 @9 v0 ]7 w4 G
如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样操作:
8 m: x0 e2 x. E0 }, T6 B:fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log8 T- s* l% H J3 C
:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log4 o% ?3 T$ p5 w$ b9 P
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
/ `+ F6 ]$ } d( l, Z/ p! l:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log3 m; t" a r( f/ L! h h* J
练习:
* \$ U' x/ h8 W G! x9 O9 s======================================================================
6 M( o$ e, L9 n9 p+ O1. 实现把ssh服务的日志自定义保存到/var/log/newsshd.log (先不做)
9 T8 r% [2 s x& N5 C2. mail日志保存在远程日志服务器/var/log/newmail.log
: q; q& N8 g0 E) `+ m* i3. 过滤日志, 如果日志包含有”daydayup”, 则执行脚本/tmp/a.sh
4 ^- {+ k9 w2 o" G& |5 D脚本内容:
A, b- L) b$ S#!/bin/bash$ h/ E1 r4 D2 R5 H$ @* y/ _& N
echo “KO::** $1″ > /dev/tty2: j$ r' l1 s1 v) _& h- O
======================================================================
: G, F$ `' M& {logrotate服务- x7 C: t( \. Q, O1 g- Y
======================================================================
; q5 g3 a# p- Q6 |) urotate 轮换,日志切换6 m$ D$ d- I: d0 Z- x) [' b, h. x
logrotate服务的启动方式3 \) R" @+ H- E8 k- x
logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。3 k0 G* \5 {% E& M
logrotate 的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天由cron在指定的时间(/etc/crontab)启动。
# R4 o, Q* l/ B9 [" X. _4 w因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。
) Z- }9 v+ P. f8 e& ?4 |在执行logrotate时,需要指定其配置文件/etc/logrotate.conf9 y. v, c. K0 m) J: H$ Q
这 个配置文件的注释写得很清楚,没有必要再罗嗦了。只想强调下面这行,它的作用包含存放在/etc/logrotate.d目录下面的配置文件,不可或缺。 如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d下面。它其实也因为下面的这句话,在 logrotate服务启动时被读取。4 x. a% K: S. c7 @- H/ [6 l/ b) b
每个存放在/etc/logrotate.d目录里的文件,都有上面格式的配置信息。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。( F: }* `& u% Q; N, o/ |1 i
logrotate启动脚本放在 /etc/cron.daily/logrotate 中,可人工执行命令进行测试:& e9 a/ q$ C8 ]0 W
/usr/sbin/logrotate -f /etc/logrotate.conf
7 h- A+ g: Z e0 u' Edateext表示转储文件会以日期来结束*
, v# s) I6 M! g4 Z& _& c::. _9 p; n, F9 N2 t
[root@kadefor log]# vim /etc/logrotate.conf+ E+ D4 J6 |' q
# see “man logrotate” for details7 F$ \; f6 V9 B" {+ ]1 b
# rotate log files weekly/ O: u2 U" D: W( Y8 _3 U4 f
weekly –每周轮转一次! ?8 G V% E1 D5 d* v. f# x7 ~" p
# keep 4 weeks worth of backlogs6 `2 ?; ^# c2 k1 Y B
rotate 4 –保留四个
2 o" B. D' H% A: O s) G4 M# create new (empty) log files after rotating old ones
- F$ H T- u1 J5 `. t# k3 A4 acreate –rotate后,创建一个新的空文件3 a+ @* r; G* g) g. A0 w) D2 E2 K
# uncomment this if you want your log files compressed
- p% x; z5 {& h+ O( I j#compress –默认是不压缩的. k) `. D4 v3 T! ^% r1 s1 I
# RPM packages drop log rotation information into this directory/ ?9 O5 |) A0 y
include /etc/logrotate.d –这个目录下面配置文件生效: g# |; X3 q# m7 U) C6 ]
# no packages own wtmp — we’ll rotate them here* ]$ b) V5 L6 v O! [
/var/log/wtmp { –定义/var/log/wtmp这个日志文件& X6 N1 J* Q! d- _. R* U9 h
monthly –每月轮转一次,取代了上面的全局设定的每周轮转一次
8 j% F2 y1 Q# K) Y5 ominsize 1M –定义日志必须要大于1M大小才会去轮转2 ~( a$ b) x J, d/ J
create 0664 root utmp –新的日志文件的权限,属主,属主9 H! z; h/ X. X; H
rotate 1 –保留一个,取代了上面的全局设定的保留四个
2 F$ m. g- W/ J3 f( S! Q6 m. R} \; M1 x7 ]7 Z
/var/log/btmp {
2 V [: @6 y9 R) C2 A! P/ Nmissingok –如果日志丢失, 不报错2 g; v, q q9 J5 o1 M. k
monthly
% m0 K; x9 f' V% S9 J! Gcreate 0600 root utmp
2 \% D4 U* `5 j7 e6 Orotate 1, A' f" ~4 |1 Y9 T; h& I7 ?! r( s
}. g" k9 e" P; K) t. m& h
::) q4 e3 f! _7 x+ U% `
# sample logrotate configuration file6 N. D2 c7 D( f7 t- t
compress
# j3 S0 Q* }% ^7 p, Y# 全局设置, 压缩 N2 z9 m% x# A! G& R* c9 W
/var/log/messages {
9 |4 Q" \' [& |5 I, R$ nrotate 5 # 保留5份日志 K4 `* c; ^! e; g! J( C0 N2 L
weekly # 每周轮换一次0 P. @5 B1 I6 d* ?5 C
postrotate # 轮换之后重启syslogd服务
2 K+ j- J* k& D9 N; t' O/usr/bin/killall -HUP syslogd
7 \4 |# D1 g g& y& H9 N# rhel6中为:/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true" u- \; x$ }* A. \1 r
# 可查看/etc/logrotate.d/下的配置文件
& R- g, k4 E& Y4 T+ cendscript2 ~: O. I9 h9 U2 o* E
}5 C' ?/ E3 U# w) W0 e
“/var/log/httpd/access.log” /var/log/httpd/error.log { # 指定多个文件, 如果有特殊字符需要用单引号
6 {# }$ b8 H- g0 m1 R% Protate 5
( i9 q" O0 o8 Q8 E- n3 m! imail www@my.org2 S7 h; i6 i8 W+ o3 \# z1 w, @
size 100k # 超过100k后切换日志, 并把老的日志发送邮件给www@my.org% `" ~9 U5 k) l& `6 U* m+ i' Y4 [. _
sharedscripts # 共享脚本. 下面的postrotate脚本只运行一次.
5 w ?; M8 _/ G' vpostrotate8 [$ M9 J" _& M. E/ B
/usr/bin/killall -HUP httpd t4 A0 F/ {& L. S9 F' U& B
endscript
/ x4 ]/ E0 v+ K- G0 u% G6 q! ^}
6 Y: J1 y& F# R% L/var/log/news/* { # 少用通配符, 因会它会包括已经切换过的日志, 要用的话最好在*号后加上扩展名, 如*.log9 l0 |' W) x' E4 e. E! }- K
monthly& @! Q4 s% M9 T* ]
rotate 2. s3 f+ R# u1 K- ~
olddir /var/log/news/old
9 _8 Q5 ^+ e$ @2 t/ v$ Kmissingok
8 D9 W% f% @# }postrotate
0 x+ b: O6 q7 s" d- O5 U) zkill -HUP ‘cat /var/run/inn.pid‘
, n/ e5 e! R2 O# e2 a1 j3 }; Uendscript! [" P& O) i! l6 H3 p
nocompress
0 x- H& ?* R J9 b7 N}% H3 V9 j" T- v9 A* _8 Z
例:" R9 _( ?1 c, m" ]! {+ q+ Z
修改/etc/logrotate.conf
& E* |# b! |" R$ v/var/log/wtmp {& x9 u1 T& _5 g) ]5 e
monthly/ r X2 M! c5 O, r) ~9 v. D
minsize 10k
4 Z5 K+ Q- u1 I' A0 v* ccreate 0664 a b
; o4 I4 ]9 z0 |8 _. o% H4 \' yrotate 2& J- \3 H3 H" f7 {/ d1 a
}2 p0 e5 P; t, l* t5 x) y% n9 {, m
logrotate -f /etc/logrotate.conf –强制轮转
5 R8 g9 D7 x' U6 l' Vlogrotate -vf /etc/logrotate.conf –再加一个-v参数查看轮转的过程8 n& T4 m& S4 n2 o
———————————
% ]: l3 K6 {+ i I o/ f[root@kadefor log]# vim /etc/logrotate.d/syslog
; }, k+ Q) X. |6 x; T/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
5 F$ e9 f4 W9 W! R' s6 |) L: N' wsharedscripts –表示切换时脚本只执行一次6 t1 O) d0 l& u4 D+ e: m' s }3 M
postrotate –表示rotate后执行的脚本+ t" h& w/ n' X1 C# I/ H
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true- A K% J' R$ [$ i8 a
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
2 Q$ H# b0 p3 T" O: h7 S0 j7 [endscript –表示脚本结束( B ` F Z( W0 K: O; U8 t
}
! |1 } c) r( j& R3 ?0 j w[root@kadefor log]# logger -t ‘aaaa’ ‘bbbbbb’–在日志里加一个内容tag和内容% S& P! r [( {
[root@kadefor log]# tail /var/log/messages# C( i9 {- `& \; Z/ T$ e9 ^
Jun 12 19:38:55 kadefor dhclient[3166]: bound to 192.168.1.101 — renewal in 3384 seconds.
7 G3 e! U6 x! y+ a5 |' P' s% }Jun 12 20:34:22 kadefor aaaa: bbbbbb 9 s8 V8 y5 u8 z7 O
|