環境
- 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
に置くのは勘弁してほしい気がする。