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