b-shock. Fortress

pm2をsyslog対応に。

作成の経緯

MirakurunがNode.js 6.xの サポートを打ち切り、8.xでの動作が推奨になった為、昨日、録画鯖のNode 環境を8.9.4にアップグレードした。

ChinachuもMirakurunも、 pm2でデーモン化する導入手順。
今までは、これらをsyslog対応にする為にpm2-syslog を使用していたが、

  • syslogd側でUDPを開く必要あり。
  • タイムスタンプがUTC。

と、あまり使いやすいものではなかった為に、この機会に自作したという経緯。
syslogならOSのローテーションツールが使えたり、RDBをストレージにできたり、 便利だよ。アプリのログは極力syslogに流す派。

設計

…という程大層なものじゃないがw
素直にloggerコマンドを叩く実装が使いやすいはずと感じた。

syslogのクライアント自身がUDPを開けて通信する必要はあるのか?
仮にリモートのsyslogサーバに集約する用途でも、そのルーティングは syslogdがするべきではないか?と思うのだけど、いかがか。

通常時とエラー時に実行すべきコマンドライン例を、以下に示す。

1
2
logger -p user.info -t mirakurun-server hogehogehoge  #通常時
logger -p user.error -t mirakurun-server hogehogehoge #エラー時

何故ファシリティがuserなんだ?手抜きかよ?
いやいや、プログラム名(-t)さえ設定してあれば、rsyslogとかなら フィルタリングできるんだし。 ファシリティなんて前時代的な仕組みは使わんでいいだろ。と思った。

インストール手順

1
sudo pm2 module:install pm2-syslog-logger

詳しくはGitHubページ を参照のこと。(そんな大層なもんじゃないけど)
え、READMEは英語で書けって?勘弁してくださいよ…

利用範囲

録画鯖にはもちろんだけど。
MastodonのストリーミングAPIにも、pm2化すれば使えるよ。
てゆうか使ってる。

expressで書いたツールって、pm2化出来るのか?
これも試してみたい。

未実装機能

loggerコマンドは通常パイプで起動し、 echo hoge|logger みたいに、標準入力から 流し込む様な使い方をするのが本来。
録画鯖程度のログ流量なら今のままで問題ないけど、流量が大きくなることを 想定し、近々この形に修正したい。

その他

GitHubページとか npmページとか 見てください。恥ずかしいけどw