Open6
Go経由でのjournalログの扱いとjournaldの挙動を調査
- /etc/systemd/journal.confのStorage=autoがデフォルト。
- これは「/var/log/journal」フォルダの有無で挙動が変化する。
- 上記なしなら「/run/log/journal」に出力され、ここはtmpfsなのでリブートごとに消失する。
- レート制限がデフォルトで30秒に1000件。
- デフォルトで/var/log/journalを持つファイルシステム容量の10%まで記録する。
- 「journalctl --disk-usage」で使用容量確認。
- 「sudo journalctl --vacuum-size=50M」で最新から50M以外を削除する(容量指定は目安)。
SYSLOG_IDENTIFIERが「journalctl -t <タグ>」で分類されるフィールド。
Goでjournaldにメッセージを送るにはunixdgram経由なシンプルなライブラリがある。
journaldのメッセージを読み出すにはsystemd実装が必要なためCGO経由になる。
journalctlコマンドを「os/exec」経由で読み出すならCGO不要だけど高頻度の呼び出しではオーバーヘッドが大きい。
CGOが絡むとクロス開発はdockerに頼ることになるが、systemd関連はdocker内で動かすのが難しくツラい。
_BOOT_IDを比べればRebootしたかどうかが判定できる。
__REALTIME_TIMESTAMPがusec単位のUnix時刻