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 问题。