透過管道 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'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。對於命名管道,它應該是相同的。

希望這可以幫助!

相關內容