Solaris - log的管理,使用logadm
在開始之前有個故事要和大家分享。
接著想瞭解在機器掛掉之前有誰在線上操作,結果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檔能保留的時間是越長越好。
留言