Logstash 6.7.0 fails to start with an error “Error: Permission denied - Permission denied” on macOS Mojave (10.14.4)
Logstash 6.7.0 fails to start with an error “Error: Permission denied - Permission denied” on macOS Mojave (10.14.4)
最近将 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 配置文件时,我将 Logstash 6.7.0 安装为系统服务——通过 the official Elastic repos——一切都按预期工作。
我的输入配置文件如下所示:
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
}
}
就配置而言,这些东西相当简单,而且我的所有设置都符合 valid/accepted 根据官方 Logstash 参考手册设置的设置。但是如果我注释掉 sincedb_path => "/dev/null"
行,我在 macOS 上的 Logstash 设置会按预期工作。
究竟是什么导致了这个问题?我的意思是当我做本地开发工作时,我可以意识到注释掉 sincedb_path => "/dev/null"
,但是仍然......这真的很烦人。
好吧,我想通了……在某种程度上。该问题在错误行中被间接提及:
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 版本使用的是 jRuby 版本 2.4.x。显然,JRuby 2.4.x 中的 fileutils.rb
在不存在设备(例如 /dev/null
)的情况下处理 touch
的方式与 JRuby 2.5.x 不同。因此,Logstash 在我的 macOS 开发设置上失败了。
看来这完全是 Homebrew(或 macOS?)问题而不是 Logstash 问题。
最近将 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 配置文件时,我将 Logstash 6.7.0 安装为系统服务——通过 the official Elastic repos——一切都按预期工作。
我的输入配置文件如下所示:
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
}
}
就配置而言,这些东西相当简单,而且我的所有设置都符合 valid/accepted 根据官方 Logstash 参考手册设置的设置。但是如果我注释掉 sincedb_path => "/dev/null"
行,我在 macOS 上的 Logstash 设置会按预期工作。
究竟是什么导致了这个问题?我的意思是当我做本地开发工作时,我可以意识到注释掉 sincedb_path => "/dev/null"
,但是仍然......这真的很烦人。
好吧,我想通了……在某种程度上。该问题在错误行中被间接提及:
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 版本使用的是 jRuby 版本 2.4.x。显然,JRuby 2.4.x 中的 fileutils.rb
在不存在设备(例如 /dev/null
)的情况下处理 touch
的方式与 JRuby 2.5.x 不同。因此,Logstash 在我的 macOS 开发设置上失败了。
看来这完全是 Homebrew(或 macOS?)问题而不是 Logstash 问题。