読者です 読者をやめる 読者になる 読者になる

Raspberry PiにFluentdをインストール

はじめに

Raspberry PiにFluentdをインストールして,Pythonアプリケーションのログを監視しようと思った.
が,インストールで軽く詰まったのでメモ

つまったこと

よくあるインストール方法で簡単にインストール&動作確認してみた.
[参考] fluentdインストール(丁寧な説明つき) - Qiita

gem install fluentd --no-ri --no-rdoc
fluentd --setup ./fluent
fluentd -c ./fluent/fluent.conf -vv &
echo '{"json":"message"}' | fluent-cat debug.test

が,実行したと同時にエラーログが大量に流れ出した.

[error]: fluent/supervisor.rb:640:rescue in main_process: unexpected error error="undefined method `compress' for nil:NilClass"
[error]: command/fluentd.rb:288:<top (required)>: /home/user/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/fluentd-0.14.8/lib/fluent/plugin/out_forward.rb:145:in `configure'
...

rbenvのせいかなと思ったけど,そうでもなさそうだった.

解決法

簡単な話で,自動で生成されるfluent.confの設定がよくなかったみたい.

<source>
  type forward
  port 24224
  bind 0.0.0.0
</source>
<match **>
  type stdout
</match>

みたいに簡単なものにすると無事動いた.

サーバ起動時に自動でpyenv環境下のuWSGIアプリケーションを実行しようとしたらはまった

前置き

Raspberry Piでサーバを構築している.
せっかくなので起動したら自動的に作成したPythonアプリケーションを実行できるようにしたい.
作成したPythonアプリケーションはpyenvで管理していて,uWSGIサーバを使って動いている.

した

/etc/rc.localのファイルにシェルスクリプトを書くと実行できる.
ここにこんな風に書くと希望のアプリケーションを実行できる.

# run app from shell script
sh run_app.sh

run_app.sh

# nohup uwsgi --ini hoge_app.ini & <-怒られたやつ
nohup /home/hoge/.pyenv/shims/uwsgi --ini hoge_app.ini &

はまったこと

上記のように書くと,実行できるが,run_app.shはrootユーザで実行される.
がuWSGIはhogeユーザのpyenvで管理していたので,rootユーザからは動かすことができなかった.
そのため,そのまま動かすとuWSGIがないと怒られた.
nohup: コマンド `uwsgi' の実行に失敗しました: そのようなファイルやディレクトリはありません

解決策

たぶんよくない方法だと思うのだが,直接hogeユーザの.pyenv内のuwsgiを指定して実行することで,無事動いた.