それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rsyslogでログを外部へ転送する設定。

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  "

TCPUDP

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だと溜まるわけ無いですよね。

確実な転送がほしいときは、TCPを使う。UDPを使わない。

とりあえずロストしてもいいや、だいたい集まってたらいいやってときはUDPのほうが圧倒的に軽量でいいんだけどね。

受信側の設定

別に書いた。

参考資料