linux: rsyslog
2025/04/06
はじめに
最近見始めた gattlib のログはデフォルトでsyslogである。
名前はよく聞くが使ったことがない(か、忘れた)ので調べよう。
rsyslog
が、今はだいたい rsyslog らしい。
うちの Raspberry Pi 4 にはインストールされていなかった。
なんかいろいろインストールされてしまったが仕方あるまい。
$ sudo apt install rsyslog
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libestr0 libfastjson4 liblognorm5
Suggested packages:
rsyslog-mysql | rsyslog-pgsql rsyslog-mongodb rsyslog-doc rsyslog-openssl
| rsyslog-gnutls rsyslog-gssapi rsyslog-relp
The following NEW packages will be installed:
libestr0 libfastjson4 liblognorm5 rsyslog
0 upgraded, 4 newly installed, 0 to remove and 5 not upgraded.
Need to get 800 kB of archives.
After this operation, 4141 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://deb.debian.org/debian bookworm/main arm64 libestr0 arm64 0.1.11-1 [9220 B]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libfastjson4 arm64 1.2304.0-1 [27.4 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 liblognorm5 arm64 2.0.6-4 [63.8 kB]
Get:4 http://deb.debian.org/debian bookworm/main arm64 rsyslog arm64 8.2302.0-1+deb12u1 [699 kB]
Fetched 800 kB in 0s (3178 kB/s)
Selecting previously unselected package libestr0:arm64.
(Reading database ... 161009 files and directories currently installed.)
Preparing to unpack .../libestr0_0.1.11-1_arm64.deb ...
Unpacking libestr0:arm64 (0.1.11-1) ...
Selecting previously unselected package libfastjson4:arm64.
Preparing to unpack .../libfastjson4_1.2304.0-1_arm64.deb ...
Unpacking libfastjson4:arm64 (1.2304.0-1) ...
Selecting previously unselected package liblognorm5:arm64.
Preparing to unpack .../liblognorm5_2.0.6-4_arm64.deb ...
Unpacking liblognorm5:arm64 (2.0.6-4) ...
Selecting previously unselected package rsyslog.
Preparing to unpack .../rsyslog_8.2302.0-1+deb12u1_arm64.deb ...
Unpacking rsyslog (8.2302.0-1+deb12u1) ...
Setting up libestr0:arm64 (0.1.11-1) ...
Setting up libfastjson4:arm64 (1.2304.0-1) ...
Setting up liblognorm5:arm64 (2.0.6-4) ...
Setting up rsyslog (8.2302.0-1+deb12u1) ...
Created symlink /etc/systemd/system/syslog.service → /lib/systemd/system/rsyslog.service.
Created symlink /etc/systemd/system/multi-user.target.wants/rsyslog.service → /lib/systemd/system/rsyslog.service.
Processing triggers for libc-bin (2.36-9+rpt2+deb12u9) ...
Processing triggers for man-db (2.11.2-2) ...
systemd は syslog か rsyslog で使えるようだ。
インストール直後から active(running) になっていた。
ログの見方
/etc/rsyslog.conf
はこうなっていた。
ファイル名の前に「-」を付けると非同期というかバッファリングしてから書き込むようになるそうだ。
stdout
もバッファリングして改行的なデータがあると出力するけど stderr
は常に出力するみたいな実装になってなかったっけ。
ともかく、バッファリングするタイプはリセットなどがあると書き込まれないことがあることは覚えておいてよさそうだ。
###############
#### RULES ####
###############
#
# Log anything besides private authentication messages to a single log file
#
*.*;auth,authpriv.none -/var/log/syslog
#
# Log commonly used facilities to their own log file
#
auth,authpriv.* /var/log/auth.log
cron.* -/var/log/cron.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
さっき /var/log/
を見てみたが、mail.log
と user.log
は作られていなかった。
ファイルの中身はテキストで、「timestamp hostname group message」になっているのかな?
いや、テンプレートがあってフォーマットは変更できるそうだが試していないので省略する。
ファイルは sudo
しなくても読めた。
/var/log/syslog
の先頭はこう。
2025-04-06T16:03:06.363784+09:00 xxxxx systemd[1]: Listening on syslog.socket - Syslog Socket.
2025-04-06T16:03:06.365633+09:00 xxxxx systemd[1]: Starting rsyslog.service - System Logging Service...
2025-04-06T16:03:06.363962+09:00 xxxxx kernel: [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
.......
/var/log/kern.log
の先頭はこうだったので、
/var/log/syslog
には何でも書き込まれて、後はフィルタされて各ログファイルにも書き込まれるという感じなのかな?
2025-04-06T16:03:06.363962+09:00 xxxxx kernel: [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
gattlib の syslog 出力
gattlib のログ出力を syslog に変更すると /var/log/user.log
が作られてこうなっていた。
カテゴリーというかグループというか、そういうのがあるのでわかりやすい。
2025-04-06T17:53:53.597167+09:00 xxxxx ble_scan: Open bluetooth adapter hci0
2025-04-06T17:53:53.662626+09:00 xxxxx ble_scan: Bluetooth scan started
2025-04-06T17:53:53.663596+09:00 xxxxx ble_scan: Scan for BLE devices for 3 seconds
2025-04-06T17:53:53.682267+09:00 xxxxx ble_scan: DBUS: on_interface_proxy_properties_changed(/org/bluez/hci0): interface:org.bluez.Adapter1 changed_properties:{'Discovering': <true>} invalidated_properties:0
2025-04-06T17:53:54.978722+09:00 xxxxx ble_scan: DBUS: on_object_added: /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX (has 'org.bluez.Device1')
2025-04-06T17:53:54.984012+09:00 xxxxx ble_scan: gattlib_device_set_state:/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX: Set initial state DISCONNECTED
2025-04-06T17:53:57.333124+09:00 xxxxx ble_scan: BLE scan is stopped after scanning time has expired.
2025-04-06T17:53:57.334866+09:00 xxxxx ble_scan: No discovery in progress. We skip discovery stopping (2).
2025-04-06T17:53:57.335887+09:00 xxxxx ble_scan: No discovery in progress. We skip discovery stopping (2).
2025-04-06T17:53:57.336043+09:00 xxxxx ble_scan: Close bluetooth adapter hci0
しかし、ble_scan アプリが出力したものも gattlib の API が出力したものも “ble_scan” で出力されるのか。 プロセス名ということかな。
syslog の viewer
動いている他のアプリが syslog を使っていてもおかしくはない。
となると /var/log/syslog
を見ていても混在していてつらいはずだ。
なにか viewer があるに違いない・・・と調べたのだが、そういうのは見つからなかった。
GUI のツールはあるようだったが、コンソールで条件を指定したらフィルタリングしてくれるツールはないようだった。
まあ、テキストだしね・・・。
grep などで十分だってことだろう。