rsyslog で転送する設定
rsyslog で転送設定。
*.* action(type="omfwd" ... )
転送設定の例
## legacy / compatible #*.* @@192.168.1.11:514 ## TCP は @@ #*.* @192.168.1.11:514 ## UDP は @ ## RasinerScript with queue *.* action(type="omfwd" queue.type="LinkedList" queue.filename="raspi-ubuntu_fwd" action.resumeInterval="30" action.resumeRetryCount="-1" queue.spoolDirectory="/var/lib/rsyslog" queue.saveonshutdown="on" target="192.168.1.11" Port="514" Protocol="tcp" )
ログ送信テスト
logger -p syslog.info -t TEST $(printf %05d $RANDOM)." Hello from pi-zero b "
TCP とUDP
TCP は接続チェック(コネクション確立)が入る。接続エラーになりログの喪失を防げる。ただし通信量が増えるので、ラグへの不安はある。
UDPは投げっぱなし(ながすだけ)なので、受け取り側が受け取らないとログは消える。
legacy な書式も使える。RasinerScript だと、ずいぶんと長くなるが、1行毎にかけるので読みやすい。
接続失敗時の再送信
再送信をキューに入れる。
再送信に失敗した場合はキューに入る。30秒に一回送信する。
queue.type="LinkedList" queue.filename="raspi-ubuntu_fwd" action.resumeInterval="30" action.resumeRetryCount="-1"
再送信前に電源・切断
再送信キューは基本的にメモリにあるはず。メモリなのでシャットダウン時に消えちゃう。
queue.spoolDirectory="/var/lib/rsyslog" queue.saveonshutdown="on"
シャットダウン時に保存するように設定する。。
ただ、これでも急な電源喪失だとログは喪失しちゃうけどキューに溜まるようなとき(=受け側がしんでる)ときに、送信側もしんでしまうという2重に死んでる状態は少し考えにくいのでこれでいいとする。
シャットダウン時に保存するログサイズ上限(2023-03-26追記)
ネットが落ちたときに、ログが無尽蔵にたまりまくるので、上限を付けておかないと、ログ転送エラーがログに書かれて際限なく溜まる。
queue.maxdiskspace="1g"
ログ転送待ちが起きて、ログ転送の失敗ログがたまり続けて、1週間程度で10GB越えてた・・・ ネット再接続までに復旧したら問題ない。と思ってたが、たまり続けたログの転送に時間がかかりすぎてまいったので、上限を設けることにした。
シングルクォーテーションはエラー(2023-03-26追記)
''' in object definition - is there an invalid escape sequence somewhere?
シングルクォーテーションは、文法エラーになるので注意する。
legacy な書き方
いにしえからの書き方。
## legacy / compatible *.* @@192.168.1.11:514 ## TCP *.* @192.168.1.11:514 ## UDP
この場合、キューを記入するのがめんどくさい。
キューを使うときはTCPにする
キューは送信エラー時に再送する。もちろん、これはTCP挙動です。
UDP時には使えない。接続チェックにTCPを用いるため。UDPは投げっぱなしですよね。
UDP設定を忘れてキューに溜まらない。ってパニクったけど。UDPだと溜まるわけ無いですよね。
とりあえずロストしてもいいや、だいたい集まってたらいいやってときはUDPのほうが圧倒的に軽量でいいんだけどね。
受信側の設定
別に書いた。