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