環境
- OS: Ubuntu 16.04
- sensu: 0.26.5
内容
sensuでkeepaliveが落ちてるのにslackへの通知が飛ばなくなっていたので調査したところ、 /var/log/sensu/sensu-server.log にhandlerのoutputとして以下のようなエラーが記録されていた。
/opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-plugin/utils.rb:9:in `read': No such file or directory @ rb_sysopen - /tmp/sensu_server_loaded_files (Errno::ENOENT)
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-plugin/utils.rb:9:in `config_files'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-plugin/utils.rb:22:in `settings'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:123:in `api_settings'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:131:in `api_request'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:179:in `stash_exists?'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:191:in `block (2 levels) in filter_silenced'
from /opt/sensu/embedded/lib/ruby/2.3.0/timeout.rb:91:in `block in timeout'
from /opt/sensu/embedded/lib/ruby/2.3.0/timeout.rb:33:in `block in catch'
from /opt/sensu/embedded/lib/ruby/2.3.0/timeout.rb:33:in `catch'
from /opt/sensu/embedded/lib/ruby/2.3.0/timeout.rb:33:in `catch'
from /opt/sensu/embedded/lib/ruby/2.3.0/timeout.rb:106:in `timeout'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:190:in `block in filter_silenced'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:188:in `each'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:188:in `filter_silenced'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:36:in `filter'
from /opt/sensu/embedded/lib/ruby/gems/2.3.0/gems/sensu-plugin-1.4.2/lib/sensu-handler.rb:80:in `block in <class:Handler>'
warning: event filtering in sensu-plugin is deprecated, see http://bit.ly/sensu-plugin
調べてみると、↓のissueが見つかった。
どうやら、sensuはデフォルトだと /tmp 下にファイルを置いてhandler実行時にそのファイルを見に行くけど、なんらかの理由でファイルが削除されているとエラーになる様子。
自分の環境の場合、定期的に/tmp 下を削除する tmpreaper を入れているので、継続的に使用するファイルを /tmp 下に置かれるのは困る。
回避策としては、 /etc/default/sensu に以下の1行を入れてsensu-serverを再起動すればOK。
export SENSU_LOADED_TEMPFILE_DIR=/var/run/sensu
これで /tmp じゃなくて /var/run/sensu 下に該当のファイルが置かれるようになるので、勝手に削除されたりしない。しかし、一時ファイルじゃないものをデフォルトで /tmp に置くのは勘弁してほしい気がする。