YAMAHAルータのsyslogを書き出す

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 で書き換えてもいいけどエディタの方が楽でしょ。

を最後の方(一番最後じゃない、適当な場所、<dict>〜</dict>が一塊だから、わかるでしょ)に加筆する。

加筆したcom.apple.syslogd.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

こいつを本来の場所のやつに上書きする

$ 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 を見ると

となっていた。こいつのバックアップを保存しておいて、最後に1行加筆した

この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システムログ機能の構成)に移動したとのことで、この設定ファイルを見ると

となっていて、どのように加筆したらいいのかわからん。マニュアルは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 の最後の行は;

ですね

ヤマハルーター(RTXシリーズ)のログをMacに送る

【RTX810】OSX10.10 YosemiteでSyslogを外部から取得する【ヤマハ】
を参考にしました。