ソフトな忘却力(13) ラズパイsyslog、ファイル振り分け、UDPの許可

Joseph Halfmoon

困った時の syslog 頼み。Raspberry Pi OSを動かしていて何かトラブったときに見るのが syslog です。運が良ければ?問題の原因が分かります。そうして頼ってきた割にラズパイのsyslogの事はちゃんと理解していなかったことが今回発覚。「ついでに」ファイルの振り分けを追加し、リモートからのUDPでのログにも対応とな。

ずっと長い事、ラズパイの syslog は syslogというプログラムが動いているのだと思ってました。だって syslog を苦し紛れに見る時はいつも

$ tail -10 /var/log/syslog

てな感じですもん。そこで、その設定を調べるべく

/etc/syslog.conf

を見たらば、そんなファイル無いよ、と言われてしまいました。およよ、この頃(というかとっくの昔)のLinuxでは、古くからある syslogではなくて、も少し機能が多いプログラムが動いているのが普通みたい。手元の Raspberry Pi OS(Raspbian OS)機では

rsyslog

というものが動作しとりました。なお、これを確認した Raspberry Pi 3 model B+機のOSは以下です。

Raspbian GNU/Linux 10 (buster)
Linux Pi3 5.10.63-v7+ #1457 SMP Tue Sep 28 11:25:31 BST 2021 armv7l GNU/Linux
参考URL

rsyslogの設定全般については、「さくらのナレッジ」様の以下のページにお世話になりました。

多機能なログ管理システム「rsyslog」の基本的な設定

また、ネットワーク上の他のデバイスから syslog へのログ出力の設定については、”zaki work log”様の以下のページを参考にさせていただきました。

rsyslogでリモートからのログ出力を受け付ける設定とloggerコマンドでの確認

syslog に追加したいこと

Raspberry Pi 3 model B+(以下Pi3機と称します) がMQTTやらNode-REDやらの「サーバ」として動作しています。この際、マイコン・デバイス共が、立ち上がったり、停止したり、何かエラーが発生したりといったログを、Pi3機に送って記録したら便利じゃね、というのがやりたいことです。そのときに

  • Pi3機の syslog を grepで探すのは骨が折れる?ので「本件専用」logファイルに振り分けしたい
  • ネットワーク経由でLOGしたい

です。見ればカーネルとか、mailとかいろいろ規定の「ファシリティ」というものでファイルを振り分けたりしているようです。その中にlocal0からlocal7などというものもあり、これはテキトーに使っていいのかなあ?という感じです。とりあえず、

デバイス共の報告してくるLOGは、local7 扱いにして振り分けよう

と考えました。また、ネットワーク経由でのLOGも、経路はいろいろできるみたいですが、昔からある定番、投げっぱなしの

UDP

で十分じゃないか、と。

/etc/rsyslog.conf の編集

confファイルのオリジナルのバックアップをとった後、rsyslog.confの設定を変更しました(勿論、sudo必須。)

まず、UDPの通信受付は以下のようにコメントアウトされていたので、コメント文字を削除すれば良いようです。

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

次に、ファイルへの振り分けですが、local0~local7については振り分けルールは無かったので、以下のような1行を追加いたしました。

local7.* -/var/log/local7.log

これで、local7.err とか、local7.info とかの “ファシリティ.プライオリティ” をつけてのPi3機のUDP ポート514へのLOG報告が、/var/log/local7.log に書き込まれる筈。

rsyslogのリスタート

つい浮かれて sudo もせず、再起動してしまいました。

$ systemctl restart rsyslog

ちゃんとポップアップウインドウが開いてパスワード入力できたのね。そんなこも知らんかったです。

動作テスト

まず Pi3 機の上でLOGを ファシリティ local7 に送ってみます。

$ logger -p local7.info TEST-Message-002

次に、報告する側の「ネットワーク」デバイスとして、Raspberry Pi 4機上からネットワーク経由で報告してみます。このPi4機は、ラズパイPicoの母艦のやつ。

$ logger TEST-Message-From-Pi4 -p local7.info -n 192.168.XXX.XXX

勿論、XXX.XXXのところにはアドレスが入ります。

さて振り分けしたファイルを覗いてみるとこんな感じ。

$ tail -2 /var/log/local7.log
Dec 7 13:19:27 Pi3 pi: TEST-Message-002
Dec 7 13:24:03 raspberrypi pi TEST-Message-From-Pi4

ちゃんと記録されちょるみたいです。

今度、ESP32デバイスからもPi3機へLOGしてみようかしらん。

※TIPS

tailコマンドで、logが更新されたら表示し続けるような機能があった気がする、と思って今回調べたら、

tail -f /var/log/syslog

で良いみたいです。tailは終了せず、logの末尾に何か追加されたら表示を更新しつづけてくれました。忘却力。

ソフトな忘却力(12) RPi3、AES、1ブロックだけのテストパターン「素の」暗号化 へ戻る