Endeavor NP15にUbuntu 20.04.1 LTSをインストールし、さっそくSyslogサーバーを構築してみました。
Raspberry PiでSyslogサーバーを構築したときより、かなりすんなり構築できました。
そして管理しやすいようにログの出力場所も設定してみました。
Syslogサーバー構築
環境
- Endeavor NP15(CPU:Intel Atom D525、RAM:4GB)
- Ubuntu 20.04.1 LTS
- LANのIPは固定化設定済み
- 自宅で使用しているLAN内のルーター機器(RT-AX56U、WHR-300HP2、WZR-HP-G302H)からのログを保存する
作業はroot権限で行いました。
rsyslogのインストール
ログを収集するためのツールとして、rsyslogを使います。
Ubuntu 20.04.1 LTSには初めからインストールされていました。
| 1 | # apt install -y rsyslog<br>パッケージリストを読み込んでいます... 完了<br>依存関係ツリーを作成しています<br>状態情報を読み取っています... 完了<br>rsyslog はすでに最新バージョン (8.2001.0-1ubuntu1.1) です。<br>以下のパッケージが自動でインストールされましたが、もう必要とされていません:<br>libfprint-2-tod1 libllvm10 linux-headers-5.4.0-59<br>linux-headers-5.4.0-59-generic linux-image-5.4.0-59-generic<br>linux-modules-5.4.0-59-generic linux-modules-extra-5.4.0-59-generic<br>これを削除するには 'apt autoremove' を利用してください。<br>アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。 | 
インストールされていたバージョンは以下のとおり。
| 1 2 3 | # rsyslogd -v rsyslogd  8.2001.0 (aka 2020.01) compiled with: ~省略~ | 
/etc/rsyslog.confの編集
ログ受信の有効化
rsyslogではデフォルトでは外部からのログ送信を受信しない設定になっています。
設定を変更し、外部からのログを受信できるように/etc/rsyslog.confを編集します。
| 1 | vi /etc/rsyslog.conf | 
17~18行目がコメントアウトされているので、#を削除して上書き保存します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # /etc/rsyslog.conf configuration file for rsyslog # # For more information install rsyslog-doc and see # /usr/share/doc/rsyslog-doc/html/configuration/index.html # # Default logging rules can be found in /etc/rsyslog.d/50-default.conf ################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging #module(load="immark")  # provides --MARK-- message capability # provides UDP syslog reception module(load="imudp")          ←行頭の#を削除 input(type="imudp" port="514")     ←行頭の#を削除 | 
そして、rsyslogを再起動すると、外部からポート番号514/UDPでログが受信可能となります。
| 1 | systemctl restart rsyslog | 
ログの保存場所は、/var/log/syslogです。
出力先の変更
デフォルトでは、/var/log/syslogにログが出力されます。
この場所以外にログを出力させるためには、rsyslogの設定ファイルの編集が必要です。
/etc/rsyslog.confにログの出力先を記述してもよいですが、/etc/rsyslog.d/50-default.confを編集する方法を書いていきます。
/etc/rsyslog.confにはrsyslogの設定が記述されていますが、/etc/rsyslog.d/50-default.confの設定も読み込むと記述されています。
デフォルトのsyslog出力先である、/var/log/syslogはこのファイルで設定されています。
9行目の”*.*;auth,authpriv.none -/var/log/syslog”を任意の場所に変更します。
↓の例では、/var/log/syslog/syslogに出力するように設定しています。
※/var/log/syslog/syslogを作成するために、既存の/var/log/syslogを削除する必要があるので注意。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | vi /etc/rsyslog.d/50-default.conf #  Default rules for rsyslog. # #                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files.  Log by facility. # auth,authpriv.*                 /var/log/auth.log *.*;auth,authpriv.none         -/var/log/syslog/syslog ←ここに出力先を書く #cron.*                         /var/log/cron.log #daemon.*                       -/var/log/daemon.log kern.*                          -/var/log/kern.log #lpr.*                          -/var/log/lpr.log mail.*                          -/var/log/mail.log #user.*                         -/var/log/user.log ~省略~ | 
rsyslogを再起動すると、設定が読み込まれログの出力先が変わります。
| 1 | systemctl restart rsyslog | 
ホスト別に出力振り分け
ログを任意の出力先に保存するという目的は達成されました。
ログを見てみると、syslogを送信しているすべてのホストからのログがごちゃ混ぜになっていました。
| 1 2 3 4 5 6 | cat /var/log/syslog/syslog | awk '{print $4}' | sort -u 192.168.1.250 192.168.1.253 NP15 RT-AX56U-BDB16BB-C ↑4つのホストのログが/var/log/syslog/syslogに記録されている。 | 
これはこれで問題はありませんが、個人的には見辛いので、ホスト毎にログの出力先を変更してみました。
以下のページを参考にしました。
/etc/rsyslog.confに追記します。
| 1 2 3 | $template logFileName,"/var/log/syslog/%hostname%/message_%hostname%_%$year%%$month%%$day%.log" *.info;mail.none;authpriv.none;cron.none                -?logFileName | 
参考にしたページでは%hostname%ではなく、%fromhost%を使用していましたが、%fromhost%だと、ゲートウェイとなるルーターが”_gateway”という名前になり、若干面倒な名前のため%hostname%としました。
これで、/var/log/syslog/ホスト名/message_ホスト名_年月日.logというファイルにログを出力するようになります。
| 1 2 3 4 5 6 7 8 9 | ll /var/log/syslog/ 合計 1440 drwxr-xr-x  7 syslog syslog    4096  1月  8 15:00 ./ drwxrwxr-x 16 root   syslog    4096  1月 10 00:00 ../ drwxr-xr-x  2 syslog syslog    4096  1月 10 02:58 192.168.1.250/ drwxr-xr-x  2 syslog syslog    4096  1月 10 03:03 192.168.1.253/ drwxr-xr-x  2 syslog syslog    4096  1月 10 00:00 NP15/ drwxr-xr-x  2 syslog syslog    4096  1月 10 00:00 RT-AX56U-BDB16BB-C/ drwxr-xr-x  2 syslog syslog    4096  1月  8 14:04 _gateway/    ←%fromhost%を使うとこのディレクトリ名になる | 
ここで注意点が1つあります。
/etc/rsyslog.d/50-default.confにもログの出力が記述されています。そのため、デフォルトであれば/var/log/syslogにもログが書き込まれ続けます。
つまり、保存場所は異なるものの同じログを二重で保存してしまう状態になります。
そのため、/etc/rsyslog.d/50-default.confの9行目をコメントアウトし、/etc/rsyslog.confに追記した設定が有効になるようにしました。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cat /etc/rsyslog.d/50-default.conf #  Default rules for rsyslog. # #                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files.  Log by facility. # auth,authpriv.*                 /var/log/auth.log #*.*;auth,authpriv.none         -/var/log/syslog/syslog  ←先頭に#を付けてコメントアウト #cron.*                         /var/log/cron.log #daemon.*                       -/var/log/daemon.log kern.*                          -/var/log/kern.log #lpr.*                          -/var/log/lpr.log mail.*                          -/var/log/mail.log #user.*                         -/var/log/user.log | 
編集後にrsyslogを再起動すると、設定が読み込まれログの出力先が変わります。
| 1 | systemctl restart rsyslog | 
これでホスト毎に任意のファイル名でログを受信し保存するようにできました。
ゲートウェイとなっているRT-AX56Uからのログの量が多いので、ログローテーションやログ出力のレベルやファシリティについて勉強していこうと思います。
ディレクティブの変更
syslogが受信されないトラブルが発生しました。
詳細は別記事で説明しますが、原因は/etc/rsyslog.confの設定が適切にされていないことでしたので、設定を書いていきます。
修正前
| 1 2 | $PrivDropToUser sylog $PrivDropToGroup syslog | 
修正後
| 1 2 | $PrivDropToUser adm $PrivDropToGroup adm | 
こうすることで、syslogが受信され続けます。
ルーターの設定
サーバー側の設定は完了したので、最後にログの送信元である各ネットワーク機器の設定を変更します。
ASUS RT-AX56U
インターネットへのゲートウェイとなっているルーターで、一番ログの量が多いです。
設定箇所は、[システムログ]→[全般ログ]のリモートログサーバーです。
ここにSyslogサーバーのIPを入力し、適用をクリックします。
WHR-300HP2とWZR-HP-G302H
Wi-Fi中継器兼イーサーネットコンバータとして使っているWHR-300HP2と、ハブとして使っているWZR-HP-G302Hはどちらもバッファロー製です。
そのため、WebUIがほぼ同じで設定画面も同じです。
[管理設定]→[ログ]のsyslogサーバーにSyslogサーバーのIPを入力し、設定をクリックします。
 
  
  
  
  





コメント