MacOS X 10.4 Serverでsyslogを受け取る
MacOS X 10.4 Serverでsyslogを受け取る
0.改訂履歴
1.はじめに
このドキュメントでは,MacOS X 10.4サーバにて,RTX1100あたりのネットワーク機器から,syslogを受け取る為の設定手順を説明する. デフォルトでは外部のサーバからsyslogを受け取れる設定になっていないため,それを許可し,lanchctlを使ってunload/loadで設定を読み込ませて反映させるまでの手順となる. また,OSに最初から設定してある毎日のログローテーションの/etc/dailyの不具合により,syslogがロギング手されなくなる不具合に対応する為の手法も記載されている.
2.設定の変更
- Syslogdの設定ファイルは,XMLファイルで記述されている.
- 以下のファイルを編集する.
- /System/Library/LaunchDaemons/com.apple.syslogd.plist
変更前 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.syslogd</string>
<key>ServiceDescription</key>
<string>Apple System Log Daemon</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/syslogd</string>
</array>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
|
変更後 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.syslogd</string>
<key>ServiceDescription</key>
<string>Apple System Log Daemon</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/syslogd</string>
<string>-u</string>
<string>-m</string>
<string>0</string>
</array>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
|
3.設定を反映させる
- 設定を反映させるために,syslogデーモンを再起動させる.
- launchctlでデーモンの確認を行う.
203:/Users/admin root# launchctl list
com.apple.KernelEventAgent
com.apple.mDNSResponder
com.apple.nibindd
com.apple.periodic-daily
com.apple.periodic-monthly
com.apple.periodic-weekly
com.apple.portmap
com.apple.servermgrd
com.apple.syslogd
com.vix.cron
com.apple.xftpd
org.clamav.freshclam
org.postfix.master
org.xinetd.xinetd
com.openssh.sshd
com.apple.ppp.pptp
org.amavis.amavisd
edu.cmu.andrew.cyrus.master
203:/Users/admin root#
|
203:/Users/admin root# launchctl stop com.apple.syslogd
203:/Users/admin root#
|
- 設定ファイルを再読込させ,syslogdを起動する.
203:/Users/admin root# launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
203:/Users/admin root# launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
203:/Users/admin root# launchctl start com.apple.syslogd
203:/Users/admin root#
|
4.動作確認
- /var/log/system.logを参照することで,syslogが出力されているか,確認することが出来る.
203:/var/log root# tail -f system.log
Mar 26 00:40:17 xxx.xxx.xxx.xx [INSPECT] PP[01][out][101] TCP 192.168.0.]: 54286 > nnn.nnn.nn.nnn:80
(2007/03/26 00:40:48)
|
5.syslogのログファイルローテーション対応
- これまでの設定のままであると,syslogのログローテーションのタイミングで,ログが吐き出されない状態となる.
- ログファイルを確認してみる.
203:~ admin$ cd /var/log
203:/var/log admin$ ls -lat
total 212944
-rw-r--r-- 1 root wheel 58018649 Mar 26 11:40 alias.log
-rw-r----- 1 root admin 28868 Mar 26 11:38 lastlog
-rw-r--r-- 1 root admin 1440 Mar 26 11:38 wtmp
drwxr-xr-x 3 root wheel 102 Mar 26 10:10 ppp
drwxr-xr-x 38 root wheel 1292 Mar 26 10:10 .
-rw-r----- 1 clamav admin 7692 Mar 26 03:44 freshclam.log
-rw-r--r-- 1 root wheel 1820231 Mar 26 03:15 asl.log
-rw-r--r-- 1 root wheel 46591219 Mar 26 03:15 daily.out
-rw-r--r-- 1 root wheel 1132140 Mar 26 03:15 diskspacemonitor.log
-rw-r----- 1 root admin 0 Mar 26 03:15 system.log
-rw-r----- 1 root admin 739264 Mar 26 03:14 mailaccess.log
-rw-r----- 1 root admin 94392 Mar 26 03:08 mail.log
-rw-r----- 1 root admin 337415 Mar 26 00:17 secure.log
drwxr-xr-x 5 root wheel 170 Mar 25 18:37 cups
|
- ログローテーションが行われた3時15分から,ログが記録されていない.
- これは,/etc/dailyファイルで設定してあるsyslogのログローテーションが,kill -HUPによって行われているためで,その方法ではうまくいかない.
- よって,lanchctlに切り替える.
- /etc/dailyファイルを,以下のように記述する.
変更前
|
cd /var/log
for i in system.log; do
if [ -f "${i}" ]; then
printf %s " ${i}"
if [ -x /usr/bin/gzip ]; then gzext=".gz"; else gzext=""; fi
if [ -f "${i}.6${gzext}" ]; then mv -f "${i}.6${gzext}" "${i}.7${gzext}"; fi
if [ -f "${i}.5${gzext}" ]; then mv -f "${i}.5${gzext}" "${i}.6${gzext}"; fi
if [ -f "${i}.4${gzext}" ]; then mv -f "${i}.4${gzext}" "${i}.5${gzext}"; fi
if [ -f "${i}.3${gzext}" ]; then mv -f "${i}.3${gzext}" "${i}.4${gzext}"; fi
if [ -f "${i}.2${gzext}" ]; then mv -f "${i}.2${gzext}" "${i}.3${gzext}"; fi
if [ -f "${i}.1${gzext}" ]; then mv -f "${i}.1${gzext}" "${i}.2${gzext}"; fi
if [ -f "${i}.0${gzext}" ]; then mv -f "${i}.0${gzext}" "${i}.1${gzext}"; fi
if [ -f "${i}" ]; then
touch "${i}.$$" && chmod 640 "${i}.$$" && chown root:admin "${i}.$$"
mv -f "${i}" "${i}.0" && mv "${i}.$$" "${i}" && if [ -x /usr/bin/gzip ]; then
gzip -9 "${i}.0"; fi
fi
fi
done
if [ -f /var/run/syslog.pid ]; then kill -HUP $(cat /var/run/syslog.pid | head -1); fi
echo ""
|
変更後 |
cd /var/log
for i in system.log; do
if [ -f "${i}" ]; then
printf %s " ${i}"
if [ -x /usr/bin/gzip ]; then gzext=".gz"; else gzext=""; fi
if [ -f "${i}.6${gzext}" ]; then mv -f "${i}.6${gzext}" "${i}.7${gzext}"; fi
if [ -f "${i}.5${gzext}" ]; then mv -f "${i}.5${gzext}" "${i}.6${gzext}"; fi
if [ -f "${i}.4${gzext}" ]; then mv -f "${i}.4${gzext}" "${i}.5${gzext}"; fi
if [ -f "${i}.3${gzext}" ]; then mv -f "${i}.3${gzext}" "${i}.4${gzext}"; fi
if [ -f "${i}.2${gzext}" ]; then mv -f "${i}.2${gzext}" "${i}.3${gzext}"; fi
if [ -f "${i}.1${gzext}" ]; then mv -f "${i}.1${gzext}" "${i}.2${gzext}"; fi
if [ -f "${i}.0${gzext}" ]; then mv -f "${i}.0${gzext}" "${i}.1${gzext}"; fi
if [ -f "${i}" ]; then
touch "${i}.$$" && chmod 640 "${i}.$$" && chown root:admin "${i}.$$"
mv -f "${i}" "${i}.0" && mv "${i}.$$" "${i}" && if [ -x /usr/bin/gzip ]; then
gzip -9 "${i}.0"; fi
fi
fi
done
#if [ -f /var/run/syslog.pid ]; then kill -HUP $(cat /var/run/syslog.pid | head -1); fi
launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
launchctl stop com.apple.syslogd
launchctl start com.apple.syslogd
echo ""
|
203:/var/log root# /etc/daily
Removing scratch and junk files:
Removing scratch fax files
msgs: /var/msgs/bounds: No such file or directory
Backing up NetInfo data
Checking subsystem status:
disks:
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/disk0s7 26298048 10756996 15285052 41% /
/dev/disk0s3 31697596 8402460 23295136 27% /disk1
/dev/disk0s5 19761844 4837916 14923928 24% /disk2
Last dump(s) done (Dump '>' file systems):
mail:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
340A051D201 2871 Sat Mar 24 04:02:29 MAILER-DAEMON
(connect to rc.yahoo.akadns.net[66.94.234.13]: Operation timed out)
gyehfltuef3921332@mail.yahoo.com.hk
EA3FA51D20D 3708 Sat Mar 24 04:03:11 MAILER-DAEMON
(connect to rc.yahoo.akadns.net[66.94.234.13]: Operation timed out)
gyehfltuef3921332@mail.yahoo.com.hk
-- 6 Kbytes in 2 Requests.
network:
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
lo0 16384 <Link#1> 5866255 0 5866255 0 0
lo0 16384 127 localhost 5866255 - 5866255 - -
lo0 16384 localhost ::1 5866255 - 5866255 - -
lo0 16384 localhost fe80::1 5866255 - 5866255 - -
gif0* 1280 <Link#2> 0 0 0 0 0
stf0* 1280 <Link#3> 0 0 0 0 0
en0 1500 <Link#4> 00:0d:93:7b:5e:fe 3168330 7 2558899 0 43028
en0 1500 localhost fe80::20d:937b:ff 3168330 - 2558899 - -
en0 1500 203.141.135.1 243.241.153.20. 3168330 - 2558899 - -
fw1 2030 <Link#5> 00:93:93:ff:d0:7b:7f:5e 0 0 0 0 0
ruptime: no hosts in /var/rwho.
Rotating log files: system.log
203:/var/log root#
|
- loggerコマンドを使い,syslogにメッセージを書き出すして,ロギングされるか,テストしてみる.
203:/var/log root# /usr/bin/logger syslog test
203:/var/log root# tail -n 1 /var/log/system.log
Mar 26 12:22:39 203 server: syslog test
203:/var/log root#
|
- ログローテーション後も,正しくログが記録されていることが確認できた