我已經安裝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
'sstdout
送到logstash-forwarder
's 呢stdin
?
答案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。對於命名管道,它應該是相同的。
希望這可以幫助!