困った時の syslog 頼み。Raspberry Pi OSを動かしていて何かトラブったときに見るのが syslog です。運が良ければ?問題の原因が分かります。そうして頼ってきた割にラズパイのsyslogの事はちゃんと理解していなかったことが今回発覚。「ついでに」ファイルの振り分けを追加し、リモートからのUDPでのログにも対応とな。
※ソフトな忘却力 投稿順 index はこちら
ずっと長い事、ラズパイの 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の設定全般については、「さくらのナレッジ」様の以下のページにお世話になりました。
また、ネットワーク上の他のデバイスから 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の末尾に何か追加されたら表示を更新しつづけてくれました。忘却力。