最近在macOS Mojave(10.14.4)上将Logstash(通过Homebrew安装)升级到版本6.7.0,并且运行不正常。当我尝试通过命令行手动运行(出于本地开发目的)时,始终出现此错误:
Error: Permission denied - Permission denied
Exception: Errno::EACCES
Stack: org/jruby/RubyFile.java:1263:in `utime'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/fileutils.rb:1133:in `block in touch'
当在RedHat 7生产服务器上使用我安装Logstash 6.7.0作为系统服务的RedHat 7生产服务器上使用完全相同的Logstash配置文件时,令人发疯的事情是所有工作都按预期进行。
我的输入配置文件如下:
input {
file {
path => "/opt/logstash/coolapp/access_log*"
exclude => "*.gz"
start_position => "beginning"
sincedb_path => "/dev/null"
close_older => "1 hour"
stat_interval => "1 second"
discover_interval => 15
}
}
就配置而言,这些东西非常简单,根据官方Logstash参考手册,我的所有设置都与有效/可接受的设置匹配。但是,如果我注释掉sincedb_path => "/dev/null"
行,则我在macOS上的Logstash设置将按预期工作。
到底是什么引起了这个问题?我的意思是说我在进行本地开发工作时可以注意到将sincedb_path => "/dev/null"
注释掉了,但是……这确实很烦人。
答案 0 :(得分:1)
好吧,我想出了……在某种程度上。错误行中倾斜地提到了该问题:
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/fileutils.rb:1133:in `block in touch'
我发现的唯一临时解决方案是在我的配置中注释掉这一行:
sincedb_path => "/dev/null"
似乎我运行Logstash的生产服务器正在使用JRuby 2.5.x,而通过Homebrew安装的本地macOS版本正在使用jRuby2.4.x。显然,对于不存在的设备(例如fileutils.rb
),JRuby 2.4.x中的touch
处理/dev/null
的情况与JRuby 2.5.x不同。因此,Logstash在我的macOS开发设置中失败。
因此,这似乎全是Homebrew(或macOS?)问题,而不是Logstash问题。