通过管道将 Unicorn 输出到 Logstash-Forwarder

通过管道将 Unicorn 输出到 Logstash-Forwarder

我已经logstash-forwarder在 DigitalOcean Ubuntu droplet 上安装了它,以及我使用 Capistrano 部署的 Rails 应用程序。我知道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发送stdout给?logstash-forwarderstdin

答案1

从外观上看,它logstash-forwarder不在远程机器上您期望的位置。请查看错误消息:

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

此外,一旦解决了这个问题,我不确定使用该restart选项重新启动守护进程是否会达到您的预期。unicorn_oddjob_production在停止当前 unicorn 并生成其新副本后,该进程将终止。一旦发生这种情况,管道将关闭,logstash-forwarder 将关闭。

虽然我不是这方面的专家unicorn,但我尝试将其日志记录到命名管道并logstash-forwarder从中读取。请参阅这个例子。它解释了如何将输出发送到 STDOUT。对于命名管道,它应该是相同的。

希望这可以帮助!

相关内容