http://www.suse.url.tw/sles10/lesson9.htm
作者:�柏菁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 |
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:
在 server 部分,�先�� syslog.conf �n案搞定,可�⒖����的�O定�热荨�
修改 /etc/sysconfig/syslog,找到 "SYSLOGD_PARAMS" ��担��K於其後�a上 -r ��担�
suse:~ # vi /etc/sysconfig/syslog SYSLOGD_PARAMS="-r" |
重新��� syslogd:
suse:~ # rcsyslog restart |
做���_�J:
suse:~ # netstat -anp | grep :514 udp 0 0 :::514 :::* |
server 端搞定後,�Q client 端的�O定,您只要�� client 端的 syslog.conf �e,所有的 action 都指向�@台 log server 就行了,比如:
cron.* @server.test.com.tw |
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
|
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); }; |
探� 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:
如果�F在 Client 端�� server1 �M行 ssh �h端�B�,�t每一部 server �o��n�戎��息,所�@示的主�C名�Q如下表所示:
在上表中所看到的 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 做��探�。 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。 |
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) # 以下 filter 的�^�V�l件都很好理解,�@�e就不再�f明了。 filter f_mailinfo { level(info) and facility(mail); }; filter f_cron { facility(cron); }; filter f_local { facility(local0, local1, local2, local3, filter f_acpid { match('^\[acpid\]:'); }; filter f_messages { not facility(news,mail) and not filter(f_iptables); }; ##### Most warning and errors on tty10 and on the xconsole pipe: ##### destination xconsole { pipe("/dev/xconsole" group(tty) perm(0400)); }; ###################root is informed immediately################### destination mailwarn { file("/var/log/mail.warn"); }; destination mailerr { file("/var/log/mail.err" fsync(yes)); }; ############### NetworkManager 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 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明。
![]() |
compress | |
�o��n�替後要�嚎s,不�^此�非�� gzip �嚎s噢,因�� global �已�指定使用 bzip2 �嚎s了。 | ||
![]() |
dateext | |
�⑤�替�n�n名中的�底郑�改成以�r�g格式�盹@示,如 mail-20070125.bz2。 | ||
![]() |
maxage 365 | |
移除 365 天以前的�替�n。 | ||
![]() |
rotate 99 | |
最多能有 99 ���替�n (�o��n�浞�)。 | ||
![]() |
missingok | |
�替�r如果�o��n不存在,不需提示任何�息。�A�O�� nomissingok。 | ||
![]() |
notifempty | |
如果�o��n是空的,不�M行�替。�A�O�� ifempty。 | ||
![]() |
size +4096k | |
���o��n大小超�^ 4096 k �r才�M行�替。您亦可使用 M �碜�挝唬�若不指定�挝�t�� bytes。 | ||
![]() |
create 640 root root | |
�替後所�a生的新�o��n,其�嘞�� 640,�碛姓呒�碛腥航M皆�� root。 | ||
![]() |
sharedscripts | |
如果有多���o��n同�r被�替�r,�t介於 postrotate 及 endscript 之�g的程式, 只�绦幸淮渭纯伞� |
||
![]() |
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定。要求事�如下
一. �O定 syslog.conf:
�⒂嘘P核心的所有�息�o�在 /var/log/kernel �n案 �r另外把核心所出�F的�息,其�息等�在 err 以上 (含 err) �r,�o�在第十���K端�C上。
�⑧]件服�盏乃�有�息�o�在 /var/log/maillog �e,�K�袢》峭�步��入的方式。
�⑴懦谭��盏乃�有�息�o�在 /var/log/cron。
除了核心�息、排程服�占班]件服�盏挠�息外,其他所有的�息都�o�在 /var/log/allmessages �e。
二. �O定�o��n�替:
��σ陨线@些�o��n,於 /etc/logrotate.d/syslog �龋�做相同�替方面的�O定。
�o��n�替後,�� gzip �嚎s。
最多只能有八���o��n的�浞�n (�替�n)。
���o��n大小超�^ 2 M �r才�M行�替。
如果�o��n是空的,�t不�M行�替。
�o��n�替後所�a生的新�o��n,其�嘞�� 640,�碛姓呒�碛腥航M皆�� root。
三. �⒛�目前所�O定的�@台主�C,��成 log (syslogd) server �硎褂谩�相�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案。/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 |
/var/run/utmp (指令 who、w 或 finger)
�o�目前有哪些使用者登入系�y,包括本�C及�h端登入。而��使用者登出後,就���拇�n案中被移除。
suse:~ # who |
一般使用者也可以存取�@���n案,但若您不想�使用者查��l在�上的�,可以修改一下 utmp 的�嘞蓿�
suse:~ # chmod 660 /var/run/utmp |
/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 ( 柏青哥 )