最近在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配置文件时,我通过the official Elastic repos将Logstash 6.7.0作为系统服务安装,一切都按预期运行。
我的输入配置文件如下所示:
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"
,但仍然...这真的很烦人。
1条答案
按热度按时间yhxst69z1#
好吧,我想明白了......在某种程度上。这个问题在错误行中被间接地提到:
我找到的唯一的临时解决方案是在我的配置中注解掉这一行:
我运行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开发设置中失败。所以这似乎都是一个自制(或macOS?)的问题,而不是一个Logstash的问题。