![通过管道将 Unicorn 输出到 Logstash-Forwarder](https://linux22.com/image/653039/%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E5%B0%86%20Unicorn%20%E8%BE%93%E5%87%BA%E5%88%B0%20Logstash-Forwarder.png)
我已经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-forwarder
stdin
答案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。对于命名管道,它应该是相同的。
希望这可以帮助!