複数の Linux インスタンスからのログをネットワーク経由で 1 つのファイルにパイプするにはどうすればよいですか?

複数の Linux インスタンスからのログをネットワーク経由で 1 つのファイルにパイプするにはどうすればよいですか?

数百台の Linux マシンで実行されているシェル スクリプトがあり、最後に csv の概要行を出力します。結果の概要を確認するには、それを 1 つのファイルに収集する必要があります。その csv 行をネットワーク経由で 1 台のマシンに転送し、すべてを 1 つのファイルにパイプする方法はありますか?

おそらく、append >> がすべての入力をファイルに出力し、スクリプトが curl コマンドを実行してそのサーバーに投稿できるような単純な http サーバーのようなものでしょうか?

答え1

数百のシステムからアプリケーションの出力を 1 つのシステムに送り返す簡単なソリューションは、 を使用することですnetcat

中央サーバーで、netcat入力を受信するために無限ループに入ります。

while true; do nc -l 4444; done | tee foo.csv

次に各アプリケーションホストで実行します

app.exe | nc foo.example.com 4444

それほど堅牢ではないかもしれませんが、目的は達成できるでしょう。

より信頼性の高いソリューションとして、rsyslog中央サーバーに を設定します。その後、各アプリ ホストで を使用しますlogger --server foo.example.com "your message here"。 を通じて投稿されたメッセージは、さらに処理するためloggerに によってファイルに記録されますrsyslog。設定は難しいかもしれませんが、長期的には簡単になります。

関連情報