AirMacのログをsyslogdで記録する
Time Capsuleのネットワークに接続して、AirMac Expressでネットワークを拡張で運用している。導入した時から、AirMac Expressが不規則にネットワークから切断する。AirMac Expressを再起動すれば、何の問題もなく繋がるのだけど、毎日または数日ごとに繰り返す再起動には疲れてきた...。こうなったら、AirMacのログを調べてみようと思い立った。
ところが、AirMac Expressを再起動すると、それまで記録されていたログは奇麗さっぱり削除されてしまう...。そこで、AirMac Expressのログを残すために、AirMacユーティリティの「Syslog 書き込みアドレス:」を設定してみた。忘れないようにメモ。
AirMac ユーティリティ 5.6.1のインストール
- Syslogの設定には、AirMac ユーティリティ 5.6.1が必要である。
- OSX 10.6環境には、AirMac ユーティリティ 5.6.1がインストールされているので、それをコピーするのが手っ取り早い。
しかし、OSX 10.6環境が手元にない場合...
- その場合、特殊な方法で旧バージョンのAirMac ユーティリティ 5.6.1をインストールする必要がある。
ダウンロードするもの
以下のファイルをダウンロードフォルダにダウンロードしておく。
- Mac 用の AirMac ユーティリティ 5.6.1
- Installing the Old AirPort Utility (Version 5.6) on Mountain Lion | frank.is
- extractor.zip(インストーラーの中からAirMac ユーティリティ 5.6.1をデスクトップに取り出すAutomatorワークフロー)
TimeCapsuleの設定
- AirMac ユーティリティ 5.6.1を起動する。
- バージョンアップしますか?って聞かれるけど、決してバージョンアップしない。
- Time Capsuleをダブルクリックして、詳細 >> ログと統計情報 を開く。
- 「Syslog 書き込み先アドレス:」にMacBookのアドレス「10.0.1.100」を入力した。
- システム環境設定 >> ネットワーク で確認した。
- 「アップデート」ボタンを押して、Time Capsuleの設定を変更した。
以下の作業前に、TimeMachineなどでバックアップしておくこと、必須!(システムの設定を弄るので)
com.apple.syslogd.plistの設定
- ところで、OSX 10.8 Mountain Lionでは、com.apple.syslogd.plistはバイナリ化されてしまった...。
- plutilコマンドでXMLに変換しても、コメントアウトされた NetworkListener の項目は存在しない。
- ならば、バイナリとXMLの変換とか、手作業による修正など非常に面倒なので、defaultsコマンドで一気に修正してしまうのだ。
$ sudo defaults write /System/Library/LaunchDaemons/com.apple.syslogd.plist Sockets -dict-add NetworkListener "{ SockServiceName = syslog; SockType = dgram; }"
- NetworkListenerは、plistルート直下のキーではなく、Socketsキー以下なので、仕方なく上記のような書き方になってしまった。
予備知識
- 一方、OSX 10.6 Snow Leopardまでは、com.apple.syslogd.plistはユーザーが理解可能なXMLファイルであった。こんな感じの内容。
<?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>OnDemand</key> <false/> <key>HopefullyExitsLast</key> <true/> <key>EnableTransactions</key> <true/> <key>ProgramArguments</key> <array> <!-- Un-comment the following lines to run syslogd with a sandbox profile. Sandbox profiles restrict processes from performing unauthorized operations; so it may be necessary to update the profile (/usr/share/sandbox/syslogd.sb) if any changes are made to the syslog configuration (/etc/syslog.conf). --> <!-- <string>/usr/bin/sandbox-exec</string> <string>-f</string> <string>/usr/share/sandbox/syslogd.sb</string> --> <string>/usr/sbin/syslogd</string> </array> <key>MachServices</key> <dict> <key>com.apple.system.logger</key> <true/> </dict> <key>Sockets</key> <dict> <key>AppleSystemLogger</key> <dict> <key>SockPathName</key> <string>/var/run/asl_input</string> <key>SockPathMode</key> <integer>438</integer> </dict> <key>BSDSystemLogger</key> <dict> <key>SockPathName</key> <string>/var/run/syslog</string> <key>SockType</key> <string>dgram</string> <key>SockPathMode</key> <integer>438</integer> </dict> <!-- Un-comment the following lines to enable the network syslog protocol listener. --> <!-- <key>NetworkListener</key> <dict> <key>SockServiceName</key> <string>syslog</string> <key>SockType</key> <string>dgram</string> </dict> --> </dict> </dict> </plist>
syslogdの再起動
コンソールで確認
- syslogの内容は、アプリケーション >> ユーティリティ >> コンソール.app で確認できる。
- ファイル項目の最初にあるsystem.logを選択すると、AirMacのログが確認できるはず。
- 但し、設定後まだ何もログが出力されないと確認できない。
Oct 17 14:42:04 timecapsule admin: Connection accepted from [::ffff:10.0.1.100]:53978. Oct 17 14:42:10 timecapsule admin: Connection accepted from [::ffff:10.0.1.100]:54018. Oct 17 14:42:10 timecapsule admin: Connection accepted from [::ffff:10.0.1.100]:54019.
できた、できた!
ログファイルを分ける
- AirMacのログがsyslogに記録されるようになったのだが、syslogには本来のシステムログも記録されている。
- AirMacのログだけを追跡しようとした場合、あまり見やすい状態とは言えない。
- コンソールで検索するのも良さそうだが、ここでは別途 /var/log/airmac.log というファイルに出力してみる。
- /etc/syslog.confの末尾に「local0.* /var/log/airmac.log」を追記する。
$ sudo sh -c "echo 'local0.* /var/log/airmac.log' >> /etc/syslog.conf"
- 追記が完了すると、/etc/syslog.confはこのような状態になっているはず。
$ cat /etc/syslog.conf # Note that flat file logs are now configured in /etc/asl.conf install.* @127.0.0.1:32376 local0.* /var/log/airmac.log
- できれば、エディタで/etc/syslog.confを開いて、タブ位置まで整形しておいた方が好ましい。(今後のために)
- 設定を反映させるため、MacBookの再起動か、または以下の launchctl コマンドを実行する。
$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist $ sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
予備知識1
- syslog.confのフォーマットは以下のようになっている。
ファシリティ(メッセージの種類) | . | プライオリティ(重要度) | アクション | |
---|---|---|---|---|
local0 | . | * | /var/log/airmac.log |
- AirMacのログは、local0という種類になっている。
- そして、メッセージには重要度が設定されている。
プライオリティ | 意味 |
---|---|
emerg | システムダウンなどの非常に危険な状態 |
alert | システム破損などの緊急事態発生 |
crit | ハードウェアの傷害などの危険状態 |
err | 一般的なエラーメッセージ |
warning | 警告メッセージ |
notice | 通知メッセージ |
info | 一般的な情報 |
debug | デバッグメッセージ |
none | 出力しない |
* | すべてのメッセージ |
- 参考ページ:設定ファイル(/etc/syslog.conf)の詳細(感謝です!)
予備知識2
## # configuration file for syslogd and aslmanager ## # redirect com.apple.message.domain to /var/log/DiagnosticMessages ? [T com.apple.message.domain] store_dir /var/log/DiagnosticMessages # redirect com.apple.performance* messages to /var/log/performance ? [A= Facility com.apple.performance] store_dir /var/log/performance # redirect com.apple.eventmonitor* messages to /var/log/eventmonitor ? [A= Facility com.apple.eventmonitor] store_dir /var/log/eventmonitor # authpriv messages are root/admin readable ? [= Facility authpriv] access 0 80 # remoteauth critical, alert, and emergency messages are root/admin readable ? [= Facility remoteauth] [<= Level critical] access 0 80 # broadcast emergency messages ? [= Level emergency] broadcast # save kernel [PID 0] and launchd [PID 1] messages ? [<= PID 1] store # ignore "internal" facility ? [= Facility internal] ignore # save everything from emergency to notice ? [<= Level notice] store # Flat file configurations formerly in syslog.conf # install messages get saved only in install.log ? [= Facility install] file /var/log/install.log format=bsd ? [= Facility install] ignore # kernel messages get saved in system.log ? [= Sender kernel] file /var/log/system.log mode=0600 gid=80 format=bsd # emergency - notice get saved in system.log ? [<= Level notice] file /var/log/system.log # Facility auth to level info gets saved in system.log ? [= Facility auth] [<= Level info] file /var/log/system.log # Facility authpriv gets saved in system.log ? [= Facility authpriv] file /var/log/system.log # Facility mail gets saved in mail.log ? [= Facility mail] file /var/log/mail.log mode=0644 format=bsd # Facility com.apple.alf.logging gets saved in appfirewall.log ? [= Facility com.apple.alf.logging] file /var/log/appfirewall.log
- 見てのとおり、OSX 10.8 mountain Lionでは、むしろ/etc/asl.confの設定が主流だったのだ。
- システムデフォルトの設定は、ほとんどがasl.confで設定されている。
- 参考ページ:(素晴らしい情報に感謝です!)
ログローテーション
- /var/log/airmac.logに記録されるようになったは良いが、今後このログファイルはどうなるのだろうか?
- AirMacに接続している限り、syslogdは刻々と記録し続ける。
- すると、いずれairmac.logは、巨大なファイルへと成長するはず。
- 巨大なファイルに繰り返し追記するのは、無駄が多い...。
- そうならないために、/var/system.logのようなファイルなどは、ログローテーションという仕組みで管理されている。
- /var/system.logがある一定のサイズになったら、/var/system.log.0のように番号管理された別ファイルとなり、/var/system.log.0.bz2として圧縮保存される。
- 心機一転、/var/system.logは0バイトの新規ファイルとして作り直され、再び追記されていく。
- /var/system.log.0.bz2から/var/system.log.7.bz2まで番号管理され、それより古いファイルは自動的に削除される。
- OSXには以上のようなログローテーションの仕組みがあり、その設定は/etc/newsyslog.confで行うのだ。
# configuration file for newsyslog # $FreeBSD: /repoman/r/ncvs/src/etc/newsyslog.conf,v 1.50 2005/03/02 00:40:55 brooks Exp $ # # Entries which do not specify the '/pid_file' field will cause the # syslogd process to be signalled when that log file is rotated. This # action is only appropriate for log files which are written to by the # syslogd process (ie, files listed in /etc/syslog.conf). If there # is no process which needs to be signalled when a given log file is # rotated, then the entry for that file should include the 'N' flag. # # The 'flags' field is one or more of the letters: BCGJNUWZ or a '-'. # # Note: some sites will want to select more restrictive protections than the # defaults. In particular, it may be desirable to switch many of the 644 # entries to 640 or 600. For example, some sites will consider the # contents of maillog, messages, and lpd-errs to be confidential. In the # future, these defaults may change to more conservative ones. # # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/appfirewall.log 640 5 1000 * J /var/log/ftp.log 640 5 1000 * J /var/log/hwmond.log 640 5 1000 * J /var/log/install.log 640 5 1000 * J /var/log/ipfw.log 640 5 1000 * J /var/log/lookupd.log 640 5 1000 * J /var/log/lpr.log 640 5 1000 * J /var/log/mail.log 640 5 1000 * J /var/log/ppp.log 640 5 1000 * J /var/log/secure.log 640 5 1000 * J /var/log/system.log 640 7 * @T00 J /var/log/wtmp 644 3 * @01T05 B
- なるほど、設定項目の詳細は分からないが、/var/log/airmac.logの行を以下のように追記してみた。
/var/log/airmac.log 640 3 10 * J
- たぶん、10KBごとにログローテションして、番号管理は0〜3まで。
- 10KBとしたのは、ローテーションの効果を素早く確認したいため。
この設定でしばらく使ってみることにする。
- 参考ページ:(素晴らしい情報に感謝です!)
参考ページ
以下のページがきっかけとなり、たいへん参考になりました。感謝です!