易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 4132|回复: 3
收起左侧

rsyslog 的rsyslog.conf配置文件详解和日志切割

[复制链接]
发表于 2017-9-25 17:28:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x

syslog服务和logrotate服务' v( }: L( K! E& D
======================================================================
( W$ i# i1 H8 U4 s( d! o$ l  u' H/ jrsyslog 是一个 syslogd 的多线程增强版。
, q  T$ \) Y% _2 ?4 v$ n% j* B现在Fedora和Ubuntu, rhel6默认的日志系统都是rsyslog了
( y4 [" m7 |; i5 H5 drsyslog负责写入日志, logrotate负责备份和删除旧日志, 以及更新日志文件5 {; o/ C$ P8 x: h0 E
———————————————————————-
9 w/ [0 n8 u  Ursyslog 服务
, d+ v3 _9 P2 l, H" o: X———————————————————————-, Z8 U1 l6 ^* M" M8 i! i: n2 B
软件包:
9 `4 `4 f4 H& x5 d0 m[root@centos ~]# yum install rsyslog rsyslog-mysql  logrotate) V9 @6 k' ]3 B; _) e; d% P
查看当前rsyslog服务的状态:& x3 ]7 I) L  T/ r8 e+ ~9 b7 O- Z
[root@centos ~]#/etc/init.d/rsyslog status" d* H5 T( [  k) a
rsyslogd (pid  1343) is running…+ e: x! G7 U$ Q4 b) ^1 w
在centos6中, rsyslog服务默认是开机启动的4 b; I+ G+ s( E2 S/ w" E) L& f* T
我们先看一下它的进程::
* h5 @1 ~0 Q! j" t[root@centos ~]# ps -ef | grep rsyslogd | grep -v grep: o) |* W: J8 O+ i
root      1343    1  0 12:09 ?        00:00:00 /sbin/rsyslogd -c 4: h1 b0 a) K% D# y
从上面命令的输出结果看到rsyslog执行时使用的参数是-c 4.
. n& r6 f# j: ~6 `, N它的意思是指定rsyslog运行(兼容)的版本号, 这个参数必须是第一个参数, 当然也可以省略, 默认为-c0, (命令行兼容sysklogd)
' c7 u; _. \# u8 }' s/ I; M9 i这个参数是在文件/etc/sysconfig/rsyslog中指定::0 N  ~0 R/ a+ \- y3 Q) F8 o* [/ ~
[root@centos ~]# cat /etc/sysconfig/rsyslog

! |; n" t0 ~  w1 b5 k+ y
  • # Options to syslogd! H0 b  E" ?% _5 A/ J- }
  • # syslogd options are deprecated since rsyslog v3; i9 F/ n" G- l/ _' L7 y4 C
  • # if you want to use them, switch to compatibility mode 2 by “-c 2″$ F5 P! ~/ ^; p3 u3 ?) V
  • SYSLOGD_OPTIONS=”-c 4″  
    1 ?# V+ _7 T7 M6 h  f+ }5 m$ a" U

7 K! W$ P/ H( f1 u

[root@centos ~]# chkconfig –list | grep rsyslog' T% F  Z# j7 z* K8 Q! ~
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off7 C% R8 ]  J+ F/ S* }( C
注意,这里的服务名是rsyslog!
9 J  \5 i9 R( Y# Y0 K5 n8 b———————————————————————-
4 {, H9 v' s5 m* B2 d5 s# v配置文件
7 K# g: s8 X/ @4 m———————————————————————-/ F$ g+ D0 o. r' i" z; A
/etc/rsyslog.conf
+ @1 a. k) t+ z* l6 I' J/ p; p5 X4 T+ o配置文件的基本信息! ?4 ^0 T/ O3 H% v3 e& h
配置文件中有很多内容, 但最主要的是指定需要记录哪些服务和需要记录什么等级的信息::/ D0 ?8 ]/ X0 f1 d. ~2 B- a" s2 I
cat /etc/rsyslog.conf

' A. p4 w3 u2 |
  • #rsyslog v3 config file
    * b" D) e5 v! e* v1 a
  • # if you experience problems, check
    3 D- {- D+ C# ^4 m+ j
  • # http://www.rsyslog.com/troubleshoot for assistance
      k, k/ `3 p5 c( ]8 |! K
  • #### MODULES ####    加载 模块3 @+ @. s9 d1 X! h
  • $ModLoad imuxsock.so  –> 模块名    # provides support for local system logging (e.g. via logger command) 本地系统日志/ T- T; W6 V% _/ J6 H; y1 U7 ?/ e
  • $ModLoad imklog.so                    # provides kernel logging support (previously done by rklogd)
    " e" a  M  ?5 P; _: c/ w+ S9 r8 v
  • #$ModLoad immark.so              # provides –MARK– message capability. s8 Z" O! z6 E: Q3 b2 |
  • # Provides UDP syslog reception, Q' W9 J' h8 k2 v
  • # 允许514端口接收使用UDP协议转发过来的日志
    - m& B, Z& n5 I; A
  • #$ModLoad imudp.so' ^, _7 S' N- e7 L
  • #$UDPServerRun 5147 ?# u5 J1 ^2 e1 M% n/ H
  • # Provides TCP syslog reception6 m  B5 G# P& A, B8 ]- |
  • # 允许514端口接收使用TCP协议转发过来的日志. I1 C, B$ t9 u# P; @: @! w/ i4 Z1 P
  • #$ModLoad imtcp.so
    + k: i+ w9 e# e2 g' N3 u' e0 ?
  • #$InputTCPServerRun 514" e" b: p; K. O- R4 h
  • #### GLOBAL DIRECTIVES ####) j; ^! v, ]/ L7 G$ ~% ^3 k+ x
  • 定义日志格式默认模板  + \# ~* _( N" Q+ j! C
  • # Use default timestamp format! n: w" U- [$ ?2 Z2 o
  • $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  
    7 R; I: `" b- J( r9 a/ u
  • # File syncing capability is disabled by default. This feature is usually not required,
    ( E- B2 S2 ^( S# p1 w3 b, T& q
  • # not useful and an extreme performance hit
    - t# l0 T$ L& P7 L
  • #$ActionFileEnableSync on
    / G* q4 h# I  y- X% W% {) o
  • #### RULES ####* J. C3 L$ [% r7 Q2 m
  • # Log all kernel messages to the console.3 Y( H2 M# d, ?  O2 v
  • # Logging much else clutters up the screen.% z) T* y/ C- ?2 y/ ~2 Y5 s
  • #kern.*                                                 /dev/console    关于内核的所有日志都放到/dev/console(控制台)+ }! d- ^4 ?4 u0 p6 [
  • # Log anything (except mail) of level info or higher./ C' ]7 b- W( }# a; y& }2 o
  • # Don’t log private authentication messages!
    % d! T$ C$ T9 {
  • # 记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外. _. m7 w7 N6 e! S/ h
  • *.info;mail.none;authpriv.none;cron.none                /var/log/messages  ) s1 W7 a5 K! g, v6 H3 Q
  • # The authpriv file has restricted access.4 h5 p4 h1 X, [$ {5 Q8 {: ^8 V
  • # authpriv验证相关的所有信息存放在/var/log/secure
    ( [, W5 l9 j4 |  Q. \
  • authpriv.*                                              /var/log/secure  
    " i# `: B, d7 `: `: @
  • # Log all the mail messages in one place.
    ) |, {' P& q4 V4 q6 ~" X
  • # 邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大) R4 T2 T" _3 O$ {; n! \+ T9 h8 s5 ^
  • mail.*                                                  -/var/log/maillog  
    6 N% Q+ X. Q% B7 R$ W
  • # Log cron stuff
    ) t/ u  Q( G5 N% h" B* G
  • # 计划任务有关的信息存放在/var/log/cron
    + Y5 Y/ _$ z/ O- h: `7 r2 r
  • cron.*                                                  /var/log/cron  1 t3 C+ C* p% J( e2 V. }! O
  • # Everybody gets emergency messages6 f+ H" T& P5 b# R$ Z
  • # 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
    $ O/ X  {+ p( W. v2 C. ]7 c
  • *.emerg                                                 *                  *代表所有在线用户  1 U' z3 ~0 v0 e* R) w. e  @
  • # Save news errors of level crit and higher in a special file.
    ( B! X" ]* I$ o! {: ~; J
  • # 记录uucp,news.crit等存放在/var/log/spooler
    : I& T! @1 U3 f# Q$ L
  • uucp,news.crit                                          /var/log/spooler  & h: ~: H& I8 }9 a5 ?* i9 P; ^/ e
  • # Save boot messages also to boot.log     启动的相关信息
    6 a/ A/ L: a; ^) c
  • local7.*                                                /var/log/boot.log9 K5 a/ {5 w5 w
  • #:rawmsg, contains, “sdns_log” @@192.168.56.7:10514
    2 V% t% x  E; x$ x
  • #:rawmsg, contains, “sdns_log” ~' p6 ]. x" S6 Z3 u
  • # ### begin forwarding rule ###  转发规则4 c! N9 g; E' j. K
  • # The statement between the begin … end define a SINGLE forwarding
    8 h" d" B4 f1 u$ |6 E0 Y3 X& L
  • # rule. They belong together, do NOT split them. If you create multiple
    ) Y( g9 z; q3 T9 e: j
  • # forwarding rules, duplicate the whole block!, z3 e* V- G: n6 b0 j0 G
  • # Remote Logging (we use TCP for reliable delivery)
    9 P, s" `" Q& W6 |8 s( N
  • #* ^* j0 f* z2 W0 U6 J8 V
  • # An on-disk queue is created for this action. If the remote host is/ U! z9 T4 T% ?% Y5 x5 p" u/ B0 I
  • # down, messages are spooled to disk and sent when it is up again.* n( Y3 \9 o* @8 }# Z2 @$ ?
  • #$WorkDirectory /var/spppl/rsyslog # where to place spool files
    . f. B- a; ~" I) U$ b- }
  • #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
    ; X# e; @9 }  A6 W# [6 a; w  K% j
  • #$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
    3 h" d9 B: p; B
  • #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
    % k' y* m* Z" e% g: ]; C
  • #$ActionQueueType LinkedList   # run asynchronously
    3 V5 Z" F+ ^4 t3 Z5 Z4 i" B" n
  • #$ActionResumeRetryCount -1    # infinite retries if host is down) B3 Z- z) n* P. f- K/ t- q  E
  • # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    9 @& {# K. _. O+ L6 K" C
  • #*.* @@remote-host:514                    # @@表示通过tcp协议发送    @表示通过udp进行转发
    , P6 S0 G$ f. v! O9 A% j; c
  • #local3.info  @@localhost :514
    ( M1 }/ D4 ?& Q: i" T8 m) x6 e. J
  • #local7.*                                    #            @@192.168.56.7:514
    - h( ?% f& \' L* B) k& T
  • # ### end of the forwarding rule ###9 U# H7 ^% j: ]5 S  A- O2 |
    + C3 d/ c: f$ j& s. D2 w
+ L  n* ?4 [: k: x1 f

格式::  o5 I& K3 E2 q5 [
日志设备(类型).(连接符号)日志级别   日志处理方式(action)) ?8 C% n) r+ N; _: @
日志设备(可以理解为日志类型):7 L2 `) E2 Z5 d. A. R
———————————————————————-
8 f" w" g9 r* i7 h9 o- rauth        –pam产生的日志& \2 b+ Z+ m, l) ^4 M
authpriv    –ssh,ftp等登录信息的验证信息+ K2 B6 m0 h$ h( |6 J6 |6 ~- C
cron        –时间任务相关3 B: t. f" {8 ?
kern        –内核
3 o5 `/ d+ {, B4 l  olpr         –打印3 S' G, e3 N/ ^# W9 @
mail        –邮件
5 u8 S6 p9 n& A4 m3 \4 _/ Wmark(syslog)–rsyslog服务内部的信息,时间标识
+ [2 n$ \3 p; \, r' Q# e: bnews        –新闻组6 }; z. l. I8 e; x# q) ~, _
user        –用户程序产生的相关信息
. W0 s& h( K8 M' y( y* o% ^9 Buucp        –unix to unix copy, unix主机之间相关的通讯- _4 U5 A1 q$ `5 r; r; m9 X
local 1~7   –自定义的日志设备
" k5 g* L/ s: T% X' o  u, W日志级别:& ]0 j& ^, b7 G6 k# O6 F
———————————————————————-1 O0 }' w: C; v) I0 H
debug       –有调式信息的,日志信息最多
7 s. T7 F% D, q( }info        –一般信息的日志,最常用
) h5 S* V! S5 k/ d4 }- W% Unotice      –最具有重要性的普通条件的信息* B( n  l6 [  `0 n2 ?
warning     –警告级别% `7 P- T/ @  _6 j) @
err         –错误级别,阻止某个功能或者模块不能正常工作的信息
& q* o2 F/ D- j3 a9 icrit        –严重级别,阻止整个系统或者整个软件不能正常工作的信息; ]) m4 M# t/ O
alert       –需要立刻修改的信息
$ a/ d' |& C( I$ O- Z) `4 V! {emerg       –内核崩溃等严重信息. `2 Y$ i0 i: ^6 A
none        –什么都不记录% U+ M* u8 d# ^5 V" S
从上到下,级别从低到高,记录的信息越来越少* _. p# U" b4 I0 O# \
详细的可以查看手册: man 3 syslog
! S0 q( `! X0 S' a4 Y, G. C连接符号( S. X: J* G, y2 d+ l4 I# s; y
———————————————————————-8 |/ y* G! T, U5 H  _, v2 d8 V# S
.xxx: 表示大于等于xxx级别的信息
' r7 l. Z3 N- I.=xxx:表示等于xxx级别的信息
' a5 t" [& w7 w* ^" V( A.!xxx:表示在xxx之外的等级的信息1 Y0 C7 ]) ?( k3 J3 F2 x
Actions+ `+ c; D8 Z0 S" c4 D2 ~' M
———————————————————————-1 D2 Y3 b, ^3 @, `/ M6 B4 a  ?
1. 记录到普通文件或设备文件::
8 q- f" K( L( E. n1 t. o* A*.*     /var/log/file.log   # 绝对路径
9 P& `+ Q5 f2 Z+ k6 g*.*     /dev/pts/0
* G, F, |9 t- k: ?测试: logger -p local3.info ‘KadeFor is testing the rsyslog and logger ‘   logger 命令用于产生日志
: x8 {/ W0 ^7 |) X$ a5 q2. 转发到远程::: H1 _9 ~( R, y& Z
*.* @192.168.0.1            # 使用UDP协议转发到192.168.0.1的514(默认)端口0 R+ I  b% y3 [  Q3 ]: s" H
*.* @@192.168.0.1:10514     # 使用TCP协议转发到192.168.0.1的10514(默认)端口
( e" }! Y9 F: e" k) T3. 发送给用户(需要在线才能收到)::6 r+ \. y& e- i. k* u
*.*   root7 r: y/ S9 Z$ r5 B# T5 ?
*.*   root,kadefor,up01     # 使用,号分隔多个用户/ Z. a* [& _* ]
*.*   *     # *号表示所有在线用户
! c% V1 [/ k6 n- w3 Q; u4 l. \4. 忽略,丢弃::
% _$ N8 o+ n6 G* d( @local3.*   ~    # 忽略所有local3类型的所有级别的日志9 g- x5 {7 @0 ]( l* u
5. 执行脚本::& C  M3 X! Q! k$ b3 G" q
local3.*    ^/tmp/a.sh      # ^号后跟可执行脚本或程序的绝对路径% R' z4 H& h# L$ x
# 日志内容可以作为脚本的第一个参数.# \6 C. F0 X6 I/ \
# 可用来触发报警
+ Y: ?1 M% o- s' [* x9 |: _.. note::; y; i, E/ g6 B* _+ B5 \
日志记录的顺序有先后关系!
* J- H% l- B+ _======================================================================
# c5 x3 ]: u' a2 g8 ^$ q一个标准的简单的配置文件$ q( |- r4 }& ~1 |3 F
======================================================================) c7 Z. q( i. n! U
::
2 |7 E* y8 h# m( B2 B4 j*.info;mail.none;authpriv.none;cron.none      /var/log/messages
, j* w' Z. u& mauthpriv.*                                    /var/log/secure( Y: u3 g, Q+ j0 x. [$ Q1 U
mail.*                                        /var/log/maillog- d1 u8 [- G( Z# H& [
cron.*                                        /var/log/cron
: \. M/ ~' h9 T5 I1 u! u*.emerg                                       *% h8 ]/ w, k+ |' i- t0 {$ ]
uucp,news.crit                                /var/log/spooler
( K! n; L, e) J: r* T! Olocal7.*                                      /var/log/boot.log' ?0 W+ n% C' W$ ?; C3 j' y6 O+ [
======================================================================, c3 j8 \* J4 E5 z
实例: 指定日志文件, 或者终端
6 Z4 C  |: x2 l+ V7 K  e======================================================================+ U2 n, |" I, Y5 D
[root@kadefor ule-sa3]# vi /etc/rsyslog.conf9 t0 w( Q2 e; K: v! H
[root@kadefor ule-sa3]# grep local3 !$1 V$ Y; g( p+ t- Z* `. E. n/ m
grep local3 /etc/rsyslog.conf! Q1 `8 ~, q6 T2 s
local3.*                                                /var/log/local3.log$ [' u6 m/ x- O  I/ P  N
[root@kadefor ule-sa3]# rm -rf /var/log/local3.log" [7 f3 w) X; w
[root@kadefor ule-sa3]# /etc/init.d/rsyslog reload" r, ^7 d  |% Y; y3 V
Reloading system logger…                                 [  OK  ]
2 B" m( Y8 W: U; D[root@kadefor ule-sa3]# ls /var/log/local3.log( U  B. j, Z) O/ U5 I0 Y9 @, j! ?8 a
/var/log/local3.log
1 B* ]% X6 B; [( j0 J9 j[root@kadefor ule-sa3]# logger -t ‘LogTest’ -p local3.info ‘KadeFor is testing the rsyslog and logger’0 ^2 C7 [' D; @
[root@kadefor ule-sa3]# cat /var/log/local3.log/ s- @3 K4 c# P1 C  b2 v( _/ c* T8 H+ Z
Jun 10 04:55:52 kadefor LogTest: KadeFor is testing the rsyslog and logger
% ^5 A1 M* m1 K3 E; m2 H[root@kadefor ule-sa3]#
) n) \/ Y1 m/ x: _自己实验日志发送给某个终端
7 l9 Z/ i) e0 ~* R  e$ B3 x======================================================================
* D$ s: d/ ^+ W3 I实例:  过滤特定的日志到文件, 忽略(丢弃)包含某个字符串的日志8 f8 f8 u# ?  ~- W7 c
======================================================================" A# W8 i1 B* r, @5 v) F2 k
# 过滤日志, 由:号开头1 C& ]! R/ ~; H0 r6 T
:msg, contains, “error” /var/log/error.log! a5 m3 x0 Z: S! O/ X- Y
:msg, contains, “error” ~         # 忽略包含error的日志
7 `! w1 j! d4 t:msg, contains, “user nagios”   ~3 Q4 H- C( W; M- s/ A& v, ]& W
:msg, contains, “user kadefor”   ~
+ m2 }7 B; G7 o5 P9 p:msg, contains, “module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write” ~& z6 I' I8 d7 D: X
local3.*    ~3 i' l3 u# g6 }: \! \% e  H3 j* ?
PS.
1 ~: ?; O$ |/ J) Z6 ]9 I&   ~       # 忽略所有的日志
5 Z& G! |8 W$ K; ?# Z: w把包含’oracle’的日志保存在/var/log/oracle.log
; t* G- ]! E# {' k7 f' R======================================================================& u5 |* S1 H/ L: l! z/ o( {
实例:  使用模板来定义日志格式, x9 M: j' _2 i3 j) O
======================================================================$ a  Z% ]7 h! t) l4 N3 M
定义默认的日志格式:

3 d: v  Z% U* j% ~  N5 b+ _% B
  • $template myFormat,”%rawmsg%\n”  
    6 w! t+ r: M2 K' S' ?
  • $ActionFileDefaultTemplate myFormat  
    0 {+ Q; K: M3 R/ t# K, q3 W
  • #如果不要$ActionFileDefaultTemplate myFormat这一行, 就需要像这样来使用模板:
    8 o5 l' `: s$ F9 t& g* J( }/ e% F
  • #在日志文件后添加模板名, 并用;号分隔2 d. r& e1 I& L9 D% O/ F, r8 {9 d
  • $template myFormat,”%rawmsg%\n”  
    # o0 }/ n  q2 Z* S6 V- y
  • # The authpriv file has restricted access.
    : |' @1 X# l, w
  • authpriv.*      /var/log/secure;myFormat  
    0 o% A, u* w- v  O2 K
  • # Log all the mail messages in one place.
    : o3 B3 C; {8 O* m7 W8 E' N
  • mail.*          /var/log/maillog;myFormat  3 J- X6 H! Q- c% ?3 N0 r* V
  • # Log cron stuff
    4 y" d, ?( J( j: P5 ~7 r% d
  • cron.*          /var/log/cron;myFormat  
    * S8 O0 g8 u9 b6 v
  • # Everybody gets emergency messages
    1 k/ Y6 C  y' z4 t5 k+ x( D8 N
  • *.emerg                                       *  
    + B4 y" P9 w- e, a/ j$ @: L/ z
  • # Save news errors of level crit and higher in a special file.  Y$ l: A. ]5 ]2 [
  • uucp,news.crit  /var/log/spooler;myFormat  
    8 M4 L7 M/ L  m2 H8 x
  • # Save boot messages also to boot.log
    0 q8 ?/ v( A9 K6 R
  • local7.*        /var/log/boot.log;myFormat  0 R% O: v- B  w* F0 c5 m( R: R. F

    8 {* r3 K0 z! U% B
0 c6 e* o* f) S6 x8 |. v0 U+ @1 h- ?

======================================================================
) c  o1 B! E! k  |* o/ _实例: remote log 远程发送与接收:
1 k& t* e$ Z' B0 U7 ]======================================================================
. }% e3 _% [% w* T7 \: v7 ]如果要修改为非514的端口, 需要设置selinux
6 b; ^8 f, a1 j5 F& B2 n6 T" x2 l只要在rsyslog.conf中加入
6 Y8 M: g& ~+ x, S0 I/ t* c*.* @192.168.0.10; C6 ?7 O* S; h  k0 ^
*.* @192.168.0.10:10514     # 带端口号
8 D- C- g0 n" X# C+ k+ o9 T" J*.* @@192.168.0.10      # TCP
7 z- O7 E7 B" V但是没有定义保存在远程的哪一个文件啊?
5 i: j" c3 s* N. a- }- N  s: w$ k其实保存在什么文件, 那是远程日志服务器接收到日志之后它自己的事情了.$ e. `" s+ H2 p' c/ K( {
例1:
! T5 q# n5 t; Z7 Z: Z^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7 Q2 b- M4 w) ^* X———————————————————————-4 S2 @& {6 U; z$ n2 D
Client(send):1 D# R: d1 v( K6 W' Q% O$ B
———————————————————————-
, Y" [" ]! G/ ]2 k::
$ ~7 }5 }3 K5 j- Glocal3.*   @@192.0.2.1:10514
7 `' J( S* L; f8 h2 V6 X3 M, X# if you need to forward to other systems as well, just1 u) P" h4 [% S$ j* M! F( A  |
# add additional config lines:2 W0 W' k; a6 B" h+ J1 x& K
# *.*   @@other-server.example.net:10514
% l  V8 y9 D( B) B: B1 F# Log anything (except mail) of level info or higher.! U4 d7 O# m2 _+ o' Q
# Don’t log private authentication messages!, {( `8 ?) O7 y
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
% v/ f0 w% {& q8 x( Z6 I* T# The authpriv file has restricted access.
. `! q" H$ J: _4 c; ?. Fauthpriv.*                                    /var/log/secure, U/ L6 \) H( Y/ i6 f/ {
# Log all the mail messages in one place.
7 A/ y* I: \3 K5 x" t  Ymail.*                                        /var/log/maillog& t; n; `' {- P( b4 h
# Log cron stuff  o! ]+ B$ g0 ?* D) {
cron.*                                        /var/log/cron
+ U0 h# O4 H1 W; O; W0 j# Everybody gets emergency messages  V' F- |0 l, _8 A( {' y
*.emerg                                       *
. ?# ?/ f9 q0 c# O0 ~! Q2 o, Q# Save news errors of level crit and higher in a special file.- Z. J" M  y# Q5 t9 q
uucp,news.crit                                /var/log/spooler
4 p& D* j4 R6 f3 ]( ?" B8 m# Save boot messages also to boot.log
( S1 A, X( M% F$ s( I( I7 t* alocal7.*                                      /var/log/boot.log
$ i2 G: K5 P; ]; p: V. X# m) l———————————————————————-9 n( [6 {* o( Q+ R
Server(receive): <1>) z: E: Z# y) G: d) j
———————————————————————-1 @$ B0 k( j* \( o/ ~
::8 ^0 l. ?+ ^+ b0 u6 |; j
# for TCP use:  }: z& m9 t5 o" e. [# K8 |
$modload imtcp
6 z; \  \  |% i/ Y- ^. Q* i' e4 c$InputTCPServerRun 10514
+ N8 ~5 j6 P: S# for UDP use:" ^! {% ]9 O4 l
$modload imudp
5 C) R9 Z0 k5 r- T6 @$UDPServerRun 514( L$ M' b8 |4 d
# Log anything (except mail) of level info or higher.# v, Q) c; H- q1 P9 x
# Don’t log private authentication messages!  C* ]2 I) x" M5 l7 j
*.info;mail.none;authpriv.none;cron.none      /var/log/messages" k( p" r( y: G3 j/ j" a# D
# The authpriv file has restricted access.
# `6 `3 @. I$ T! Jauthpriv.*                                    /var/log/secure: H3 ?. r; o% ?0 u" P+ v
# Log all the mail messages in one place.+ A2 R" ~# N6 g$ X8 a5 p$ H& i
mail.*                                        /var/log/maillog
) {, K" R0 A: B1 o- Y$ ?- S+ ~# Log cron stuff2 q8 k/ Y& v4 m+ y- o
cron.*                                        /var/log/cron
% `% K. y9 k9 Z- K" ?1 D# Everybody gets emergency messages
- _0 z2 }" M- e) \*.emerg                                       *
" _$ m! m. y5 G5 n8 Q' k# Save news errors of level crit and higher in a special file.7 X" \4 K$ M4 k
uucp,news.crit                                /var/log/spooler7 G2 r  G9 i9 u8 z
# Save boot messages also to boot.log4 O7 r- P1 _( q# [
local7.*                                      /var/log/boot.log
( g# L; D; B. s) Wlocal3.*    /var/log/local3.log     # 测试用0 @& n6 |- Q1 c
例2 (仅做了解, 不做要求)) ^' }6 r0 Z+ K% N4 p" W
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 M  l6 o. _" u* i#配置服务端(接收)
$ u+ M0 l( s3 |9 V3 W# Q9 Y———————————————————————-
2 S& c4 }% h8 Y+ k0 i! T( j3 d6 S: Lvi /etc/rsyslog.conf        #在文件开始加上,同时确保514端口能够被客户端用tcp访问
0 ~5 J" |$ }$ F$ R/ {$ModLoad imtcp.so              # needs to be done just once #使用tcp方式
  ?5 U% }' ?! ^) o$InputTCPMaxSessions 500    # tcp接收连接数为500个  s; [! u. |3 O  u0 i2 t1 h& F
$InputTCPServerRun 514      # tcp接收信息的端口" b" v& j; w' m9 b8 z$ R3 a" m- o
$template logformat,”%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n”     # 定义一个名为logformat模板, 为信息加上日志时间1 Z! F3 J$ A0 F6 z$ }7 f1 g
$template DynFile,”/var/log/tlog%$year%%$month%%$day%.log”     # 定义日志文件的名称,按照年月日
  a3 L. H0 ?3 |& `& [: N:rawmsg, contains, “sdns_log” ?DynFile;logformat    # 把rawmsg(也可以使用msg)日志中包含sdns_log标志的信息写到DynFile定义的日志文件里
$ ?0 X4 e/ ?# T" j5 T:rawmsg, contains, “sdns_log”  ~                     # 这个表示丢弃包含sdns_log标志的信息, 一般都加上它, 以免多个日志文件记录重复的日志4 Y7 B4 L7 Y: c- Q) k
#配置客户端(发送)" E* ]7 l' r6 F0 h6 X/ _, \
———————————————————————-" Y  @$ V* O6 y( L" |5 U
vi /etc/rsyslog.conf  #在文件开始加上
( N8 ]; e' @3 v9 x#把包含sdns_log的信息通过tcp发到192.168.1.2 @@表示tcp @表示udp
4 P5 ?5 d: a  v$ |, W7 L:rawmsg, contains, “sdns_log”       @@192.168.1.2       # 默认514端口; q4 J9 {3 D; v/ J% H* ^
#这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message
+ H9 ?" |4 h. e1 z:rawmsg, contains, “sdns_log”       ~
7 F/ c1 ^0 ?; M9 o" Y5 Y#测试6 l9 {( o" a7 x! W) Y8 b: ~
———————————————————————-( |& y3 @7 Q9 [+ r# _2 T1 F3 u
在客户端上执行
) i6 B5 ]% A- {  @1 S- |7 Jlogger -p user.info “sdns_log 34334″
, p+ A) r6 Z  N1 f8 o7 `/ e在服务端的/var/log/目录里是否有tlog*日志产生
6 g8 _/ o6 g2 d% ?. ^/ a4 ]补充:
8 B. L4 V* }1 g" a———————————————————————-
# W  t) b( R; }3 g* O0 Z如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样操作:
0 W) Z+ w' D: l* g:fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log
& r, _9 _# g9 ~$ N; v- H% |8 L0 ~:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log8 |& T2 w2 l+ D
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
- _6 r3 i8 p; W) g( i; q:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log; _, ?3 J, o2 i7 x
练习:
: a' [  J& Z" _8 Y% m2 H% s======================================================================: B! K) q; |, O. i% z2 W
1. 实现把ssh服务的日志自定义保存到/var/log/newsshd.log (先不做)6 Y( R) k% v! o' z
2. mail日志保存在远程日志服务器/var/log/newmail.log
) ~0 j$ f4 z. h8 ~: F7 j3. 过滤日志, 如果日志包含有”daydayup”, 则执行脚本/tmp/a.sh
- ~0 s8 x6 X9 Y7 A0 N' @脚本内容:! j' m+ ^  Y; c5 `
#!/bin/bash
5 U% E3 ?7 j' F1 s6 Zecho  “KO::** $1″ > /dev/tty2
8 a3 ]; @7 H6 p/ ]9 n: w======================================================================
+ r+ x' y$ E5 a" P/ v1 \logrotate服务
3 a9 ~- b# g7 w$ r======================================================================" N( m- f& G- f6 l2 x
rotate 轮换,日志切换
$ r! L2 O3 F0 B2 C% qlogrotate服务的启动方式
- y- ^, \  |/ u/ slogrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。
5 Y& C$ T" Z: Y) i) Clogrotate 的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天由cron在指定的时间(/etc/crontab)启动。
! C1 W9 y( d3 _5 d2 M因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。& w9 M( W7 u3 i
在执行logrotate时,需要指定其配置文件/etc/logrotate.conf
" y0 _! {# n, h, L3 O" f% t这 个配置文件的注释写得很清楚,没有必要再罗嗦了。只想强调下面这行,它的作用包含存放在/etc/logrotate.d目录下面的配置文件,不可或缺。 如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d下面。它其实也因为下面的这句话,在 logrotate服务启动时被读取。
# \7 ]( }" q4 ?# `1 v" x& U/ s每个存放在/etc/logrotate.d目录里的文件,都有上面格式的配置信息。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。
; E: E4 \8 G- Z3 X: L5 }logrotate启动脚本放在 /etc/cron.daily/logrotate 中,可人工执行命令进行测试:7 J& j2 A' G8 S& l! x
/usr/sbin/logrotate -f /etc/logrotate.conf' v9 u5 K; d3 R9 V( V4 W
dateext表示转储文件会以日期来结束*
4 {, I; S# f- D0 E2 A9 `7 p::
. J: {/ S) a: R5 @% J+ N( b[root@kadefor log]# vim /etc/logrotate.conf
- J' w# ]! L/ c# see “man logrotate” for details
- p% g7 r& B" `2 x5 }( p! n- N# K# rotate log files weekly
5 D0 O8 n, `. u0 u0 xweekly          –每周轮转一次: h, V4 w6 F; Z! t' G6 T/ s
# keep 4 weeks worth of backlogs+ B$ F/ A" Y% P) k) ?& X; {
rotate 4        –保留四个3 t' l6 y' A  P2 d2 A
# create new (empty) log files after rotating old ones. e, C+ [) D* q. F# q0 }- {0 H
create          –rotate后,创建一个新的空文件2 ]: h! E: W: h0 y5 Z" V. r4 H2 p
# uncomment this if you want your log files compressed
7 X6 I& f7 R  H: R/ l; f#compress       –默认是不压缩的
3 {7 v; q% U9 I  I# RPM packages drop log rotation information into this directory
* J! U* Q- S- vinclude /etc/logrotate.d        –这个目录下面配置文件生效! k7 F8 m! n0 v, r' [* C
# no packages own wtmp — we’ll rotate them here
; p3 v4 _" K  h0 q; g# P/var/log/wtmp {             –定义/var/log/wtmp这个日志文件
8 \! T, F9 i* ?8 g! z' Xmonthly                 –每月轮转一次,取代了上面的全局设定的每周轮转一次  k4 R: g' e1 i5 ]4 }+ k* R! H8 S
minsize 1M              –定义日志必须要大于1M大小才会去轮转
3 {+ ^. q* V* h0 z! screate 0664 root utmp   –新的日志文件的权限,属主,属主  F6 T" R- f9 D" e% N5 ]) D
rotate 1                –保留一个,取代了上面的全局设定的保留四个/ o  G& _- k2 m: E3 q% q
}
# A: }6 G* N* U. @: E7 r! H/var/log/btmp {) j4 z1 Q  k$ Z- X- r+ o* K: y. D
missingok       –如果日志丢失, 不报错
  d) E+ a4 p- Hmonthly6 b% L7 C- e. H$ D! W5 @
create 0600 root utmp
& D- W7 A2 u2 i7 m1 orotate 1# _/ Q: [' c! C
}: m. b2 C  `2 R2 T: Q/ q
::# f0 N" Z8 k, Y" e9 }  i& B! a$ u
# sample logrotate configuration file
- V# z4 |6 p% A* E& e9 gcompress7 S' ]1 V8 a9 I# s( z
# 全局设置, 压缩
4 F' q  B% d; A3 q# g- d0 M/var/log/messages {
: v  g" L# K8 R) H6 R5 r9 g: frotate 5     # 保留5份日志# d% `/ H/ Q% {. l7 `* w/ ]8 q$ Q4 R
weekly       # 每周轮换一次
) Z0 Q) ?2 s7 L% M4 M1 a, Upostrotate   # 轮换之后重启syslogd服务
8 `; A: d4 x5 W" D3 w$ i  B/usr/bin/killall -HUP syslogd
; y4 Z, B8 w0 P1 q7 b) I9 T# rhel6中为:/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
; L. D- e7 @; s/ L9 u# 可查看/etc/logrotate.d/下的配置文件
# P0 @$ n' w4 I3 ^& eendscript
- v* ]1 R: A7 _) e' P}* G; Z4 O. X! y2 A% E
“/var/log/httpd/access.log” /var/log/httpd/error.log {   #  指定多个文件, 如果有特殊字符需要用单引号
* P+ X, _* t# [3 ^rotate 5% M, K3 e' V8 {! r, P2 r8 A' I7 q  V8 O% N
mail www@my.org
2 d8 w6 M" |8 ^6 Rsize 100k        # 超过100k后切换日志, 并把老的日志发送邮件给www@my.org
% O, Q) O! F2 L5 @( G! x; B  o8 P. ]sharedscripts    # 共享脚本. 下面的postrotate脚本只运行一次.$ c+ [# }( |, E6 K) d
postrotate
/ @5 U' s( y) P" b; g/usr/bin/killall -HUP httpd* k4 x, {7 `7 @& v7 A) h) T5 N# D) M
endscript# U; W4 {0 t- I% y# y' V" h
}/ j3 Q8 N, s" h# M( R
/var/log/news/* {    # 少用通配符, 因会它会包括已经切换过的日志, 要用的话最好在*号后加上扩展名, 如*.log
3 a0 |) ~& _. o& Imonthly, }7 [, x! Q/ B) L
rotate 2
" t: r2 l; m6 a3 z) ], Y4 r0 b9 ^olddir /var/log/news/old( D* ~' d0 W' D5 {3 m+ Z8 P8 A
missingok0 n7 D' c4 l- W" }4 x  N& u
postrotate4 w+ {7 U( m9 ?) l- G5 r, U; ]
kill -HUP ‘cat /var/run/inn.pid‘
/ _- ]- n- |$ A& wendscript, P2 t9 @# ?5 `# j
nocompress
0 F5 ~3 ?! h0 X( r: K5 m  N( q}# Q" F% q6 S8 D$ d1 d
例:" N4 i2 d: s; O1 g3 m! K( W
修改/etc/logrotate.conf0 \- `; S* ?# w# D" P2 Z
/var/log/wtmp {) t/ y6 F* x& q. Y5 |
monthly
$ V$ e) F2 b5 D0 sminsize 10k
$ K/ U; }# ?, n# r& A3 acreate 0664 a b
$ Z' N2 S$ Q$ X: v' w" Crotate 2
3 |/ c  ^$ a( I- X6 x& c2 `}, [" B, v) W9 j2 y1 c
logrotate -f /etc/logrotate.conf  –强制轮转
/ y3 y5 g1 O. p# A$ tlogrotate -vf /etc/logrotate.conf    –再加一个-v参数查看轮转的过程8 M0 R. k; C, Q; y& E% G9 Z
———————————
. @+ Y& ^' I8 @. {/ C4 O[root@kadefor log]# vim /etc/logrotate.d/syslog
; K. e0 |0 p, v: D% h& u  ^/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
4 |/ `; `3 r- r( g2 c* R# |7 D7 wsharedscripts   –表示切换时脚本只执行一次
; ]6 b% N' x- h: `postrotate      –表示rotate后执行的脚本
" E$ V4 e# Z# `) e  Q/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true8 [% g- R' X  U
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
- L; j% Q' @$ [/ Gendscript       –表示脚本结束
/ \& f7 T. F8 b: m}
: m# r9 G4 N" \  R& o. H  Q0 r& T! d$ n[root@kadefor log]# logger -t ‘aaaa’ ‘bbbbbb’–在日志里加一个内容tag和内容
0 j# d$ w* X8 U5 j6 P# T[root@kadefor log]# tail /var/log/messages
+ Z* y+ y( V- y7 d( I! GJun 12 19:38:55 kadefor dhclient[3166]: bound to 192.168.1.101 — renewal in 3384 seconds.* o0 G2 s; z9 A1 j) C4 I; t; H! \) e
Jun 12 20:34:22 kadefor aaaa: bbbbbb


2 D3 ]. U# M8 m3 d
 楼主| 发表于 2017-9-25 21:13:15 | 显示全部楼层
在 Linux 系统中,日志文件记录了系统中包括内核、服务和其它应用程序等在内的运行信息。" `$ I; @6 H: L, r
在我们解决问题的时候,日志是非常有用的,它可以帮助我们快速的定位遇到的问题。' S) o& _  p) p
$ [2 C% Q; ]* V6 C( E
在 Cent OS 6中,日志是使用rsyslogd守护进程进行管理的,该进程是之前版本的系统中syslogd的升级版,对原有的日志系统进行了功能的扩展,提供了诸如过滤器,日志加密保护,各种配置选项,输入输出模块,支持通过 TCP 或者 UDP 协议进行传输等。
6 j0 r  D+ D" S% |7 z3 G$ D3 @
1 {$ x# T6 a5 A% drsyslog的配置文件为 /etc/rsyslog.conf , 大多数日志文件都位于 /var/log/ 目录中。" R7 @) x9 ?5 P' Q1 Y- G
+ s" w$ H6 x. o3 D2 e
定位日志文件
) E5 t, [2 h  j8 U大多数日志文件都位于 /var/log/ 目录中。在该目录中,你可能注意到很多日志文件末尾包含一串数字(如 maillog-20150301 ),这说明这些日志文件经过了日志转储,这样可以避免日志文件过大。: `4 z4 P4 }% _- i" g
' K$ ]* p! m4 k% {( p
在软件包logrotate中包含了一个定时任务,根据/etc/logrotate.conf文件和/etc/logrotate.d/目录中的的配置定期的转储日志文件。1 w2 s& L& K2 v* l
Rsyslog基本配置$ x$ k1 f8 X, B; S3 C! X  @
Rsyslog 的主要配置文件为 /etc/rsyslog.conf 文件,在配置文件中,我们通过配置 filter 以及 action 对日志进行管理。
: D3 A  v  j/ U5 M' }
% n8 C, F) X, j; U在rsyslog配置文件中,使用如下格式定义规则
# D# B& f! z7 h. g: `; _7 z
& F% z6 h: G# C4 Q$ gfilter        action1 Z1 t; n! Q# {- r
rsyslog发现符合 filter 规则的日志后,会将日志发送到 action 指定的动作进行处理。
. F5 n) {9 u7 V: ]# |& j4 `$ }" o! _3 J9 j! `. T* z3 A
Filter
  z/ ~( a& f: u# _, {# o, R! p4 e4 S; a
在rsyslog中,提供了三种方式的过滤器方法:
' X+ |  [# ^1 ]  A
( u1 V; E  \' U, O% j6 e5 @基于设施/优先级的过滤器 (Facility/Priority-based filters)) q$ T/ h/ C2 g7 d, s

. h, v) M( z0 u+ o, m) ^) c( S基于设施/优先级的过滤器是最常用的方法,语法如下:
; T0 o  M; Y. Z3 C2 Z8 I: w# ]+ u( `2 F4 }' ^
FACILITY.PRIORITY4 m2 m- L: q1 h
FACILITY指定了产生日志消息的子系统,可选值为 auth , authpriv , cron , daemon , kern , lpr , mail , news , syslog , user , ftp , uucp , local0 ~ local7 。
9 b2 J3 V$ \. M& p: q1 K! v4 q1 z; q+ b
PRIORITY指定了日志消息的优先级,可用的优先级包含 debug (7) , info (6) , notice (5) , warning (4) , err (3) , crit (2) , alert (1) , emerg (0) 。- {0 g5 }' ~; Z
) h/ X4 n% ^# Y% u) ^9 Q
前置符号=表明只有该优先级的消息会被捕获,!表明除了该优先级的消息之外的优先级会被捕获。除了前置符号外,可以使用符号*: p6 A( g) f7 c# a4 N
表示所有的设施或者优先级,对优先级部分使用none关键字会捕获所有没有指定优先级的消息。$ T6 K7 |0 v7 o# }6 T5 F- ?
6 P/ y# x- H/ |" t1 }$ t. O& n, v7 y
定义多个设施或者优先级使用,分隔,如果是多个 filter 的话,则使用;进行分隔。
4 b& o9 ^: O" {- K4 |5 j: a2 f; m' Q" e5 J( z. e% H, k- }
使用范例
: u: ?- u+ c' N5 Z6 s* D
8 U: B; v% ^, n0 q. y3 w5 [$ |kern.*                    # 选择所有优先级的内核日志3 M( I7 w2 e! m% W* G
mail.crit                 # 选择所有mail 的优先级高于crit的日志* T: |8 M0 e0 z+ d" P9 f$ Y
cron.!info,!debug         # 选择除了 info 和 debug 优先级的 cron 日志
% T, g# v4 ]: @, V. Z: X基于属性的过滤器6 h+ l% F2 D# T9 p
  R( c/ t( }! K1 @0 {
基于属性的过滤器语法
* @1 V3 c- Y" `6 ]% `
3 ^# ^; f" X. V1 O:PROPERTY, [!]COMPARE_OPERATION, "STRING"
0 q8 T! O9 P) }7 H5 E/ ^: z& X: G, Z:PROPERTY是要比较的日志属性,COMPARE_OPERATION 为要执行的比较操作,这个的!表示取反的意思,"STRING"为比较的值。* \" }: ~. r  m! ~
6 W* n% z* f) @# K0 _, L
可以使用的比较操作:0 v  B# D! t9 ]

/ X4 o  w; w7 Z2 s2 ^2 j比较操作        描述0 j# ^& z8 B0 {
contains        匹配提供的字符串值是否是属性的一部分,如果不区分大小写,使用contains_i: w; ^2 q5 x% s8 O6 f. X. P% d
isequal        比较属性和值是否相等
; r. V6 L6 n+ B+ s$ J9 _startswith        属性是否以指定字符串开始(startswith_i)5 h! {# m! a. p+ m& \
regex        正则表达式(POSIX BRE 基本正则)匹配
1 J0 v4 c6 h9 l+ M; {ereregex        正则表达式(POSIX ERE 扩展正则)匹配5 [, A9 R  o, d% G0 |$ j* d. Q
isempty        判断属性是否为空,不需要 value
( d% u7 [+ g  R& o使用范例:
' f  Z, D: N* a' ^
* N! V4 m9 }, j. q0 X8 a* k3 V% u:msg, contains, "error". X+ P7 K+ p( q: f
:hostname, isequal, "host1"7 ]" L" s3 o1 L- o
:msg, !regex, "fatal .* error"6 M! r! J2 ~) G3 ]
基于表达式的过滤器' @" R; d- _6 U* T7 s" T

8 V! D% {0 H; N( I- G. @基于表达式的过滤器使用了rsyslog自定义的脚本语言RainerScript构建复杂的filter,这里暂时不对这种方法进行讲述。+ I$ \9 o0 _" }+ c
9 g7 @1 J, c& E
Action
* {, v; k( ~7 V) m
- ~; k5 c. \: e, ]! C; @Action定义了当匹配指定的 filter 的时候,执行什么操作。
" E! E1 d, `& E( h
2 [7 H5 s' S( Z# a! h$ N如果要指定多个 ACTION, 使用 &连接多个 ACTION。$ q$ Q$ K: o+ I% A
例如:; D! D( V2 Z" S( W/ K1 Q. p2 s) ]

$ _" [- n# _7 t0 K   kern.=crit user1
' E+ G8 m5 f  e6 f2 T   & ^test-program;temp
  N6 `% U8 v, D' h   & @192.168.0.1
. ^# y  y5 r+ I1 W* {这里的;temp指定了传递日志给 test-program 程序时( ^ 开头表明日志发送给该可执行文件),使用它 temp 模板格式化日志。4 b1 @5 ^. `; Y- m1 P2 B! e
在 ACTION 后面追加;模板名称可以为指定的 action 使用该模板格式化日志。' e2 V  v/ E$ j, v4 c7 w, _5 ]

6 _6 A  k# \% `  V/ y7 m保存日志到日志文件
9 C; j- l3 Q- E1 o  T4 ~8 H' _! [1 v% p
语法:$ Y* b, Q% }( `
8 P0 E+ M1 M2 A( w6 E4 R; \
FILTER PATH; {4 S0 q/ g* _6 i( g
这里的 PATH 指定了日志要保存到的文件。例如 cron.* /var/log/cron.log 指定了所有的定时任务日志都写入到/var/log/cron.log文件。$ A9 g4 _! x  [8 L$ f
+ d2 h7 d! j" e9 P! V
默认情况下,每次生成 syslog 的时候,日志信息会同步到日志文件。可以在文件路径前使用 - 指定忽略同步(如果系统崩溃,会丢失日志,但是这样可以提高日志性能)。
9 Q( I& o' {. Y2 G除了上述方法记录日志(静态),也可以动态的生成日志文件。) r% _4 s4 v/ ?: W+ M6 t8 C
6 @& p6 |( V% ?/ m7 R& _2 _
FILTER     ?DynamicFile
8 U$ c7 }! v/ Y( h这里的DynamicFile是预定义的输出路径模板。
5 m* z, {, d; g( K. m9 ~8 X2 x; {, H- l1 N
通过网络发送syslog3 f/ W9 {& E9 R  U7 W
' d; ]2 l1 I8 d0 ]3 s; n  ^8 _
rsyslog可以使用网络将日志消息发送或者接受日志,使用这个特性,可以实现使用单一的日志服务器统一管理多台服务器日志。
8 t  T% F  ]' V
: E$ k2 h$ c% N  X8 W( @6 p; O@[(zNUMBER)]HOST:[PORT]
3 r+ B8 o3 C& L: x+ |! p6 z$ B+ M这里的@告诉syslog使用 UDP 协议发送日志,要使用 TCP 的话,使用 @@。可选值zNUMBER设置了是否允许使用zlib对日志压缩(压缩级别1-9)。
9 y  u& I" ~- q* o! Z
* [- E! i- p, k4 i& K2 |使用范例
' H& T  b, L5 {2 K7 }; N* w/ Z
& m9 [, x- k% Y! t7 Z*.* @192.168.0.1        # 使用 UDP 发送,默认端口514
& e6 G, @+ G& w3 n, @*.* @@example.com:18    # 使用 TCP 发送到端口18, 默认10514% l' d- f! N2 |9 K1 d: Z+ T9 h! |
*.* @(z9)[2001:db8::1]  # UDP, ipv6,使用zlib级别9压缩7 ]. Y: t, N# k- y) I0 X
丢弃日志, L  K$ i. U! k  C, N
2 w- ^$ R, @( b& }# Y& o
要丢弃日志消息,使用~动作。4 C; h. V- z2 L0 }

$ y+ l1 d/ t' {- V  JFILTER    ~
' `- y5 }% H5 d% s$ J例如:! W( H3 _- D- V1 I  J' \0 d
/ e, g; E+ z8 ]$ ?& Y  `  B) B
cron.* ~2 Q" w/ w$ T+ w8 a
模板
  S0 E% H0 x+ v5 X# M. ~6 Z9 a! X; r9 Y3 |0 f$ ~+ F
任何rsyslog生成的日志都可以根据需要使用模板进行格式化,要创建模板,使用如下指令/ Q; x9 D: u$ a; ^: L' _7 n" K

1 k$ u& j3 k/ L$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]9 i9 D9 t* f) @5 w
这里的$template指令表明了接下来的内容定义了一个模板,TEMPLATE_NAME是模板的名称,接下来双引号之间的内容为模板的内容。
0 X" ^$ \6 n" y* t7 Q2 l8 R( ~6 D7 D* q$ ^& @0 X' m, {0 y
这里还有一个 OPTION , 它指定了模板的功能,支持选项为sql和stdsql,在使用数据库存储的时候会用到。: s( `% t' n) C" X  ?- W
生成动态文件名
- K  d; K% F' H8 s* u
. @: d0 d8 L. C3 `. B' D模板可以用来生成动态文件名,就如之前所述,在使用动态文件名的时候,需要在 ACTION 中的模板名称前增加?表明该文件名是动态生成的。% i3 j/ h) t- P& h# s/ r" {
$ o" G5 H/ I: \, \" S! K9 x
例如:
0 x! ]+ X+ Y" x/ N" L( F& h: g% G) M. ?
$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"7 B* Z: q+ }3 s+ k; K8 x" g& T$ [
*.* ?DynamicFile
" G! `) E; n5 ]0 `8 X" r5 Ktimegenerated属性从日志信息中提取出消息的时间戳,这样可以为每个日志生成唯一文件名称。$ F: @" f' \. g' M* I# ?0 N+ U7 J
属性* F+ ?4 Q, ~. L0 F4 n( E

, D8 @# T" O$ K在模板中使用的属性是在%之间的内容,使用属性可以访问日志消息中的内容。
9 \$ \8 p1 p9 n9 o7 Q3 }. `
9 J7 R9 M7 P' m# Q5 E, x%PROPERTY_NAME[:FROM_CHAR:TO_CHAR:OPTION]%
6 r3 L2 ?1 C% p+ V6 g可用的属性列表见man rsyslog.conf。- F2 l' m& a; t! e2 y; O" B2 ?
7 r( f$ F% H6 g! ?# P. T
全局指令
( W* j/ s! }7 M3 `4 I9 K( i- W9 V7 q7 n7 t
全局指令是rsyslogd守护进程的配置指令。所有的全局指令必须以$开始,每行只能有一个指令,例如:4 f( r/ B! x$ J
9 d' |$ D2 X" O" Y+ J2 v% d
$MainMsgQueueSize 50000' n7 i  M% P' o# w( b+ y1 o) l- v
在新的配置格式中(rsyslog v6),已经不在使用这种方式的指令,但是它们仍然是可用的。$ Z6 i3 g' w7 C' W; ?/ f; i
队列( Q7 B" G$ l/ `/ }5 l
在 rsyslog 中,队列用来传输数据,当 rsyslog 接收到一个消息的时候,首先传递消息预处理器,然后加入到主消息队列,接下来消息会从队列中取出传递给规则处理器。
) }0 Q' t7 F) ], [
' V& V/ J( ?5 k  a% a- Z  ~5 Q8 t+ D; L$ @) C' A! M
& _* E1 d% p$ u2 g0 |# y; U! l3 i
规则处理器是一个解析过滤引擎,它会基于配置文件中定义的规则,执行相应的动作(action),每一个动作都有自己的动作队列,消息通过这个队列发送到对应的动作处理器,然后输出。
' S* j5 q, z* B2 Y: v5 e) l: G
6 B3 B- w2 T  p' R对于同一个消息来说,可以同时传递这个消息给多个动作队列。/ v* D- n# V4 g( X9 d
定义队列& t8 R$ ]* a2 g: ?& C; _

$ v4 u/ P% V- ~6 i0 T在配置文件/etc/rsyslog.conf文件中
  U; q: K* U! t2 i: N3 V
( o0 l5 [+ V& n/ S& y/ z  H$objectQueueType queue_type' K2 G$ p: N0 {
这里的队列类型可选值为 direct , linkedlist , fixedarray (内存队列), 或者 disk 。- ~: `: A$ _) v: B3 u

# e; @* {' ~- l  O: E! V默认情况下,对于主队列,使用的是FixedArray队列(10000个消息长度),动作队列采用的是direct 队列。5 ]& _# J: F3 l  Q  K: ~8 \. {* @

( x+ j% ~# R6 uPHP 使用 syslog 输出日志( z, l8 ^% a: C
在PHP 中,调用系统日志系统的函数有三个
! t6 X- ]) Y: i* y/ ?& ?! a# @' _. n4 g# N1 m3 ?! b3 m
bool openlog ( string $ident , int $option , int $facility ): r0 M( C' g- V
bool syslog ( int $priority , string $message )# ?  l  M4 D* s9 b) Q
bool closelog ( void )
5 z0 `9 G( f, V# x' S1 `, J$ k2 ?函数openlog用于打开到系统日志系统的连接,第一个参数$ident是一个字符串,syslog 会将该字符串自动加到使用syslog函数输出的所有日志消息的前面。第二个参数是日志选项,第三个参数是记录日志的设施。1 Z7 O, z! o5 s6 \! l
8 w. z3 O: H# [3 O# F" q7 ]
函数openlog()和closelog()是可选的。
$ @2 ~# Y- ?9 i. E, a例如,我们在/etc/rsyslog.conf配置文件中增加如下配置0 O  S- R! y5 b, @
- @; j7 a/ @: D
local5.*     /tmp/php_test.log! I; k5 w" o' C1 d% d
增加后需要重启 rsyslog 进程(sudo /etc/init.d/rsyslog restart)
+ w, B: i( A! G2 A5 f, ^( B# L0 R0 Z! c3 ^" ~1 Q# l1 ^" Y
在 PHP 脚本中,执行如下操作
0 q5 I% `- P' V5 c( V/ J' u* @! E4 n' h# n7 u
<?php
- Z6 q4 X, X3 z/ s0 t3 I5 p5 ?openlog("LogHeader", LOG_PID, LOG_LOCAL5);) u# R; Z8 A; T5 c
syslog(LOG_DEBUG, "Hello, Logger");5 a0 i) v1 w! V3 ]
执行上述脚本,我们可以在/tmp目录中看到出现名为php_test.log的文件0 ~. y  Z* r/ x/ e6 }; x
' S! h! W2 Q( O$ W
Mar 10 14:47:04 vm-hp LogHeader[8261]: Hello, Logger
& R& @8 A7 [+ b第一部分Mar 10 14:47:04为日志时间,第二部分vm-hp为主机的 HOSTNAME , 我们在 调用openlog函数的时候,指定了 indent为LogHeader, 同时在日志中加入进程的 PID(LOG_PID)。$ E2 N. a* E6 `% i4 u+ g9 V

+ f' A8 @+ j5 f; Y! P上述日志消息,如果要使用模板的话,是下面这样的
7 e; m7 o* ]9 M# z" ~1 Y# A* T
$template LOG_TMP,"%timegenerated% %HOSTNAME% %msg%"
2 d& d+ w+ g# z0 c5 q# U4 {local5.*     /tmp/php_test.log;LOG_TMP; }4 a  Y3 S3 k4 S" x) J" L  O( Z
我们将所有支持的模板属性变量输出如下/ m* i9 m1 v+ ?3 `

& r+ k3 V7 \# [" {! a) Xmsg:  Hello, Logger,. `" o3 p- T6 M# p* J8 K
rawmsg: <175>Mar 10 15:52:49 LogHeader[13845]: Hello, Logger, 9 }, n( \- t" |
HOSTNAME: vm-28-234-pro01-hp, ( X! ], ~$ ~: X
FROMHOST: vm-28-234-pro01-hp, & f5 k7 F2 S2 }) b% C* d
syslogtag: LogHeader[13845]:,
7 E) }7 a4 d2 H) z: D( y2 ^! Bprogramname: LogHeader,
5 m% D# @% Z  |* G5 u* _, zPRI: 175,
& w1 a' L: ^$ w0 M$ f+ C8 ]1 |7 kPRI-text: local5.debug,
5 a! b/ J, a' J8 h: `; BIUT: 1, 2 P0 S8 ]& C; m! X
syslogfacility: 21,
* d  N; t- d, Z: N- zsyslogfacility-text: local5, ' x5 L7 W% ~% b& H  e* n6 m. b. U
syslogseverity: 7, 5 I! y9 C- T& f! D
syslogseverity-text: debug,
2 c$ [6 U8 y+ r. ]& h  Y8 {* {timereported: Mar 10 15:52:49, / d0 F7 B4 R5 x5 k2 b. a: O
TIMESTAMP: Mar 10 15:52:49,
: M- g0 ^( h! H6 P8 rtimegenerated: Mar 10 15:52:49,9 Y" ^5 f. q( G/ u4 Q
PROTOCOL-VERSION: 0, % j! Q1 M9 j+ b4 ?/ `! ?5 L
STRUCTURED-DATA: -,
- U5 w" t- g  E0 a9 HAPP-NAME: LogHeader, 0 W, W6 j$ T, ?1 s- t" \
PROCID: 13845, " Y0 y3 V! X# b) y5 ]5 s
MSGID: -
 楼主| 发表于 2023-3-21 14:41:20 | 显示全部楼层
并替换
6 U! F" d; z2 c
3 r8 Y3 p2 c2 y. V/ nFILEPATH: 需要上传的日志文件的绝对路径,必须包含日志文件名。 9 K( s1 @! t$ n( T1 g" z- q) c
示例:/var/log/nginx/access.log
8 p: A% t& J; m+ O. ?APPNAME: 用于标识上传的唯一应用来源,可用来定义日志分组,这将帮助您有效划分日志,缩小搜索范围。APPNAME设置正确与否直接影响到后台对日志字段的提取。如果您是VIP用户,日志易为您定制了日志解析规则,请填写日志易提供的针对该日志的APPNAME,以使定制的日志解析规则生效。 * `! `/ V/ E! m" `6 t
示例: nginx_access
  p" K# X% k) y! UTAG: 标签,标识日志的扩展信息,可定义多个标识,这里替换为您自行定义的标签,可用来定义日志分组,这将帮助您有效划分日志,缩小搜索范围。
9 T$ g- |0 q. w, @9 g6 L示例: rizhiyi_search8 ?  i+ v+ B: ~. k
注意:
, a; s6 |: m# Q" W$ y- \& N0 _, u% c; B* P4 L; y
在 /etc/rsyslog.d/ 下的rsyslog配置文件中:2 E9 v1 ~$ @! l( g  _9 z
$InputFileTag定义的APPNAME必须唯一,同一台主机上不同的应用应当使用不同的APPNAME,否则会导致新定义的TOKEN和TAG不生效;
3 d; A0 e/ x- ]  T$template定义的模板名必须唯一,否则会导致新定义的TOKEN和TAG不生效;
1 V3 m+ ~6 X! ^$ ~$InputFileStateFile定义的StateFile必须唯一,它被rsyslog用于记录文件上传进度,否则会导致混乱;3 a: B+ ^3 {; a2 X, z. x
注意:@@log.rizhiyi.com:5140 该值为接收日志的服务器域名或者主机名。默认是log.rizhiyi.com:5140
- C' Z7 }. W9 H/ z% F3 a# E+ O3 重启rsyslog( p" `; Z! x% O) e$ I+ n+ K
$ sudo service rsyslog restart- z5 y" @# A! L& k, \& f
4 验证
4 V( `3 S1 s6 E9 g- x) F例如,配置文件中的tag字段已修改为"rizhiyi_search",可使用"tag:rizhiyi_search"搜索过去一小时的事件,检查日志易是否成功接收并正确识别日志,建立索引可能需要几十秒钟时间,需要等待几十秒钟。
5 o  L  P8 }: R$ r. k6 O
8 _5 U! i! H! g% Q#参考:$ M: I9 r  Q6 r

- ^; M  q5 u8 G8 A1 ghttp://www.voidcn.com/blog/anghlq/article/p-4958086.html8 d2 f9 w% f) l5 X, _
& C( u) P- D4 ?4 ?" d
http://www.wnqzw.com/article/10798.html1 [6 J- n& v( s9 I& b  d
! ]* z- O" x' n) v2 M" N/ g
附:: f$ M9 R( h' r1 I- V
% J+ {' h5 x; ~( r. D5 E9 V8 G
日志輸出模板
. W$ h9 j4 z- M% }: U通過模板可以更具需要來控制日志輸出的樣式。格式如下:; z% \& I" M) q% M, g
$template <TEMPLATE_NAME>,"text %<PROPERTY>% more text", [<options>]4 Q* ?: R* Q* d6 q+ l3 }
$template 爲模板指令。<TEMPLATE_NAME> 爲模板名。"" 之間的文本爲模板格式。 被 % 包含的文本對應相關的屬性。<options> 指定修改 模板功能的一些選項,例如 sql 或者 stdsql 會格式化文本爲 SQL 查詢。* n/ [" y' P  X6 d' x; u  ]
動態文件輸出4 w! [  d+ g6 [! L) d! H- P1 }
通過日志和/或系統屬性決定輸出文件名。
" w# ^" r) D1 ]! j7 c$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
: @" M+ K: Y4 y% K. v8 g2 b*.* ?DynamicFile% ]8 h, o3 ]) R/ b, @7 b  s
使用 timegenerated 生成文件名,使用該模板則在前面加上 ?。- N: @0 y. n3 [$ H
其他例子如下:
8 k& T. j& g, z$ m- s$template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"$ J0 {/ ]( b, ]& I* L
根據屬性控制日志輸出格式. k4 U* b0 B9 o) B3 u+ S4 i
使用下面的格式可以對模板之中的屬性做各種修改操作從而定制日志的格式:  I  y( j, N9 R5 v4 _
%<propname>[:<fromChar>:<toChar>:<options>]%
( @5 ^3 U9 ?8 T2 ?/ }- k<propname> 屬性名,可用的屬性名參考上文。
/ a0 k) ~: [6 W3 @6 j<fromChar> 和 <toChar> 表示對屬性值字符串的操作範圍。 設置 <fromChar> 爲 R,<toChar> 爲正則表達式即可以通過正則 表達式定義範圍。) j0 m/ @8 I, i4 s" e: {
<options> 則表示屬性選項。完整的列表可以參考 這裏的 Property Options 節。
1 B9 L. F7 U. z4 w5 n- O一些示例如下:
; o* ?8 I9 Y; S  m4 s- F%msg% # 日志的完整消息文本5 V$ ^$ {4 K$ c: h+ H! z8 ?- ^
%msg:1:2% # 日志消息文本的最開始兩個字符  p5 L4 \% H' y( q! Z1 H
%msg:::drop-last-lf% # 日志的完整消息文本,移出最後的換行符
- l* h+ l; o: q8 d, ^7 G% ?1 h%timegenerated:1:10:date-rfc3339% # 時間戳的頭10個字符並按 RFC3999 標准格式化
1 b: W7 L5 s; [- v9 l5 q下面是一些模板例子。
0 }, ^/ w% Z& ?6 S輸出日志的級別,類別,收到日志時的時間錯,主機名,消息標簽,消息正文, 加上換行符:$ [, w  H% \, ~/ T! Y0 m2 r
$template verbose,"%syslogseverity%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%\n"
1 R1 K+ q2 R( @1 A' h輸出日志來源,時間以及日志標簽,正文,同時還有蜂鳴聲(\7):( O5 w9 P& C( A2 r" k1 l
$template wallmsg,"\r\n\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r\n %syslogtag% %msg%\n\r"
- r* {8 e, C1 C8 t6 B5 g格式化日志以便于直接進行 SQL 操作:
  x: ~  ?/ _# A, V$template dbFormat,"insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%',%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",sql% t6 D' |6 W- k( J9 g9 _+ ]8 j9 W4 @
以 json 格式輸出,方便程序解析:
" s+ j+ M5 _# H$ }$template jsonFormat,"{\"message\":\"%msg:::json%\",\"fromhost\":\"%HOSTNAME:::json%\",\"facility\":\"%syslogfacility-text%\",\"priority\":\"%syslogpriority-text%\",\"timereported\":\"%timereported:::date-rfc3339%\",\"timegenerated\":\"%timegenerated:::date-rfc3339%\"}\n"- P7 J6 m! ]: h* E4 H5 @
注意,message 的內容會在最前面多一個空格,其解釋請參考這裏。
$ `) u, K- B$ x, s, [$ e4 Trsyslog 也提供了一些預定義的模板(以 RSYSLOG_ 爲前綴),參考 這裏 的 Reserved Template Names 節,其定義如下:* c$ y# C$ r8 R
RSYSLOG_FileFormat* ^" z! E' i! `& |/ e5 j
"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
# i* \/ }6 l: ~/ ORSYSLOG_TraditionalFileFormat
8 C$ K' [9 E0 F: N"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
: V1 Y8 S9 |2 N* T; PRSYSLOG_ForwardFormat
/ x7 K5 X) _8 a) w( L2 I"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"/ N3 `+ Z+ ]4 R
RSYSLOG_TraditionalForwardFormat
4 e2 L) [2 O% W"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
6 y! z3 r2 L$ K& U0 @8 c7 `- d使用這些模板,則在動作後附加 “;template_name” 即可,例如:
$ `0 _9 D  Z4 [: B, P:programname,startswith,"cron" -/var/log/cron;RSYSLOG_TraditionalFileFormat
 楼主| 发表于 2023-3-21 15:19:45 | 显示全部楼层
手工配置
) [% o' a, H# m5 D, L. V如果您无法通过脚本生成配置文件,这份指导将帮助您通过简单的复制、粘贴手动完成配置。
& l; |/ K5 Z8 `2 f  n) o
5 P8 [) Q7 i6 ]' P假定您已拥有root或sudo权限,是在通用的Linux平台使用5.8.0或更高版本的rsyslog,rsyslog能接收本地系统日志,并通过5140端口与外界连接。- Y- I2 }) p0 E8 f5 y  E

3 z8 `* a( Q+ p1 c9 u0 ^0 U1 配置系统环境
  ^) i4 p7 Z& C* \( {粘贴以下脚本并运行,并且保证 /var/spool/rsyslog 目录已存在,如果是Ubuntu系统,还需要对目录进行权限设置。
1 y! ^, r' R0 y: L1 U0 z" x7 F8 ^# Y
sudo mkdir -v /var/spool/rsyslog 4 }9 I4 F1 j8 B3 I$ B
if [ "$(grep Ubuntu /etc/issue)" != "" ]; then 7 l( g6 n3 R3 }  m0 r
sudo chown -R syslog:adm /var/spool/rsyslog * O6 R1 V8 E# G0 S7 f6 D+ U
fi4 i- \- |7 g! i7 k
2 更新rsyslog配置文件。
4 {7 K4 x) ~4 @: U4 a& k4 |' t打开rsyslog配置文件,它通常在 /etc/ 目录下
) ^' @3 ~9 x4 h8 V( _6 c& w
! ~8 R! \( @  f# |9 l. r$ A6 L7 V7 vsudo vim /etc/rsyslog.d/rizhiyi.conf. O" H! q5 M, j' B  f0 J$ e
将下列内容粘贴在这个配置文件中% C" b8 Z* L( h: L" H! o7 b' e1 d
& r. Y) q3 x  B# p
复制代码
% C; y6 I: I5 V) D& \#real tran log4 k# w% ^9 l3 J
$ModLoad imfile               #装载imfile模块2 c. Z% `, `, i
$InputFilePollInterval 3          #检查日志文件间隔(秒)8 p- E( t! {1 _( ~& E7 B' j
$WorkDirectory /var/spool/rsyslog       #定义工作目录。例如队列文件存储存储文件夹。% A1 {8 {1 `/ v+ D, ~
0 g. B+ T, `9 o: x7 t
$InputFileName FILEPATH           #读取日志文件1 T4 j0 M' C  v' _! Z* L
$InputFileTag APPNAME            #日志写入日志附加标签字符串 不要添加特殊符号% n  `& `& }+ |1 \  `% A  Y
$InputFileStateFile stat_APPNAME     #定义记录偏移量数据文件名 不要添加特殊符号( s! G% i) D+ B' ?* Y; K
$InputFileSeverity info          #日志等级7 o0 x3 k; \" Z$ P& e8 J  V" W/ A9 t
$InputFilePersistStateInterval 20000    #回写偏移量数据到文件间隔时间(秒)
' w2 x4 z/ P! X8 E$RepeatedMsgReduction off         #关闭重复消息控制0 U) @9 [0 K4 ]8 X' w4 P0 H* e
$InputRunFileMonitor            #This activates the current monitor. It has no parameters. If you forget this directive, no file monitoring will take place.( X$ w: b$ C6 d4 D  m
#https://www.rizhiyi.com/docs/fastuse/tag/  设置标签(rsyslog)
, X5 T) A  ]1 t7 I  {7 G& u+ K$ q$template RizhiyiFormat_APPNAME,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [06f69fae723038bbc5d75d29564051ea@32473     tag=\"TAG\"] %msg%\n"
0 g1 y$ i" i& K5 |& f                                  #<85>          0    2014-09-14T16:52:59.814155+08:00   macbook    my_app       -      -   [91595477-c8e4-42b8-b1f9-696465b422ff@32473 tag="file_upload" tag="my_tag"]% i' E  N0 w, O7 P6 p3 A/ s
复制代码
# e: q6 O5 t- S' Iif $programname == 'APPNAME' then @@log.rizhiyi.com:5140;RizhiyiFormat_APPNAME
: b6 G' D, T3 bif $programname == 'APPNAME' then ~
5 ~) D, y# c- Q/ V0 ]0 u& e& k
& q  @3 p! x; |& L0 E---------------------------------------------------------------对应的单台测试机的配置如下---------------------------------------------------------------------------------------
, {6 d5 e/ Y( @9 a* l1 A2 ~# [( P' s5 v* R4 b$ m( d: }! `1 ?
" {0 |% m, i9 v4 G
并替换* z4 A5 w8 [6 ]* T7 D9 Z8 D! ^/ i# I
3 w( @* T4 M$ B4 W, n
FILEPATH: 需要上传的日志文件的绝对路径,必须包含日志文件名。
. g* G/ B4 a. ]) _% `3 l3 V; F" Z: d示例:/var/log/nginx/access.log2 Y  n& B: ^# e# Y" a
APPNAME: 用于标识上传的唯一应用来源,可用来定义日志分组,这将帮助您有效划分日志,缩小搜索范围。APPNAME设置正确与否直接影响到后台对日志字段的提取。如果您是VIP用户,日志易为您定制了日志解析规则,请填写日志易提供的针对该日志的APPNAME,以使定制的日志解析规则生效。 $ T# ~* `6 ^8 ]# A# ?- a$ |# h
示例: nginx_access
3 }* B# \% L9 d; [1 H  ~TAG: 标签,标识日志的扩展信息,可定义多个标识,这里替换为您自行定义的标签,可用来定义日志分组,这将帮助您有效划分日志,缩小搜索范围。 0 \+ d& X; v7 Y# A" H
示例: rizhiyi_search
' w5 o6 D! s* \# l注意:
$ a1 b6 R# b( j; `. U4 t& C8 A) j, s* N4 t; ~3 X
在 /etc/rsyslog.d/ 下的rsyslog配置文件中:- {6 p  c, b) x" J& F
$InputFileTag定义的APPNAME必须唯一,同一台主机上不同的应用应当使用不同的APPNAME,否则会导致新定义的TOKEN和TAG不生效;
6 r0 J- H" E* ]1 q5 Z$template定义的模板名必须唯一,否则会导致新定义的TOKEN和TAG不生效;* e- n9 l7 @! F$ j7 Y1 v% H
$InputFileStateFile定义的StateFile必须唯一,它被rsyslog用于记录文件上传进度,否则会导致混乱;# `( U, E8 G, m$ h* p) }# x
注意:@@log.rizhiyi.com:5140 该值为接收日志的服务器域名或者主机名。默认是log.rizhiyi.com:5140
( w* d6 I  P+ P) _, X* l+ h3 重启rsyslog
. B& p5 c0 x! Z; r; y% _7 A$ sudo service rsyslog restart
' o) i8 A! i6 s$ W4 验证7 w0 z. t2 F7 N" ~4 }
例如,配置文件中的tag字段已修改为"rizhiyi_search",可使用"tag:rizhiyi_search"搜索过去一小时的事件,检查日志易是否成功接收并正确识别日志,建立索引可能需要几十秒钟时间,需要等待几十秒钟。# d9 f4 r5 b  D. i# `
0 t& [% y( x4 i& s7 s( g
#参考:/ M6 k+ @7 {* g( A$ Q

, F* w* r: y1 ^) s, y4 r3 phttp://www.voidcn.com/blog/anghlq/article/p-4958086.html9 Z* Z- y- n  Y1 c  I5 z# B8 q
1 Z: R( g# e0 S  I+ R: s8 e- f
http://www.wnqzw.com/article/10798.html
4 Z- z# K9 m" O2 N& U: m% ~4 c9 O/ \9 T9 h% ]) G5 Q% W+ Q
附:( M: M( t5 ?' d! y8 i' ?
1 U3 Q' m% ~6 T$ L( ]: k$ U3 T! i
日志輸出模板
  k& M* h5 [. ?0 i通過模板可以更具需要來控制日志輸出的樣式。格式如下:; I+ }7 ^3 x  Z3 Y& Q, u) S
$template <TEMPLATE_NAME>,"text %<PROPERTY>% more text", [<options>]
5 h' u7 g- U5 Z+ q$ q+ p6 _- M$template 爲模板指令。<TEMPLATE_NAME> 爲模板名。"" 之間的文本爲模板格式。 被 % 包含的文本對應相關的屬性。<options> 指定修改 模板功能的一些選項,例如 sql 或者 stdsql 會格式化文本爲 SQL 查詢。/ A# K+ {) r% H7 `+ H
動態文件輸出3 v) y5 W* E% u' _; J
通過日志和/或系統屬性決定輸出文件名。
% [+ l  H, J4 O5 z$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
# S1 t* J9 T7 {/ `3 B  N*.* ?DynamicFile+ X+ d- t9 Z0 ^1 O5 r  h5 E; f: d
使用 timegenerated 生成文件名,使用該模板則在前面加上 ?。
% Y# R# J7 I; x$ V2 J- X2 Q" }其他例子如下:
4 T, h& L( J$ H& i9 E$template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"; Z8 X9 n7 R" w/ `3 m
根據屬性控制日志輸出格式6 E3 v$ B& _. E1 i6 @% Z
使用下面的格式可以對模板之中的屬性做各種修改操作從而定制日志的格式:# f9 {9 {" M: `* p# u0 M
%<propname>[:<fromChar>:<toChar>:<options>]%* _/ ]4 [( s" D; x- a7 t
<propname> 屬性名,可用的屬性名參考上文。$ I! r1 V' F4 m/ ?
<fromChar> 和 <toChar> 表示對屬性值字符串的操作範圍。 設置 <fromChar> 爲 R,<toChar> 爲正則表達式即可以通過正則 表達式定義範圍。% K+ Y+ F" ]8 i2 M" }2 W
<options> 則表示屬性選項。完整的列表可以參考 這裏的 Property Options 節。. t4 P. e5 t$ T7 I! d0 |
一些示例如下:
/ ]0 E- n1 P3 _6 Q9 H3 i%msg% # 日志的完整消息文本/ S: v0 N9 h* h+ s6 e
%msg:1:2% # 日志消息文本的最開始兩個字符; r) K) I: e6 X& Z. T) U5 s
%msg:::drop-last-lf% # 日志的完整消息文本,移出最後的換行符3 W# |  ^5 z/ F- T* ?
%timegenerated:1:10:date-rfc3339% # 時間戳的頭10個字符並按 RFC3999 標准格式化3 Y# U% x6 _1 i7 C/ R
下面是一些模板例子。! Q- T- X; u, {3 m. t' J+ R
輸出日志的級別,類別,收到日志時的時間錯,主機名,消息標簽,消息正文, 加上換行符:4 F/ i8 G: J7 ^# M* b) p
$template verbose,"%syslogseverity%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%\n"  ^- A; [' }! N) q3 ~
輸出日志來源,時間以及日志標簽,正文,同時還有蜂鳴聲(\7):
8 R9 M7 K- J% o% M, f$template wallmsg,"\r\n\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r\n %syslogtag% %msg%\n\r", @& {+ D+ D& C* W
格式化日志以便于直接進行 SQL 操作:) U* y6 f# r. f) O) Y; B
$template dbFormat,"insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%',%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",sql
8 Q* r. m1 F; i) [0 |# a以 json 格式輸出,方便程序解析:: S7 m& Q# k, Y# s3 S3 J" X9 I
$template jsonFormat,"{\"message\":\"%msg:::json%\",\"fromhost\":\"%HOSTNAME:::json%\",\"facility\":\"%syslogfacility-text%\",\"priority\":\"%syslogpriority-text%\",\"timereported\":\"%timereported:::date-rfc3339%\",\"timegenerated\":\"%timegenerated:::date-rfc3339%\"}\n"; C: z- M/ b4 p" [0 T
注意,message 的內容會在最前面多一個空格,其解釋請參考這裏。" d- q0 K. D. L' p
rsyslog 也提供了一些預定義的模板(以 RSYSLOG_ 爲前綴),參考 這裏 的 Reserved Template Names 節,其定義如下:5 a& B* k4 B( {4 N& m% T* L
RSYSLOG_FileFormat
4 \$ O$ {* D, Y  b"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
7 E, S& v4 w- a' pRSYSLOG_TraditionalFileFormat  `, x4 i" c+ h/ U
"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"+ }+ u& P4 Q- q& j! F+ F: k
RSYSLOG_ForwardFormat
' F* W% M' ~2 l9 e" @3 J"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
; l: H" Z. p4 pRSYSLOG_TraditionalForwardFormat) P" k  U, Y- s0 E- ?
"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
) i0 q* Q5 o. \1 I1 t  V使用這些模板,則在動作後附加 “;template_name” 即可,例如:4 O+ E1 K* r: C
:programname,startswith,"cron" -/var/log/cron;RSYSLOG_TraditionalFileFormat
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 01:12 , Processed in 0.055504 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表