Я установил logstash-forwarder
в дропле DigitalOcean Ubuntu вместе с моим приложением Rails, которое я развертываю с помощью Capistrano. Я знаю 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
двоичные жизни, и я попытался приказать Капистрано выполнить следующую команду:
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 deploy@128.199.40.124: 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
?
Судя по всему, logstash-forwarder
находится не там, где вы ожидаете от удаленной машины. См. Сообщение об ошибке:
sudo stderr: bash: /opt/logstash-forwarder/bin/logstash-forwarder: No such file or directory
Кроме того, как только это будет решено, я не уверен в факте перезапуска демона с помощью restart
вариант сделает то, что вы ожидаете. В unicorn_oddjob_production
процесс умрет после остановки текущего единорога и создания его новой копии. Как только это произойдет, канал закроется, а сервер пересылки logstash отключится.
Не будучи экспертом по unicorn
, Я бы попытался настроить его ведение журнала на именованный канал и logstash-forwarder
прочтите оттуда. Посмотри пожалуйста этот пример. Он объясняет, как отправить вывод в STDOUT. Для именованного канала он должен быть таким же.
Надеюсь это поможет!