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