Unicorn の出力を Logstash-Forwarder にパイプする

Unicorn の出力を Logstash-Forwarder にパイプする

logstash-forwarder私は、Capistrano でデプロイした Rails アプリとともに、DigitalOcean Ubuntu ドロップレットに をインストールしました。logstash-forwarderがインストールされていることは、 を実行できるためわかりますsudo service logstash-forwarder restart

次の設定でlogstash-forwarder読み取るように設定しました:stdin

{
  "network": {
    "servers": [ "<my logstash server>:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "paths": [
        "/var/log/syslog",
        "/var/log/auth.log"
       ],
      "fields": { "type": "syslog" }
    }, {
      "paths": [ "-" ],
      "fields": { "type": "stdin" }
    }
   ]
}

…そして、ディスクに書き込む代わりにすべてのログを送信するように Rails を設定しましたstdout。バイナリがどこにあるのか正確にはわかりませんがlogstash-forwarder、Capistrano に次のコマンドを実行するように指示してみました。

RBENV_ROOT=/usr/local/rbenv RBENV_VERSION=2.1.4 /usr/bin/env sudo /etc/init.d/unicorn_oddjob_production restart | /opt/logstash-forwarder/bin/logstash-forwarder

…しかし、次の場合は失敗します:

(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: sudo exit status: 127
sudo stdout: Nothing written
sudo stderr: bash: /opt/logstash-forwarder/bin/logstash-forwarder: No such file or directory

私はこのすべてにまったく不慣れなので、どこが間違っているのかよくわかりません。では、 を に送信するにはどうすればいいのでしょうunicornか?stdoutlogstash-forwarderstdin

答え1

見たところ、logstash-forwarderリモート マシンの期待する場所ではありません。エラー メッセージを確認してください:

sudo stderr: bash: /opt/logstash-forwarder/bin/logstash-forwarder: No such file or directory

restartまた、この問題が解決されたら、オプションを使用してデーモンを再起動しても期待どおりに動作するかどうかはわかりません。unicorn_oddjob_productionプロセスは、現在のユニコーンを停止して新しいコピーを生成した後に終了します。これが発生すると、パイプが閉じられ、logstash-forwarder がシャットダウンされます。

の専門家ではありませんが、名前付きパイプにログを記録してそこから読み取るunicornように設定してみました。logstash-forwarderこの例出力を STDOUT に送信する方法について説明します。名前付きパイプの場合も同様です。

お役に立てれば!

関連情報