YAMAHAルータ(RTX1200とか)のsyslogは、本体に1000行位しか保存できないので、過去のログはなくなっちゃう。そのため別の固定ipaddressを割り当てた外部のホスト(パソコンなりサーバ)に保存するのがいい。
GUIでは運用サポート機能の保守に「SYSLOGの管理」があるからここで設定する。
ホストは最大4つ登録でき、そのip address をスペースで区切ればいい。2つ登録した。DEBUGとNOTICEを記録することにした。
configファイルを見ると
syslog host xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
syslog notice on
syslog info off
syslog debug on
と書かれてあるのがわかる。
configファイルには
nat descriptor log on も書いておく。こっちはGUIで書き込めないからConfigファイルにエディタで書き込む。
syslog facility local[数字]
も書くこというのがネットではよくあるけど、この行を書かないとレベルを示す[数字]の部分は 1 となるので書かなくてもいい。この数字はsyslogのファシリティと言ってログメッセージの種類を示す。1 はuser-level messagesだそうです。
受け取るホスト Mac の場合の設定
suになって操作します。
$ cd /etc でetcに行って
/etc/syslog.conf を書き換える。
/etc/syslog.conf は644だから777に権限を変えて
# for RTX1200 Syslog
local1.* /var/log/rtx1200
の2行をエディタで加筆して644に戻す。
/etc に rtx1200 と言うファイルを作っておく
$ vi rtx1200
>:wq
オーナーは admin 、権限は644になるはず。
/System/Library/LaunchDaemons/com.apple.syslogd.plist のコピーをエラーになったときに備えて作っておく
$ cd /System/Library/LaunchDaemons
で移動して
$ cp com.apple.syslogd.plist com.apple.syslogd.plist20191025
とコピーを作っておく。これを改変するからコピーを別の場所、デスクトップに作ってこれを改変することにする。~はユーザ名ね。
$ cp com.apple.syslogd.plist /Users/~/Desktop/com.apple.syslogd.plist
$ cd /Users/~/Desktop
とデスクトップに移動する。
権限が644 だから777にしておき、バイナリーファイルだからテキストに変換して加筆する。
$ plutil -convert xml1 com.apple.syslogd.plist
vi で書き換えてもいいけどエディタの方が楽でしょ。
<key>NetworkListener</key>
<dict>
<key>SockServiceName</key>
<string>syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
を最後の方(一番最後じゃない、適当な場所、<dict>〜</dict>が一塊だから、わかるでしょ)に加筆する。
加筆したcom.apple.syslogd.plist。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnableTransactions</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>ASL_DISABLE</key>
<string>1</string>
</dict>
<key>HopefullyExitsLast</key>
<true/>
<key>JetsamProperties</key>
<dict>
<key>JetsamMemoryLimit</key>
<integer>300</integer>
<key>JetsamPriority</key>
<integer>-49</integer>
</dict>
<key>Label</key>
<string>com.apple.syslogd</string>
<key>MachServices</key>
<dict>
<key>com.apple.system.logger</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
</dict>
<key>NetworkListener</key>
<dict>
<key>SockServiceName</key>
<string>syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/syslogd</string>
</array>
<key>Sockets</key>
<dict>
<key>AppleSystemLogger</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer>
<key>SockPathName</key>
<string>/var/run/asl_input</string>
</dict>
<key>BSDSystemLogger</key>
<dict>
<key>SockPathMode</key>
<integer>438</integer>
<key>SockPathName</key>
<string>/var/run/syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
<key>NetworkListener</key>
<dict>
<key>SockServiceName</key>
<string>syslog</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
</dict>
</plist>
文法に誤りがないかをチェックする
$ plutil -lint com.apple.syslogd.plist
文字列をコピペしたとき、空白部分に何か文字が入っちゃうことがあるから、文の頭、と尻に見えないけど何かあるとエラーになる。
Encountered unexpected character ã on line 33 while looking for open tag
というエラーは、文の頭に見えないけれど、 ã があることで、文頭の空白を tab で置換して位置を揃えればいい。
/System/Library/LaunchDaemons/com.apple.syslogd.plist: OK
だったら、これをバイナリに戻す。
$ plutil -convert binary1 com.apple.syslogd.plist
plutil -convert binary1 com.apple.syslogd.plist
こいつを本来の場所のやつに上書きする
$ cp com.apple.syslogd.plist /System/Library/LaunchDaemon/com.apple.syslogd.plist
オーナーがadmin、権限が644なのを確認する。
停止させて再読込みさせる
$ launchctl unload /System/Library/LaunchDaemon/com.apple.syslogd.plist
$ launchctl load /System/Library/LaunchDaemon/com.apple.syslogd.plist
これで、/var/log にrtx1200のsyslogが飛んできて保存されるはず。
ところが、ならない。
RTX1200の設定GUIのページにログインして 管理者のページの 保守 の 設定の管理
の コマンドの入力 の 実行ボタン をクリックし、
出てきたウインドウに
syslog host [送付先のMacのip address]
を入力し、実行 ボタンをクリックする。
続けて実行 ボタンをクリックすると、またコマンド入力ウインドウになるから
syslog facility local1
と入力し、実行 ボタンをクリックする。
ターミナルでMac にログインして
$ cat /var/log/rtx1200
とすれば、ログが記録されているのわかる。Macでは ユーティリティー の コンソール.app を起動すると、左のコラムに rtx1200 があるからこれを見れば、RTx1200 のログが記録されているのがわかる。
RTX1200 を起動するたびに(そんなことはほとんどないけど)このコマンドを実行しないといけないのだろうか?
syslog は一定の期間毎に圧縮ファイルとして保存したい。loglotate を設定する必要があるようだ。ないとどのくらいファイルがでかくなるんだろね。
ど素人なもので、まだわからないことがいっぱい。
[ 2020.4.10 追記 ]
大問題がある。ログをさっと見たときは記録されているからいいと思ったわけだが:
Apr 10 14:03:17 [INSPECT] LAN2[out][101099] UDP 192.168.0.25]: 53580 > xxx.xxx.xxx.xxx:443 (2020/04/10 14:02:30)
Apr 10 14:03:17 [INSPECT] LAN2[out][101081] UDP 192.168.0.]: 10201 > xxx.xxx.xxx.xxx:53 (2020/04/10 14:03:10)
なんて記録になっている.
192.168.0.25] は192.168.0.251~192.168.0.253 のどれか
192.168.0.]は192.168.0.1〜192.168.0.9 のどれかのことで、ip address の最後の部分が正しく記録されてない。
この記録のときの 192.168.0.25] は 192.168.0.250 なのだ。これは受け取るMacの機器が古い、OSが古いということではないらしい。原因不明だ。
mac の場合 loglotate ではなく newsyslog で行うらしい。そこで /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
となっていた。こいつのバックアップを保存しておいて、最後に1行加筆した
# 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/rtx1200 640 10 5000 * J
このnewsyslog.conf の意味はここにある。
ログは「/var/log/」に蓄積される。
このログファイルという物は、そのままにしておけば溜まる一方でディスク容量を圧迫する。
これを回避する為にログローテーション(一定時間毎、ファイルの大きさが一定になったら、圧縮し別ファイルにする)という手段を行う。
newsyslog は、指定したファイルを特定のタイミング(時間)または指定した容量を超えたときにログを切り詰めて指定した圧縮形式で、指定した数までバックアップを残す。
まずは現在の newsyslog の設定ファイルである newsyslog.conf を確認すると;
$cat /etc/newsyslog.conf
次のような情報がでてくる。
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/appfirewall.log 640 5 1000 * J
/var/log/system.log 640 7 * @T00 J
/var/log/wtmp 644 3 * @01T05 B
このとき表示されているのは左から
logfilename:ログローテーションする対象のファイル
[owner:group]:所有者とグループ
mode:アクセス権
640なら-rw-r—–
count:バックアップ最大数
0からのスタートなので実質6個
size:切り出し開始サイズ
1000なら1000kbの意味で、ログファイルが1000kbを超えたらローテーションが開始される
when:切り出し開始時間
*ならサイズに合わせる。
@から始まる物は
@[[[[[cc]yy]mm]dd][T[hh[mm[ss]]]]] (制限付きISO8601形式)
cc 西暦上2桁
yy 西暦下2桁
mm 月
dd 日
hh 時
mm 分
ss 秒
@T00なら 毎日0時に処理を行ない、@01T05 なら、毎月1日の5時、@1001T0510 なら毎年10月1日5時10分に処理を行なう
$ から始まる物は
$[Dhh],$[Ww[Dhh]],$[Mdd[Dhh]]
D 毎日
W 毎週
M 毎月
hh 時間(0〜23)
w 曜日(0:日曜日〜6:土曜日)
dd 日(1〜31)
L 月の最後の日
$M1D0 なら毎月1日の0時、$W0D0 なら毎週日曜0時
数字だけの物
時間指定
168 なら168時間で1週間、332 で2週間
flags:圧縮タイプ
Zはgz圧縮、Jはbz圧縮、Bは無圧縮
[/pid_file]:該当するデーモンのpidファイル
httpdなら /var/run/httpd.pid
[sig_num]:該当するデーモンのシグナル番号
「/var/log/apache2/」の中の「access.log」を1000kb以上溜まったらローテーションし、最大10個までgz圧縮残しておきたいたいという場合は次のような記述になる。
/var/log/apache2/access.log 640 9 1000 * Z /var/run/httpd.pid 30
設定を保存したら root権限で newsyslog コマンドを実行する。
# newsyslog restart
ということの様です。
ところが、OS 10.9から、system.logのローテーション制御が/etc/newsyslog.confから/etc/asl.conf(system.logへの書き込みを行うAppleシステムログ機能の構成)に移動したとのことで、この設定ファイルを見ると
##
# 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] [<= Level info] file /var/log/mail.log mode=0644 uid=27 gid=27 gid=6 format=bsd
# Facility com.apple.alf.logging gets saved in appfirewall.log
? [= Facility com.apple.alf.logging] file /var/log/appfirewall.log
# Facility freshclam gets saved in freshclam.log
? [= Facility freshclam] [<= Level warning] file /Library/Logs/Mail/freshclam.log mode=0644 uid=82 gid=80 format=bsd
# Facility clamd gets saved in clamav.log
? [= Facility clamd] [<= Level warning] file /Library/Logs/Mail/clamav.log mode=0644 uid=83 gid=80 format=bsd
# Mail access log facility
? [= Facility dovecot] [<= Level info] file /Library/Logs/Mail/mailaccess.log mode=0640 uid=214 gid=6 format=bsd
# redirect crl facility to /var/log/xscertd-crls
? [A= Facility com.apple.xscertd.crl] store_dir /var/log/xscertd-crls max_store_size 0 store_ttl 0 archive 0
となっていて、どのように加筆したらいいのかわからん。マニュアルはhttp://www.manpagez.com/man/5/asl.conf/にあるが、読んでられないので、ここまで。飛ばす先の中古macは10.8だったから必要なかった。
rtx1200が5MB超えたらどうなるか見てみる。
翌日見たら
-rw-r—– 1 root admin 1245176 10 31 07:58 rtx1200
-rw-r—– 1 root admin 315990 10 30 18:30 rtx1200.0.bz2
となっていたから、ローテーションできている。しかし、このペースだと1日5MB のデータになっちゃって10ケのバックアップだと10日分くらいしかない。count を30 としておく。5MBが圧縮で320kBになるから30ケになっても10 MBだからHDを圧迫することはない
/etc/newsyslog.conf の最後の行は;
# 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/rtx1200 640 30 5000 * J
ですね
ヤマハルーター(RTXシリーズ)のログをMacに送る
【RTX810】OSX10.10 YosemiteでSyslogを外部から取得する【ヤマハ】
を参考にしました。