在開始之前有個故事要和大家分享。
接著想瞭解在機器掛掉之前有誰在線上操作,結果last一跑..
早期的Solaris(9 以前)
以往的Solaris就只有一支newsyslog的簡單scr
Solaris 9開始提供了一支程式logadm專門用來做系統log的管理工
logadm有一個設定檔/etc/logadm.conf,
Solaris在安裝完成後,
logadm的語法大致上看起來就像下面這個樣子,
第一個參數是log檔的名字(不全然是,後面會說明),
logadm的參數很多,下表列出幾個常用的參數
-C n | 保留的數量,如果沒有指定任何的過期條件,預設為-C 10。 |
-p n[dwmy] | 輪替週期 |
-s n[bkmg] | 檔案大小,當指定的log檔的大小大於等於這個值時就更換。 |
-z n | 使用gzip來壓縮被更換掉的舊檔。 |
-a | log檔更換後要執行的指令。 |
-b | log檔更換前要執行的指令。 |
-g | 新檔案的擁有群組,不給就和原檔案一樣。 |
-o | 新檔案的擁有人,不給就和原檔案一樣。 |
-m | 新檔案的權限,不給就和原檔案一樣。 |
-w | 將此設定寫入設定檔。 |
-r | 將此設定從設定檔中移除。 |
-V | 列出設定檔的內容。 |
假設apache的error_log,希望每10MB換一次,
# logadm -w /var/apache/logs/error_log -C 8 -s 10m -z0 、
-a 'kill -HUP `cat /var/run/apache2/httpd.pid`'
# logadm -V| grep error
/var/apache/logs/error_log -C 8 -s 10m -z 0 -a 'kill -HUP `cat /var/run/apache2/httpd.pid`'
然後是access_log,由於log要留做分析使用,
# logadm -w /var/apache/logs/access_log -C 9 -p 1w 、
-a 'kill -HUP `cat /var/run/apache2/httpd.pid`'
# logadm -V|grep acce
/var/apache/logs/access_log -C 9 -p 1w -a 'kill -HUP `cat /var/run/apache2/httpd.pid`'
logadm在檔案名稱部份也支援*,?,{}。
# logadm -w apache_log -C 9 -p 1m 、
-a 'kill -HUP `cat /var/run/apache2/httpd.pid`' /var/apache/logs/{access,error}_log
# logadm -V| grep apache_log
apache_log -C 9 -a 'kill -HUP `cat /var/run/apache2/httpd.pid`' -p 1m /var/apache/logs/access_log /var/apache/logs/error_log
這個例子好像和前面講的不太一樣,-w 後面接的不再是檔案名稱,取而代之的是apache_log。
當全部都設定好之後,
Solaris預設有幾個系統的log檔已經幫你設定好檔案輪替
# logadm -w /var/adm/wtmpx -C 6 -p1m
上面的指令每個月換一次檔,共保留6個月。
# last -f /var/adm/wtmpx.0
Solaris 9也開始使用ssh的連線方式,但是預設卻沒有產生log檔,
首先確認,sshd使用的Facility和Level。
# egrep 'Faci|Level' /etc/ssh/sshd_config
SyslogFacility auth
LogLevel info
修改/etc/syslog.conf,加入下方auth.
# cp /etc/syslog.conf /etc/syslog.conf.orig
# vi /etc/syslog.conf
*.err;kern.notice;auth.notice /dev/sysmsg
*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages
auth.info /var/adm/sshdlog
# touch /var/adm/sshdlog
然後重起syslogd,solaris 9和Solaris 10的方式並不相同。
Solaris 9
# /etc/init.d/syslog stop; /etc/init.d/syslog start
Solaris 10
# svcadm disable system-log ; svcadm enable system-log
或是直接refresh
# svcadm refresh system-log
設定sshdlog每個月換一次,保留3個月,並啟用壓縮。
# logadm -w /var/adm/sshdlog -C3 -p 1m -z 0 -a 'kill -HUP `cat /var/run/syslog.pid`'
# logadm -V| grep sshd
/var/adm/sshdlog -C 3 -p 1m -z 0
要看歷史檔的話,使用gzcat或gzip -dc就可以了。
# gzcat sshdlog.0.gz
# gzip -dc sshdlog.1.gz
logadm預設更換檔案的動作是1.把原檔案改名,2.
logadm -w /var/adm/sshdlog -C 3 -p 1m -z0 -c
有些AP本身即提供log檔案的輪替功能,
下面的範例節錄自Solaris 10的logadm.conf,
/var/fm/fmd/errlog -M '/usr/sbin/fmadm -q rotate errlog && mv /var/fm/fmd/errlog.0- $nfile' -N -s 2m
還有一些AP會不定期或定期的產生不同檔名的log檔,
假設有一支程式叫APservd,log檔存放的位置在/
APservd_20061005_0000.log
APservd_20061005_0100.log
APservd_20061005_0200.log
......
APservd_20061005_2200.log
APservd_20061005_2300.log
於是我們寫一個script把每天24個檔都tar起來成為AP
# cat /root/bin/arch_AP_log.sh
#!/bin/sh
cd /var/APservd/log
/usr/sbin/tar -cf APservd_log.tar `/usr/bin/find . -type f -name "APservd*log"`
#/usr/bin/find . -type f -name "APservd*log" -exec rm -f {} \;
script的內容很簡單,最主要的是find的部份,
最後是加一條設定進去logadm.conf
# logadm -w /var/APservd/log/APservd_log.tar -C 10 -a '/root/bin/arch_AP_log.sh' -p now
指令的參數-p後加的是now,
logadm比較常用的方法大概就這個樣子了,
以資訊安全的觀點來看,log檔能保留的時間是越長越好。
1 則留言:
A note regarding rotation of FMA logs. While 'fmadm rotate' is provided, it is not the best method for log rotation. You are correct that 'logadm' should be used to guarantee history is preserved. See my entry on this at http://blogs.sun.com/sdaven/fma_log_files
張貼留言