Eu instalei logstash-forwarder
em um droplet DigitalOcean Ubuntu, junto com meu aplicativo Rails que eu implantei com Capistrano. Eu sei logstash-forwarder
que está instalado porque posso fazer isso sudo service logstash-forwarder restart
.
Eu configurei logstash-forwarder
para ler stdin
com a seguinte configuração:
{
"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" }
}
]
}
…e configurei o Rails para enviar todos os logs stdout
em vez de gravar no disco. Não tenho certeza de onde logstash-forwarder
fica o binário e tentei dizer ao Capistrano para executar o seguinte comando:
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
…Mas falha com:
(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
…
Sou muito novo em tudo isso, então não tenho certeza de onde estou errando. Então, como posso enviar unicorn
's stdout
para logstash-forwarder
's stdin
?
Responder1
Pelo que parece, logstash-forwarder
não é onde você espera na máquina remota. Por favor, veja a mensagem de erro:
sudo stderr: bash: /opt/logstash-forwarder/bin/logstash-forwarder: No such file or directory
Além disso, uma vez resolvido isso, não tenho certeza se o fato de reiniciar o daemon usando a restart
opção fará o que você espera. O unicorn_oddjob_production
processo morrerá após parar o unicórnio atual e gerar uma nova cópia dele. Quando isso acontecer, o pipe será fechado e o logstash-forwarder será desligado.
Sem ser um especialista em unicorn
, eu tentaria configurar seu registro em um pipe nomeado e lê- logstash-forwarder
lo. Por favor, vejaeste exemplo. Explica como enviar a saída para STDOUT. Para um pipe nomeado, deve ser o mesmo.
Espero que isto ajude!