さまざまな runit サービスの svlogd ログのマージ

さまざまな runit サービスの svlogd ログのマージ

複数のNodeプロセスが同じコードを実行するNode.jsアプリケーションを実行したいと思います。私はそれを使用しています走るNode プロセスをそのまま起動して管理します。良いシェフのサポート。設定を説明するために2つのrunitサービスディレクトリを実行しているとします。

/etc/sv/test-1/run

#!/bin/sh
echo running test 1
sleep 9999

/etc/sv/test-2/run

#!/bin/sh
echo running test 2
sleep 9999

(実際のNodeアプリケーションを実行するためのテストプレースホルダーはWです。echosleep

これはうまくいきます...基本的に、runitプログラムがsvlogd各サービスのログを別々のディレクトリに保存しようとしていることを除いて。問題は、複数の場所でアプリケーションのすべてのログエントリを表示したくないことです。

svlogd同じログファイルに書き込もうとした最初の試みは次のとおりです。

/etc/sv/test-1/log/run

#!/bin/sh
exec svlogd -tt /var/log/test

/etc/sv/test-2/log/run

#!/bin/sh
exec svlogd -tt /var/log/test

これではありません。どのログサービスを最初に起動しても正常に実行されます。 2 番目に開始されたロギングサービスは、他のロギングサービスによってロックされているため実行されません。表示するには:

$ sudo /etc/service/test-2/log/run
svlogd: warning: unable to lock directory: /var/log/test: temporary failure
svlogd: fatal: no functional log directories.

これを設定するより良い方法はありますか?runit同じコードを実行する複数のサービスのすべてのログエントリを1か所でどのように表示できますか?

答え1

私が知っている限り、svlogdログを単一のファイルにマージすることはサポートされていません。ただし、ソケットのロギングはサポートしています。私の回避策は、svlogdログエントリをUDPを介して実行されているコンピュータに転送するように指示することでした。システムログはい。

/etc/sv/test-1/log/run

#!/bin/sh
exec svlogd -tt /var/log/test/1

/var/log/test/1/config

ptest-1: 
U127.0.0.1

/etc/sv/test-2/log/run

#!/bin/sh
exec svlogd -tt /var/log/test/2

/var/log/test/2/config

ptest-2: 
U127.0.0.1

ここでは、必要なタスクを実行するようにrsyslogを設定するだけです。

答え2

「ロガー」を使用したシステムログの記録

syslogに満足している場合は、logger代わりにsyslogを使用してくださいsvlogd。ロガーに実行スクリプトを提供することの重要な点は、ロギングに必要なすべてのプログラムを実行できることです。

/etc/sv/test-1/log/run

#!/bin/sh
exec logger -i -p daemon.notice -t my_service

ビューにマージ

別の良いアイデアは、ログを別の場所に置き、ファイルを表示するときにスクリプトを使用してログをマージすることです。たとえば、タイムスタンプを使用すると、svlogd次のことができます。

cat /var/log/test/*/current | sort | less

複数のログファイルを同時に表示できる他の強力なツールがあります。マルチテール

関連情報