Logstash 6.7.0 无法在 macOS Mojave (10.14.4) 上启动并显示错误“错误:权限被拒绝 - 权限被拒绝”

Jak*_*uld 2 macos homebrew 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'
Run Code Online (Sandbox Code Playgroud)

令人抓狂的是,当在 RedHat 7 生产服务器上使用完全相同的 Logstash 配置文件时,我将 Logstash 6.7.0 安装为系统服务——通过官方 Elastic 存储库——一切都按预期工作。

我的输入配置文件如下所示:

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
  }

}
Run Code Online (Sandbox Code Playgroud)

就配置而言,这些东西相当简单,并且根据官方 Logstash 参考手册,我的所有设置都与有效/接受的设置相匹配。但是如果我注释掉该sincedb_path => "/dev/null"行,我在 macOS 上的 Logstash 设置会按预期工作。

到底是什么导致了这个问题?我的意思是,sincedb_path => "/dev/null"当我进行本地开发工作时,我可以意识到注释掉,但仍然......这真的很烦人。

Jak*_*uld 5

好吧,我想通了……在某种程度上。该问题在错误行中斜提到:

uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/fileutils.rb:1133:in `block in touch'
Run Code Online (Sandbox Code Playgroud)

我找到的唯一临时解决方案是在我的配置中注释掉这一行:

sincedb_path => "/dev/null"
Run Code Online (Sandbox Code Playgroud)

我运行 Logstash 的生产服务器似乎使用的是 JRuby 2.5.x 版,而我通过 Homebrew 安装的本地 macOS 版本使用的是 jRuby 2.4.x 版。显然,fileutils.rb在 JRuby 2.4.x 中处理touch不存在设备(例如/dev/null)的情况与 JRuby 2.5.x 不同。因此,Logstash 在我的 macOS 开发设置中失败。

因此,这似乎都是 Homebrew(或 macOS?)问题,而不是 Logstash 问题。