SUSE syslog-ng 设置

http://www.suse.url.tw/sles10/lesson9.htm


first.GIF   作者:�柏菁E-mail:[email protected]

第九章 系�y�o��n


索引:

9.1 �O定 syslogd

9.1.1 所需套件及套件�热�

9.1.2 �O定 syslog.conf

9.1.3 架�O log server
9.2 �O定 syslog-ng

9.2.1 syslog-ng �介

9.2.2 全域�x� ( Options )

9.2.3 �息�碓� ( Sources )

9.2.4 �^�V器 ( Filters )

9.2.5 �息目的 (Destinations)

9.2.6 日�I路�� (Log paths)

9.2.7 syslog-ng.cong �O定�n�f明
9.3 �o��n�替 (logrotate)

9.3.1 �o��n�替的概念

9.3.2 �O定 logrotate.conf

9.3.3 syslog �c logrotate 的���例
9.4 登入的�O控 --- /var/log/lastlog/var/run/utmp/var/log/wtmp


 系�y的�o��n,主要是��d系�y的相�P重要�息,藉由分析�o��n的�热荩�管理者可以了解目前系�y到底�l生�^什�N事,甚至可以依���o��n的�热�斫�Q一些�e�`���}的�l生,所以一��好的系�y管理者���要有�常�z��o��n的��T。而系�y�o��n到底放在哪呢 ? 又每���o��n是如何定�x的呢 ? �@就是今天要�W�的重�c了。

 �o��n既然那�N重要,那��於�o�(��入)系�y或�W路服�召Y�至�o��n的 daemon 就要有所了解。在 sles10 �e�A�O是使用 syslog-ng �@�� daemon �磉M行�o�的工作,不�^也有很多的 distribution 是使用 syslogd,��然您要在 sles10 中使用 syslogd 也是可以的。

 以下第一���先��� syslogd 做�f明,再�淼诙��才是�v解 syslog-ng,最後�t是�到有�P�o��n�替的概念及登入的�O控。

9.1 �O定 syslogd

9.1.1 所需套件及套件�热�

 如您要使用 syslogd �碜�榧o��息工具的�,那�先�_定 syslogd �@��套件有安�b。再�砩晕�� syslogd 的套件�热葑���J�R:

suse:~ #rpm -ql syslogd
/etc/syslog.conf
syslogd 的主要�O定�n。��您修改�^後需� syslogd 重新�d入。
/sbin/syslogd  
�⑾到y或�W路相�P服�召Y���入�o��n的主程式 (daemon)。

 syslogd 主要�⒖嫉囊���n案就是 /etc/syslog.conf�r在�@���n案�e,可以�O定 "哪一�N服�疹��e出�F在哪一�N�息等�的�r候,要�袢≡�拥�幼�",至於��的�O定格式��⒖枷乱恍」�的�f明。

9.1.2 �O定 syslog.conf

 在 syslog.conf 中的每一�P�O定�子靡恍校�至於�O定格式如下:

facility.level     action

 先����@����谖蛔��解�f:

�� 位 �f 明
facility 代表所要�o��服�盏挠�息��e�楹危�也就是�o�的�息�碓词�凫赌姆矫娴挠�息。常�的有:
 �Bkern:有�P核心所�a生的�息。
�Bauth:有�P安全事件方面的�息。
�Bauthpriv:有�P存取控制方面的�息。
�Bcron:有�Pcron排程服�辗矫娴挠�息。
�Bmail:有�P�]件服�辗矫娴挠�息。
�Blpr:有�P列印服�辗矫娴挠�息。
�Bdaemon:有些服�障到y未分配其��俚�facility�r,即可�w���daemon。
�Bsyslog:由syslogd所�a生的�炔坑�息。
�Bnews:有�Pnews服�辗矫娴挠�息。

另外 facility 如�椤�*」,�t表示所有的 facility。
level 代表的是�息出�F的��先等� (priority),�淖罹o急到最�p微的等�依序�椋�
emerg → alert → crit → err → warning → notice → info → debug

level 如�椤�*」,�t表示所有的 level �rlevel 如果�椤�none」,�t表示要�⒋� facility 排除在外。
action 表示依照前面�O定所�a生的�息,要�袢≡�拥募o��幼鳌�
action 一般最常�的是一��包含完整路�降�n案,此外也可以是另一台主�C名�Q (@hostname)、使用者名�Q (多使用者�r可以用「,」做�^隔 ) 、�K端�C或 FIFO file (名�Q前面要加上「|」)。
action 如�椤�*」,�t表示 all user。


 ��於每一�� facility,您需要分配一�� level �o它,且在 facility �c level 之�g需用 "." 隔�_ �r如果有�山M facility (不同的 level) 是使用相同的 action,那�N�@�山M facility 之�g需用 ";" 隔�_ �r 那�f一有��� facility 是使用同一�� level,�K�裼孟嗤�的 action,�t�@��� facility �g需先用 "," 隔�_,然後再�c level �g以 "." 做�^隔。�⒖家韵碌脑O定格式就知道����在�f些什�N:

facility.level             action
facility1.level1;facility2.level2    action
facility1,facility2.level        action

 接著就�砜纯� syslog.conf 的�热荩�

suse:~ # vi /etc/syslog.conf
kern.warning;*.err;authpriv.none/dev/tty10
#有�P核心的�息,其�息等�在 warning 以上 (含 warning),以及所有的�息其 level
#在 err 以上 (含 err) �r,���⑦@些�息�@示在第十���K端�C,但存取控制方面的�息除外。
#您可以按下 Ctrl-Alt-F10 去看看就知了。

*.emerg                *
#所有�息,只要其 level 是 emerg 的�,�R上通知�上的每一��人。

mail.*                -/var/log/mail
# 有�P�]件服�辗矫娴乃�有�息,�o�在 /var/log/mail �n案�取V领对诩o��n前面加上
# �� "-" 符�,其主要作用是�榱思涌�绦行�率 (非同步��入)。


mail.info               -/var/log/mail.info
mail.warning             -/var/log/mail.warn
mail.err                /var/log/mail.err
# �P於 mail 的�息,其 level 在 info 以上 (含 info) �r�o�於 /var/log/mail.info �� ;
# 在 warning以上 (含 warning) �r�o�於 /var/log/mail.warn �� ;
# 在 err 以上 (含 err ) �r�o�於 /var/log/mail.err �取�

news.crit               -/var/log/news/news.crit
news.err               -/var/log/news/news.err
news.notice              -/var/log/news/news.notice
# 有�P news 服�盏挠�息,其 level 在 crit 以上 (含 crit) �r��d於 /var/log/news/news.crit ;
# 在 err 以上 (含 err ) �r��d於 /var/log/news/news.err ;
# 在 notice 以上 (含 notice ) �r��d於 /var/log/news/news.notice。


*.=warning;*.=err           -/var/log/warn
# 所有的 facility 其 level ��好是 warning 及 err �r,�o�於 /var/log/warn �n案�取�

*.crit                 /var/log/warn
# 所有的 facility 其 level �� crit 以上 (含 crit) �r,�o�於 /var/log/warn �n案�取�

*.*;mail.none;news.none        -/var/log/messages
# 除了 mail 及 news 服�找酝獾乃�有�息,�o�在 /var/log/messages。

kern.info;kern.!err          /var/log/kernel
# err 前面加上�� "!" (not),表示不包括 err 以上(含 err)的�息等�。
# 所以�@一行的�O定是�f有�P kernel 的�息其 level 在 info 以上(含 info )但不包括
# err 以上(含 err) �r (即info~warning),�o�在 /var/log/kernel �n案�取�

mail.*;mail.!=info               /var/log/maillog
# 有�P mail 服�盏挠�息,除了 level �� info 外,都�o�在 /var/log/maillog �n案�取�

local7.*                /var/log/boot.log
# �㈤_�C�^程的�息�o�在 /var/log/boot.log �n案�取�

cron.*                 /var/log/cron
# 排程方面的�息也是很重要的,把它�O定上去吧 !


 由於 SLES10 �A�O是�⒂� syslog-ng,因此在�绦� syslog script 之前,先做����幼鳎�

  1. 停止�A�O的 syslog-ng 服��

suse:~ #rcsyslog stop


  2. 修改 /etc/sysconfig/syslog

suse:~ # vi /etc/sysconfig/syslog
SYSLOG_DAEMON="syslogd"
# �@是指定提供 syslog 服�盏� daemon �� syslogd,而非原本的 syslog-ng 。


 完成以上���步�E後,就可使用以下�煞N方式�⒂� syslogd:

suse:~ #rcsyslog start
suse:~ #/etc/init.d/syslog start


 要是��硇薷牧� syslog.conf 後,��得�裼靡韵氯魏我环N方式�碜� syslogd 重新�d入 syslog.conf:

suse:~ #/etc/init.d/syslog restart
suse:~ #/etc/init.d/syslog reload
suse:~ #rcsyslog restart
suse:~ #rcsyslog reload

9.1.3 架�O log (syslogd) server

 由於�o��n非常的重要,所以有些企�I���iT�O定一台 log(syslogd) server �砑�中管理所有主�C的相�P�o�,尤其��手�的 Unix-Like 主�C��当�多的�r候,更��想要�⑦@些�o�集中管理及分析。至於��的做法不�y,�看以下的步�E:

  1. 在 server 部分,�先�� syslog.conf �n案搞定,可�⒖����的�O定�热荨�

  2. 修改 /etc/sysconfig/syslog,找到 "SYSLOGD_PARAMS" ��担��K於其後�a上 -r ��担�

    suse:~ # vi /etc/sysconfig/syslog
    SYSLOGD_PARAMS="-r"


  3. 重新��� syslogd:

    suse:~ # rcsyslog restart


  4. 做���_�J:

    suse:~ # netstat -anp | grep :514
    udp 0 0  :::514  :::*

    看到那�� 514 port 就�α耍�至於 netstat 指令在�W路部分再��。


  5. server 端搞定後,�Q client 端的�O定,您只要�� client 端的 syslog.conf �e,所有的 action 都指向�@台 log server 就行了,比如:

    cron.*    @server.test.com.tw

    修改完��後,也��得重新��� syslogd 噢。



9.2 �O定syslog-ng

9.2.1 syslog-ng �介

 目前�^大部分的人,�是��T使用�鹘y的 syslogd,不�^ syslogd 在使用上可能或多或少���o您��硪恍┬┑牟环奖悖�比方�f,一���o��n�瓤赡��包含著大量的各�N�息�o�,因此要查�某些特定�息�r,往往就要找上��老半天,且�^多�息的存在,容易造成一些不是很重要的�息��掩�w掉重要的�息,所以�f�鹘y的 syslogd 很�y�系�y管理者去�x�袼�所感�d趣的�息�o�。此�r想到的一��比�^好的替代方案,就是以 syslog-ng ( syslog new generation ) �砣〈� syslogd。

 syslog-ng 的一���O�原�t之一,就是建立更好的�息�^�V��度 �rsyslog-ng 除了具有�鹘y的 syslogd 之基本功能外,�能��τ�息�热�碜杂��^�V�l件,�K且可以把所�^�V出�淼挠�息送到指定的目的。而�O�原�t之二,�t是更容易�M行�息的�D送,它支援主�C� (chain_hostnames),即使�o��息��^了�S多主�C的�D送,也可以找出�D送�息的原始主�C和所有�理�^�@���息的主�C名�Q。

 另外在�W� syslog-ng �r,最好能先建立�τ�息路�� (Message paths) 的�^念,因此�@�e就先概略�f一下。Message paths 是由一��或者多��日�I消息�碓础⒁��或者多���^�V��t以及一��或者多��日�I消息目的所�M成的,��某���息�碓粗��息�M入了 syslog-ng 後,如果�@些�息符合�^�V��t,syslog-ng 就把�@些�息送到相���之目的。

 接著�砜纯� syslog-ng 的套件�热荩�

suse:~ # rpm -ql syslog-ng
/etc/logrotate.d/syslog-ng �O定�o��n�替的�n案。
/etc/syslog-ng/syslog-ng.conf syslog-ng 主要�⒖嫉�n案。
/sbin/syslog-ng �⑾到y或�W路相�P服�召Y���入�o��n的daemon。

 syslog-ng.conf �O定�n�热菔怯晌��部分所�M成,即 options {}、source {}、filter {}、destination {}、log {} �@五大�^段。options {} �e所�O定的是全域 (global) �x�,其中有部分�x�可以套用在其它�O定�^段中,但若���地方的�O定起�n突�r,�t是��以其它�O定�^段�e�^的�O定�橹鳌R韵赂餍」�就分�e����@����^段�碜稣f明。

9.2.2 全域�x� ( Options )

 透�^ options �⑹鲋兴�指定的全域�x�,可改� syslog-ng 的�A�O行�椤V领镀浠�本�O定�Z法如下:

options { option1(params); option2(params); ... };

 options1、options2 即所�^的全域�x�,至於 ( ) ��t是��x�可接受之��抵怠A硗饷��全域�x�之後需以分�做�Y束。

syslog-ng 所支援的全域�x�一�[表

�x�名�Q
可接受之值
� �巍∶琛∈�
chain_hostnames( )
yes 或 no
是否要�⒂�息�魉瓦^程所��^的所有主�C都�o它�o�下�怼nA�O�� yes。
long_hostnames( )
yes 或 no
�� chain_hostnames 的�e名,所以用哪��做�O定都行。
keep_hostname( )
yes 或 no
是否要改��主�C名�Q。���O定成 yes �r,表示��保留原始�o��n�鹊闹�C名�Q。�A�O �� no。
use_dns( )
yes 或 no
是否要透�^ DNS �矸唇獬�碓� IP 所���的主�C名�Q。�留意 use_dns 只����τ�息最前�^的那台主�C,以指出此�息是哪台主�C所送出的。�A�O�� yes。
use_fqdn( )
yes 或 no
是否要�o�完整的主�C名�Q。�A�O�� no。
use_time_recvd( )
yes 或 no
是否要�⒂�息中的�r�g戳�在�魉瓦^程中保留住。���O定成 yes �r,syslog-ng ��把�息中的�r�g戳�改成本地端收到�息的�r�g。�A�O�� no。
sync( )
number
�O定在�息�o���入�n案之前,有多少�息�狄�先被放在��n�^�茸骺烊 nA�O�� 0。
log_fifo_size( )
number
�� syslog-ng �^於忙碌�r,��先�⒂�息�捍嬖�辛兄�淼却��理,而此�x�就是用�碓O定可以存放在�辛兄械挠�息�的� �r���辛�M�r,新�M的�息���被�G��掉。�A�O�� 100。
stats( )
number
�O定每隔多久�r�g�y�一次被�G��的�息�怠nA�O�� 10 分� (600 秒)。
create_dirs( )
yes 或 no
如果�o��n所�的目�不存在,是否要建立。�A�O�� yes。
dir_owner( )
username
指定所建立目�的�碛姓摺nA�O�� root。
dir_group( )
groupname
指定所建立目�的�碛腥航M。�A�O��root。
dir_perm( )
perm value
指定所建立目�的�嘞蕖nA�O�� 0700。
owner( )
username
syslog-ng 所建立�n案的�碛姓摺nA�O�� root。
group( )
groupname
syslog-ng 所建立�n案的�碛腥航M。�A�O�� root。
perm( )
perm value
syslog-ng 所建立�n案的�嘞蕖nA�O�� 0600。
time_reopen( )
number
���B��嗟翎幔�需�g隔多少秒才能再重新�B�。�A�O�� 60 秒。


�例

options { long_hostnames(no); use_time_recvd(yes);
     stats(43200); log_fifo_size(200);
};

1775.gif探� long_hostnames( )、keep_hostname( )

 ���M行�息�o��D送�r,log server 上的 syslog-ng 在�A�O情�r下,��去改��所收到�息�鹊闹�C名�Q [ keep_hostname(no) ],接著 syslog-ng ���z查 long_hostnames ( chain_hostnames ) 是否�O定�� yes,如果是的�,�t syslog-ng ��把�魉陀�息�o它的�@台�碓粗�C名�Q附加在�息中的主�C名�Q之後 (比如 server1/server2),否�t��把�息�仍�本的主�C名�Q替�Q掉。

【�例�f明

 假使�F在有三台主�C透�^ DNS 解析的�Y果如下: 192.168.1.1 ( server1 )、192.168.1.2 ( server2 )、192.168.1.3 ( server3 ),其中 server1 原本的主�C名�Q是 linux (根�� /etc/HOSTNAME),而在 linux 主�C上所�a生的�息���魉偷� server2,接著 server2 再把�息�鹘o server3,�⒖家幌录���D:

log.png

 如果�F在 Client 端�� server1 �M行 ssh �h端�B�,�t每一部 server �o��n�戎��息,所�@示的主�C名�Q如下表所示:

syslog-ng.png

在上表中所看到的 src,是 syslog-ng.conf 中�O定 source �r所使用的�R�e字 ( identifier )。

9.2.3 �息�碓� ( Sources )

 �息�碓� (source) 是由一些�息�碓打��悠� (source drivers) 所�M成。�榱诵�告一���息�碓矗�必�在�O定�n中使用 source �⑹觯�其�O定�Z法如下:

source <identifier> { source-driver(params);source-driver(params);… } ;

 首先 identifier 必�是所�o的�息�碓粗形ㄒ坏淖R�e字,而�@���R�e字不能和任何的保留字有所�n突。再�砥溽峋褪侵付�您要使用的 source-driver,�@��Q定未�硭�要收集的�息�o��楹巍�

 接著先�a充一下系�y和 syslogd �M行通�的方式,了解了它��之�g的互�俞幔���有助於您�� syslog-ng 更�M一步的�J�R。

syslogd 跟系�y之�g的通�方式:

使用平台
通  �  方  式
Linux
使用 /dev/log �@��具 SOCK_STREAM �L格的 UNIX socket。所�^的 socket file,一般是指在 unix 系�y上,用�砀��W路相�P服�兆龌�拥囊��特殊�n案,它可以作�榫W路�Y料�贤ǖ囊��承接口。而���H上,socket 是具有�B���向�c�o�B���向的分�e。
BSD
使用 /var/run/log �@��具 SOCK_DGRAM �L格的 UNIX socket。

 在 syslog-ng 中,每��可能的通��C制��有相���的 source driver。比如要打�_一��具有 SOCK_DGRAM �L格的 UNIX socket �M行通��r,就必�使用 unix-dgram �@�� source driver,同�拥牡览恚�在 Linux 中要打�_具 SOCK_STREAM �L格的 UNIX socket �M行通�,就��使用到 unix-stream �@�� source driver 。

 每�� driver 可以�y�б恍��担�而有些��凳潜匾�的,有些���t是�x�裥缘摹1匾�的��凳怯衅湮恢眯缘模�此乃意味著他��需按�定的�序�肀恢概伞�unix-stream 及 unix-dgram driver 都必�指派一��必要��担�此必要��稻褪侵� socket file ,至於其他�x�裥缘��稻头旁� socket file 之後。�x�裥��悼砂慈魏雾�序�碇概伞�

syslog-ng 中,可利用的 source drivers:

�碓打��悠�
�  �巍 ∶琛 ∈�
internal( )
syslog-ng �炔慨a生的�息。
unix-stream( )
�x取所指定的 socket file �息 (SOCK_STREAM)。
unix-dgram( )
�x取所指定的 socket file �息 (SOCK_DGRAM)。
file( )
�x取特殊�n案 (非一般文字�n,如 /proc/kmsg) 的�息�Y料。
pipe( ),fifo( )
�x取所指定的 pipe file �息。
tcp( )
在指定的本�C TCP port 及介面位址�O��息。
udp( )
在指定的本�C UDP port 及介面位址�O��息。
sun-stream( )
在 solaris系�y上,打�_指定的 STREAMS �b置,�K�x取其�戎��息。


 接著以下����Σ糠� source driver 做��探�。

1775.gif unix-stream( ) 及 unix-dgram( )

 �@��� source driver ����已介�B�^,不�^要留意核心如果是在 2.4.0 版以後,�t����� /dev/log �@�� socket 使用 unix-dgram,如指定成 unix-stream,反而���o法取得核心的�息。最後�硌a充一下它��可使用的�x�。

unix-stream 及 unix-dgram 可利用之�x�:

�x�名�Q
可�O定之值
�  �巍 ∶琛 ∈�
owner( )
username
�O定 socket file 的�碛姓摺nA�O�� root。
group( )
groupname
�O定 socket file 的�碛腥航M。�A�O�� root。
perm( )
perm value
�O定 socket file 的�嘞蕖nA�O�� 0666。
max-connections( )
number
限定同�r�g能允�S的串流�B��怠A硗獯诉x�只能用於 unix-stream( ) 之中。�A�O�� 10。

1775.gif tcp( ) 及 udp( )

 先�砜纯� tcp( ) 及 udp( ) �@��� source driver 的宣告方式:

tcp([options]) ;
udp([options]) ;


 options 就是指那些可以提供�o tcp( ) 或 udp( ) �硎褂玫倪x�。

tcp( ) 及 udp( ) 可使用之�x�

�x�名�Q
可�O定之值
�  �巍 ∶琛 ∈�
ip( ) 或 localip( )
IP 位址
��任 log server 的主�C所要�O�的介面位址。�A�O�� 0.0.0.0。
port( ) 或 localport( )
Port number
��任 log server 的主�C所要�O�的 port number。�A�O�� 514 port。
max-connections( )
number
�@是同�r�g最大�B��档南薅� �r另外此�x�只能用於 tcp( ) 的�碓粗小nA�O�� 10。


�例

source src { unix-stream("/dev/log" max-connections(100));
       internal();
       udp(ip(0.0.0.0) port(514));
};

9.2.4 �^�V器 ( Filters )

 透�^ filter 的�O定,可以�我���τ�息�碓醋鲞M一步的�^�V,�K�⑵浞珠T�e�的做控管,以期能更�蚀_地�理系�y�息。�^�V器也都有唯一的�R�e符�,�Z法如下:

filter <identifier> { expression ; } ;

 expression 中,可以使用 syslog-ng 的�炔亢�式�砭���布林表示式,意即可把�@些�炔亢�式�泶钆� and、or 及 not 等���\算子,而�M合成多���^�V�l件,以�Q定是否要�日�I�息通�^。

使用在 filter �⑹鲋械倪^�V函式

�^ �V 函 式
使 用 方 法
� �巍∶琛∈�
facility( )
facility(facility[,facility])
比�τ�息�碓吹姆��疹�型 (facility)。常�的 facility 有 auth、authpriv、cron、daemon、kern、lpr、mail、news、syslog、user、local{0-7}、* 等。
level( ) 或 priority( )
level(pri[,pri1..pri2])
依照�息的��先等��碜霰�Α�level 有 none、debug、info、notice、warn、err、crit、alert、emerg、* 等。
program( )
program(regexp)
使用正�表示法�砼c�o��息中的程式名�Q�谖蛔霰�Α�
host( )
host(regexp)
使用正�表示法�砼c�o��息中的主�C名�Q�谖蛔霰�Α�
match( )
match(regexp)
使用正�表示法�砼c�o��息做比�Α�
filter( )
filter(filtername)
呼叫另外一��已存在的 filter �硎褂谩�
netmask( )
netmask(ip/mask)
�z查�碓炊说� IP 是否在指定的子�W路中。


�例

filter f_message { level(info .. err) and not facility(cron,mail,news) or match("deny") ; } ;


 �@�e定�x了一�� filter 叫 f_messages,其所代表的�^�V�l件�椋撼�了 cron、mail、news 以外的其他 facility,其 level 是在 info ~ err �蛹�者,或者�息中包含 "deny" �@��字串的�,都是符合�^�V�l件的�息。

9.2.5 �息目的 (Destinations)

 �息目的是指���息�碓� (sources) 被�^�V器 (filters) 做��t比��後,把那些符合比�σ��t的�息,要送往到哪�e的意思。 destination 可以是一般�n案、命名通道 ( pipe )、tty 或另一台主�C。

 �c sources 相同,destination 也是包含一��或多��目的��悠� (destination drivers),如此方可�缘靡�把指定的�息送往何�。在�O定�n�龋�需使用如下的 destination �⑹觯�

destination <identifier> { destination-driver(params) ; destination-driver(params) ; ... } ;

syslog-ng 中,可利用的 destination drivers

目的��悠�
�  �巍 ∶琛 ∈�
file( )
��入�息至所指定的�n案。
pipe( ) , fifo( )
��入�息至所指定的 pipe file。
unix-stream( )
送出�息至所指定的 socket file (SOCK_STREAM)。
unix-dgram( )
送出�息至所指定的 socket file (SOCK_DGRAM)。
udp( )
送出�息至所指定主�C的 UDP port。
tcp( )
送出�息至所指定主�C的 TCP port。
usertty( )
如果使用者登入�r,送出�息�o�指定的使用者 (即�r�上通知)。
program( )
送出�息至所指定程式的��瘦�入。


 另外在 destination �⑹鲋校�file( ) �人�指定的�n案名�Q,可利用巨集 (�⒖枷卤�) ��Υ�n名做�U展。

可使用之巨集一�[表:

巨集名�Q
用 法 描 述
PROGRAM
指定送出�息的程式名�Q�楹巍�
FACILITY
�息�型的名�Q。
PRIORITY(LEVEL)
�息的��先等�。
YEAR
�息被送出�r的年份。
MONTH
�息被送出�r的月份。
WEEKDAY
�息被送出�r是星期�住�
DAY
�息是在�滋�被送出的。
HOUR
�息是在��c被送出的。
MIN
�息是在�追直凰统龅摹�
HOST
�息�碓吹闹�C名�Q。

Note:�r�g巨集所�@示的�r�g,有可能是使用�o��n中原始�息的�r�g,或 log server 接收到�@���息的�r�g,因�樗���受到 use_time_recvd( ) �@���x�的控制。另外���息��^好�滋ㄖ�C�r,�t HOST 巨集所�a生的主�C名�Q,���受到 chain_hostnames( ) �@���x�的影�,如果是 chain_hostnames(yes),�t��使用第一台主�C名�Q。

�例

destination d_day { file("/var/log/messages.$DAY"); };
destination dhost { udp("192.168.1.155" port(514)); };

9.2.6 日�I路�� (Log paths)

 �那懊娴慕榻B已�可以了解要如何定�x sources、filters 及 destinations,所以接著就可以利用 log �⑹�戆阉����o做���M合。log �⑹龅恼Z法如下:

log { source(s1) ; source(s2) ; ...
   filter(f1) ; filter(f2) ; ...
   destination(d1) ; destination(d2) ; ...
   flags(flag1[,flag2…] ) ; } ;

 上面的 log �⑹����U容易理解的,每�� source、filter 及 destination 後的 s1、f1、d1、…,就是把����所宣告的 identifier 套用�M去而已,�@�泳涂梢韵雀���所指定的 source 去�x取�息,再依 filter �M行�息�^�V,最後才把�@些�^�V後的�息送往 destination 所指定的目的。

 �O定�n�纫欢��存在著好�坠P的 log �⑹觯�而在�A�O的情�r下,�@些 log �⑹���依照他��在�O定�n中出�F的位置�硪佬�绦校�因此,同一�P�息�o�有可能��被送往相同或不同的目的好�状危�如以目的�榧o��n�碚f,�t同一�o��n�纫苍S��存在著重�}的��,或者不同�o��n中有可能��存在相同的�息�o� �r而�@���A�O的行�椋��⒖梢越逵� flags( ) 的�O定而改�。比如您在某�� log �⑹鲋惺褂昧� flags(final) �@��旗��r,表示在�⒋舜斡�息�出至指定的目的後,��後就不再�理�@���息了。

�例

source src {
   internal( );
   unix-dgram("/dev/log");
};

filter f_mailinfo { level(info) and facility(mail); };
filter f_mail { facility(mail); };
filter f_messages { not facility(news); };

destination mailinfo { file("/var/log/mail.info"); };
log { source(src); filter(f_mailinfo); destination(mailinfo); };

destination mail { file("/var/log/mail"); };
log { source(src); filter(f_mail); destination(mail); };

destination messages { file("/var/log/messages"); };
log { source(src); filter(f_messages); destination(messages); };


 以上面的�O定�热�碚f,假使�F在�绦� "rcpostfix restart" 之後,�t此�]件服�罩匦��拥挠�息,�����在 /var/log/mail.info、/var/log/mail、/var/log/messages �@三���n案中。倘若修改一下第二�� log �⑹龀桑�
log { source(src); filter(f_mail); destination(mail);flags(final);};
�t此�息在�@��地方�⑹亲钺嵋淮伪患o�,因此�]件服�罩匦��拥挠�息,只��出�F在 /var/log/mail.info 及 /var/log/mail 中,而不��出�F在 /var/log/messages �e。

9.2.7 syslog-ng.cong �O定�n�f明

 了解了前面�仔」�所提的�^念後,最後就�砜纯� syslog-ng.conf 的�O定�热荩�不�^只�����要�c�碚f明。

suse:~ # vi /etc/syslog-ng/syslog-ng.conf

####################### Global options
#########################


options { long_hostnames(off); sync(0); perm(0640); stats(3600); };

####################source my_src { .... };
#####################

source src {
# include internal syslog-ng messages
# note: the internal() soure is required!

   internal();

# the following line will be replaced by the
# socket list generated by SuSEconfig using
# variables from /etc/sysconfig/syslog:


   unix-dgram("/dev/log");

#
uncomment to process log messages from network:
#
udp(ip("0.0.0.0") port(514));
#若欲�此台主�C��任 log server,�t可把上一行的�]解拿掉,以接受�W路上
#其他主�C所��淼挠�息�o�
};


####################### Filter definitions
#######################

filter f_iptables  { facility(kern) and match("IN=") and match("OUT="); };
#此 filter 用�磉^�V核心�息中,同�r包含有 " IN= " 及 " OUT= " �@些字串之所有核心�息。

filter f_console   { level(warn) and facility(kern) and not filter(f_iptables)
            or level(err) and not facility(authpriv); };

#
此 filter 用�磉^�V核心�息之 level �� warn ( 不包括 f_iptables 的�^�V�息) 者,
#或所有 facility (不包括 authpriv ) 其 level �� err 者。

# 以下 filter 的�^�V�l件都很好理解,�@�e就不再�f明了。
filter f_newsnotice { level(notice) and facility(news); };
filter f_newscrit  { level(crit) and facility(news); };
filter f_newserr   { level(err) and facility(news); };
filter f_news     { facility(news); };

filter f_mailinfo  { level(info) and facility(mail); };
filter f_mailwarn  { level(warn) and facility(mail); };
filter f_mailerr   { level(err, crit) and facility(mail); };
filter f_mail    { facility(mail); };

filter f_cron    { facility(cron); };

filter f_local    { facility(local0, local1, local2, local3,
                   local4, local5, local6, local7); };

filter f_acpid    { match('^\[acpid\]:'); };
filter f_netmgm   { match('^NetworkManager:'); };

filter f_messages  { not facility(news,mail) and not filter(f_iptables); };
filter f_warn    { level(warn, err, crit) and not filter(f_iptables); };
filter f_alert    { level(alert); };

##### Most warning and errors on tty10 and on the xconsole pipe: #####

destination console { file("/dev/tty10" group(tty) perm(0620)); };
# �@�� destination,是要把�息��到第十���K端�C,�K指定 /dev/tty10 的�碛腥航M�� tty,
# �嘞奘� 0620。

log { source(src); filter(f_console); destination(console); };
#�� src 所定�x的�息�碓矗�� f_console 做�息�^�V後,再�⒋擞�息�出至 tty10。

destination xconsole { pipe("/dev/xconsole" group(tty) perm(0400)); };
log { source(src); filter(f_console); destination(xconsole); };

###################root is informed immediately###################

# destination root { usertty("root"); };
#此 destination ��把�息送至 root 的 console。

# log { source(src); filter(f_alert); destination(root); };
#�� src 所定�x的�息�碓矗�� f_alert 做�息�^�V後,再送往 root 的 console。

################Mail-messages in separate files:
################

destination mailinfo { file("/var/log/mail.info"); };
log { source(src); filter(f_mailinfo); destination(mailinfo); };

destination mailwarn { file("/var/log/mail.warn"); };
log { source(src); filter(f_mailwarn); destination(mailwarn); };

destination mailerr { file("/var/log/mail.err" fsync(yes)); };
log { source(src); filter(f_mailerr); destination(mailerr); };

# and also all in one file:


destination mail { file("/var/log/mail"); };
log { source(src); filter(f_mail); destination(mail); };

################### acpid messages in one file:###################

destination acpid { file("/var/log/acpid"); };
log { source(src); filter(f_acpid); destination(acpid); flags(final); };

# �����得 final 的意思吧,不太�得的�,回�^�^�}��}�。

############### NetworkManager messages in one file:##############

destination netmgm { file("/var/log/NetworkManager"); };
log { source(src); filter(f_netmgm); destination(netmgm); flags(final); };


####################Cron-messages in one file:####################
# (don't forget to provide logrotation config)

# destination cron { file("/var/log/cron"); };
# log { source(src); filter(f_cron); destination(cron); };

##############Some boot scripts use/require local[1-7]:
##############

destination localmessages { file("/var/log/localmessages"); };
log { source(src); filter(f_local); destination(localmessages); };

####All messages except iptables and the facilities news and mail:
####

destination messages { file("/var/log/messages"); };
log { source(src); filter(f_messages); destination(messages); };


##############Firewall (iptables) messages in one file:##############

destination firewall { file("/var/log/firewall"); };
log { source(src); filter(f_iptables); destination(firewall); };

###############Warnings (except iptables) in one file:
###############

destination warn { file("/var/log/warn" fsync(yes)); };
log { source(src); filter(f_warn); destination(warn); };


###################keep all messages in one file:
###################
# (don't forget to provide logrotation config)

# destination allmessages { file("/var/log/allmessages"); };
# log { source(src); destination(allmessages); };

 修改了 syslog-ng.conf 後,��得重新��� syslog-ng。

suse:~ # rcsyslog restart

 不�^如果之前您有按照第一� syslogd �O定方式而修改�^ /etc/sysconfig/syslog 的�,那�先�绦� "rcsyslog stop" ,然後把 /etc/sysconfig/syslog 改回原�淼念A�O值:

suse:~ # vi /etc/sysconfig/syslog
SYSLOG_DAEMON="syslogd-ng"
SYSLOGD_PARAMS=""

 最後再��� syslog-ng 即可:

suse:~ # rcsyslog start


9.3 �o��n�替( logrotate )

9.3.1 �o��n�替的概念

 在了解�o��n的重要性後,不知大家有�]有想�^一�����},系�y的�o��n每天��d那�N多�Y�,且�@���幼饕恢背掷m著在�M行著,那��不��哪天把整�w硬碟�o塞爆了呢 ? 答案是否定的,因��系�y每天都��交由 /usr/sbin/logrotate �@支程式去�x取 /etc/logrotate.conf �n案,而 logrotate.conf �n案的�热荩�主要就是�P於�o��n�替方面的�O定。

 何�^�替呢 ? 以 /var/log/mail �o��n�碚f,假使我���O定一�L�绦幸淮屋�替,又�替�n (�o��n在��^�替後所�a生的�n案) �的孔疃嗳���,�t���绦械谝淮渭o��n�替�r,mail ���成 mail.1,也就是 mail.1 的�热菥褪侵�前 mail 的�热荩��o接著系�y就��再�u造另一��新的空的 mail �n案出�� �r�绦械诙�次�替�r,mail.1 ���成 mail.2,mail �成 mail.1,然後再 create 一��新的 mail �n案 �r而在�绦械谌�次�替後就��有 mail.1、mail.2、mail.3 等三���替�n (�o��n的�浞�) �r接著在�绦械谒拇屋�替�r,由於��初�O定�替�n最多只能有三��,所以 mail.3 就��先被移除,然後 mail.2 � mail.3, mail.1 � mail.2,mail � mail.1。按照�@���替原理�硗扑愕脑�,就算今天�M行第一百次�替�r,�替�n�的窟�是只有三��,所以不����o��n的�热菀恢背掷m成�L下去。

  一�_始不是有提到 logrotate 程式每天都���d入 logrotate.conf �幔��哪目煽吹贸�砟� ? 找找看在 /etc/cron.daily 目�下是不是有��叫 logrotate 的 script,再看看其�热荩�

suse:~ #cat /etc/cron.daily/logrotate
#!/bin/sh


TMPF=`mktemp /tmp/logrotate.XXXXXXXXXX`

/usr/sbin/logrotate /etc/logrotate.conf 2>&1 | tee $TMPF
EXITVALUE=${PIPESTATUS[0]}


if [ $EXITVALUE != 0 ]; then
 # wait a sec, we might just have restarted syslog
 sleep 1
 # tell what went wrong
 /bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
 /bin/logger -t logrotate -f $TMPF
fi


rm -f $TMPF
exit 0


 �@��意思是�f���@支 script 在�绦�r, logrotate 程式���d入 /etc/logrotate.conf �n案,而���绦杏姓`�r (即退出值�榉� 0),在�o��n /var/log/messages �染��出�F "logrotate: ALERT exited abnormally with [127]" �@一�的�息。

9.3.2 �O定 logrotate.conf

 有了�o��n�替的概念之後,接著就�斫榻B�o��n�替的主要�O定�n�热荩�

suse:~ # vi /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly

weekly
#
�O定�o��n每�L�绦幸淮屋�替。
# 您�可以使用 daily (每天�替) 及 monthly (每月�替) 去做�O定。

# keep 4 weeks worth of backlogs
rotate 4
#
保持四���替�n (�浞莸募o��n),也就是�f您最多只能�a生四���替�n啦。

# create new (empty) log files after rotating old ones
create
#
�o��n�M行�替後,��建立一��新的、空的�o��n出�怼�

# uncomment this if you want your log files compressed
#compress
# �o��n�替後所�a生的�替�n要不要�嚎s (�A�O是�� gzip �嚎s),
# 如果要的�,就�⒃]解拿掉。

# uncomment these to switch compression to bzip2
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
#
�� compress ��当恢付ǖ那疤嵯拢��⑤�替�n改�� bzip2 �嚎s。

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
#
�@行�O定的主要意思是�f,在 /etc/logrotate.d/ 目�下的所有�n案都一���被�x入。

#
在����前面介�B�^的那些��凳�凫� global ��担�而位於 /etc/logrotate.d 下的�n案中,
# 如果有未�O定到的��担��t��套用 global 的��担������地方的�O定��灯鹦n突�r,
# 是以 /etc/logrotate.d 目�下的�n案�橹鳌�

# no packages own wtmp -- we'll rotate them here
#/var/log/wtmp {
# monthly
# create 0664 root utmp
# rotate 1
#}
#
您也可以把�o��n的�替�O定在�@�e。至於此�的�O定是�f/var/log/wtmp �o��n��
#
每��月�替一次,且在�替後所�a生的新�o��n,其�嘞�� 664,�碛姓呒�碛腥航M
# �� root 及 utmp,�K且最多只能有一���o��n的�浞荨�

# system-specific logs may be also be configured here.


 �o接著就�硖接�一下����提到的 /etc/logrotate.d 中,那些�n案�e怎�N�O定�o��n方面的�替:

suse:~ #vi /etc/logrotate.d/syslog
/var/log/warn /var/log/messages /var/log/allmessages /var/log/localmessages /var/log/firewall {
 compress 
 dateext 
 maxage 365 
 rotate 99 
 missingok 
notifempty

 size +4096k 
 create 640 root root 
 sharedscripts 
 postrotate 
  /etc/init.d/syslog reload 
 endscript
}


 首先您需先指出要�O定�替的�o��n有哪些,��要�Χ���o��n做相同�替方面的�O定�r,每���o��n�g需以空白字元隔�_,然後再把�替方面的相�P��翟O定在 { } �取�以下就����@些��底稣f明。


icon.jpg compress


�o��n�替後要�嚎s,不�^此�非�� gzip �嚎s噢,因�� global �已�指定使用 bzip2 �嚎s了。




icon.jpg dateext


�⑤�替�n�n名中的�底郑�改成以�r�g格式�盹@示,如 mail-20070125.bz2。




icon.jpg maxage 365


移除 365 天以前的�替�n。




icon.jpg rotate 99


最多能有 99 ���替�n (�o��n�浞�)。




icon.jpg missingok


�替�r如果�o��n不存在,不需提示任何�息。�A�O�� nomissingok。




icon.jpg notifempty


如果�o��n是空的,不�M行�替。�A�O�� ifempty。




icon.jpg size +4096k


���o��n大小超�^ 4096 k �r才�M行�替。您亦可使用 M �碜�挝唬�若不指定�挝�t�� bytes。




icon.jpg create 640 root root


�替後所�a生的新�o��n,其�嘞�� 640,�碛姓呒�碛腥航M皆�� root。




icon.jpg sharedscripts


如果有多���o��n同�r被�替�r,�t介於 postrotate 及 endscript 之�g的程式,

只�绦幸淮渭纯伞�





icon.jpg postrotate


�o��n�替後,���绦形混� postrotate 及 endscript 之�g的程式。而�@�e是�O定�替後�绦� "/etc/init.d/syslog reload",至於�绦羞@���幼鞯闹饕�目的,是因�檩�替後���a生一��新的�o��n,因此要� syslogd ( syslog-ng ) 重新�J�R�@��新�n案才行。


 再看另外一���n案:

suse:~ # vi /etc/logrotate.d/wtmp

/var/log/wtmp {
 compress
 dateext
 maxage 365
 rotate 99
 size=+400k
 notifempty
 missingok
copytruncate
}
# �@�e只有一�� copytruncate 未介�B�^。copytruncate 是�f在�M行�o��n�替�r,��先��
# �o��n的�热菅}�u到�替�n後才清除�o��n的�热荩�因此�念^到尾�o��n都�存在,所以您不需
# �O定 create ��� (就算�O定上去也��被忽略 ),��然更不需要�绦� reload 的�幼�印�


9.3.3 syslogd �c logrotate 的���例

 以下�e�� syslogd �c logrotate 的���H�例�o各位做�⒖迹�看看�@�烧呷绾未钆淦�碜鲈O定。

1775.gif要求事�如下

一. �O定 syslog.conf:

  1. �⒂嘘P核心的所有�息�o�在 /var/log/kernel �n案 �r另外把核心所出�F的�息,其�息等�在 err 以上 (含 err) �r,�o�在第十���K端�C上。

  2. �⑧]件服�盏乃�有�息�o�在 /var/log/maillog �e,�K�袢》峭�步��入的方式。

  3. �⑴懦谭��盏乃�有�息�o�在 /var/log/cron。

  4. 除了核心�息、排程服�占班]件服�盏挠�息外,其他所有的�息都�o�在 /var/log/allmessages �e。

二. �O定�o��n�替:

  ��σ陨线@些�o��n,於 /etc/logrotate.d/syslog �龋�做相同�替方面的�O定。

  1. �o��n�替後,�� gzip �嚎s。

  2. 最多只能有八���o��n的�浞�n (�替�n)。

  3. ���o��n大小超�^ 2 M �r才�M行�替。

  4. 如果�o��n是空的,�t不�M行�替。

  5. �o��n�替後所�a生的新�o��n,其�嘞�� 640,�碛姓呒�碛腥航M皆�� root。

三. �⒛�目前所�O定的�@台主�C,��成 log (syslogd) server �硎褂谩�

1775.gif相�P�O定如下

一. �O定 syslog.conf:

suse:~ #vi /etc/syslog.conf
kern.*                /var/log/kernel
kern.err               /dev/tty10
mail.*               -/var/log/maillog
cron.*                /var/log/cron
*.*;kern.none;cron.none;mail.none  /var/log/allmessages

二. �O定�o��n�替:

suse:~ # vi /etc/logrotate.d/syslog

/var/log/kernel /var/log/maillog /var/log/cron /var/log/allmessages {
  compress
compresscmd /usr/bin/gzip
  rotate 8
  size +2M
  notifempty
  create 640 root root
  sharedscripts
  postrotate
   /etc/init.d/syslog reload
 endscript
}

三. �O定 log server:

suse:~ #vi /etc/sysconfig/syslog
SYSLOGD_PARAMS="-r"

suse:~ #
rcsyslog restart


9.4 登入的�O控


 �@�e介�B三���c使用者登入�o�有�P的�n案,不�^您�o法直接�g�[�@些�n案的�热荩�必�透�^指令才能存取�@些�n案。

1775.gif/var/log/lastlog (指令 lastlog)


 �o�使用者最後一次登入系�y的�r�g。只要是 /etc/passwd �n案中所存在的�ぬ�,都���o�在�@���n案�� (除了 nobody �ぬ�),因此您可以了解到有哪些�ぬ��奈吹侨胂到y。

suse:~ # lastlog
Username  Port   From       Latest
root    tty1           Wed Jan 31 11:31:15 +0800 2007
bin                  **Never logged in**
daemon                **Never logged in**
  :略                   :略
barry    pts/2  192.168.1.2   Tue Jan 30 15:28:56 +0800 2007
mary    tty3           Mon Jan 29 11:11:47 +0800 2007

1775.gif/var/run/utmp (指令 who、w 或 finger)

 �o�目前有哪些使用者登入系�y,包括本�C及�h端登入。而��使用者登出後,就���拇�n案中被移除。

suse:~ # who
root   tty1   Sep 23 00:23
mary
   tty3   Sep 23 00:24
root   pts/0   Sep 22 23:29 (192.168.1.2)


 一般使用者也可以存取�@���n案,但若您不想�使用者查��l在�上的�,可以修改一下 utmp 的�嘞蓿�

suse:~ # chmod 660 /var/run/utmp

1775.gif /var/log/wtmp (指令 last )

 �o�使用者登入及登出的�r�g,�K���y�登入至登出的存�m�r�g。

suse:~ # last
tina  :0           Fri Sep 23 14:24 - 14:36 (00:12)
barry  tty3           Fri Sep 23 00:49 still logged in
mary  pts/1   192.168.1.2  Fri Sep 23 00:44 still logged in
mary  tty3Fri         Sep 23 00:24 - 00:49 (00:25)
root  tty1Fri         Sep 23 00:23 still logged in

 ��使用者登入�r,login 程式���⒋舜蔚侨氲�r�g地�c��入 /var/log/lastlog �e �r接著�_�� /var/run/utmp,也同�r把登入�Y料��入其中,一直到使用者登出後,才�①Y料�� utmp 中移除 �r最後�_�� /var/log/wtmp,把使用者在 utmp 中的�Y料��入 wtmp 中,而��使用者登出�r��再��入一次,只不�^�@次��把使用者�牡侨氲降浅龅拇胬m�r�g做���y��K�o�下�怼�


copyright 2006 by barry ( 柏青哥 )


你可能感兴趣的:(设置,syslog-ng)