Перенаправить вывод Unicorn в Logstash-Forwarder

Перенаправить вывод Unicorn в Logstash-Forwarder

Я установил logstash-forwarderна дроплете Ubuntu DigitalOcean вместе с моим приложением 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находится двоичный файл, и я попытался указать 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's stdoutв 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. Для именованного канала это должно быть то же самое.

Надеюсь это поможет!

Связанный контент