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"
当我进行本地开发工作时,我可以意识到注释掉,但仍然......这真的很烦人。
好吧,我想通了……在某种程度上。该问题在错误行中斜提到:
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 问题。