11

编辑:我更改了标题,因为问题不是我最初的想法。事实上,logstash 需要一分钟多的时间才能启动,这可能会被误解为“沉默”......


我试图让logstash运行,所以我按照官方网站上的说明进行独立安装: http: //logstash.net/docs/1.1.4/tutorials/getting-started-simple

基本上,我得到了logstash-1.1.4-monolithic.jar文件,然后构建了一个非常简单的配置文件:(example.conf

input {
  stdin { type => "stdin-type"  }
}
output {
  stdout { debug_format => "json" }
}

但是当我运行 logstash 时,什么也没有出现(我在 STDIN 中输入随机文本,但没有得到响应):

# java -jar logstash-1.1.4-monolithic.jar agent -f example.conf
Test
toto
hey ??? Wakeup !!!
^C

(供参考:Java 版本正确)

# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

拜托,有人能告诉我我错过了什么吗?

4

4 回答 4

7

好的,我自己找到了。

一切正常。只是logstash启动时间太长了。在我的(不起眼的)服务器上超过 60 秒!添加到那个巨大的开始时间,启动时没有打印任何内容......

于 2012-11-07T22:07:46.863 回答
1

因为这个问题仍然相关,所以我想指出,如果您在 Java <8 上运行,那么您在 Linux(也许还有 Solaris)上的启动时间可能会很慢的一个原因是因为 Oracle JVM 在那些平台在获取随机数方面存在错误。

即使被告知从 /dev/urandom 获取其随机数,它也不会(至少,不完全是?)。如果您从 /dev/./urandom 读取它,它是相同的,但与内部损坏的逻辑不匹配,那么您很可能会发现 Java 启动得更快(尤其是在 J2EE 中间件环境中)。

http://bugs.java.com/view_bug.do?bug_id=6521844

也就是说,即使使用 Java 8,logstash --configtest 的启动速度仍然非常慢;这可能是因为服务器模式下的 64 位 JVM 会在启动时做很多优化工作(即便如此,我怀疑 JRuby 正在做很多与 Ruby 相关的事情)。

JRuby wiki 有一个关于其他启动性能改进的文档 ( https://github.com/jruby/jruby/wiki/Improving-startup-time ),但不太适用于更快地获取 logstash。我可以将“logstash --configtest”的启动时间缩短到大约 8 秒:

[root@node-2 ~]# DEBUG=1 /opt/logstash/bin/logstash help
DEBUG: exec /opt/logstash/vendor/jruby/bin/jruby --1.9 -J-XX:+UseParNewGC -J-XX:+UseConcMarkSweepGC -J-Djava.awt.headless=true -J-XX:CMSInitiatingOccupancyFraction=75 -J-XX:+UseCMSInitiatingOccupancyOnly -J-XX:+HeapDumpOnOutOfMemoryError -J-Xmx1g -J-XX:HeapDumpPath=/opt/logstash/heapdump.hprof /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb help

获取它将执行的命令,删除所有 java 选项,并替换为--dev

[root@node-2 ~]# time /opt/logstash/vendor/jruby/bin/jruby /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest --config /etc/logstash/logstash-submission.conf 
Configuration OK

real    0m13.367s
user    0m12.966s
sys 0m0.321s
[root@node-2 ~]# time /opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest --config /etc/logstash/logstash-submission.conf 
Configuration OK

real    0m6.954s
user    0m6.629s
sys 0m0.286s

7 秒仍然不是很好,但比 14 秒左右要好。7 秒是喝一口咖啡的最佳时间,因此可以避免在喝完咖啡之前尴尬地完成测试。乙^)

一个简单的别名可能是一个有用的快速取胜:

alias logstash-configtest="/opt/logstash/vendor/jruby/bin/jruby --dev /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent --configtest"

我相信您也可以使用 USE_RUBY=1 标志运行 logstash 以使用“ruby”而不是供应商的 jruby - 您不会为正常运行 logstash 执行此操作,但它可能对 --configtest 有用经常使用它。——你确实需要确保你拥有所有不同的 Ruby 模块,然后你的原生 ruby​​ 和供应商的 jruby 之间会有版本偏差……但也许 Ruby 爱好者可以接受这个想法并使用它。

于 2016-09-22T11:56:04.017 回答
0

我大约一周前开始使用logstash。真的被@jordansissel 仇恨驱动的发展所吸引。最后几天在#logstash irc 上与 ppl 就包括您提到的问题在内的问题进行了交谈。

在我的 ubuntu 12.04 上启动 logstash-web(一个稀疏的 sinatra Web 服务器)需要 29(!)秒。

我相信logstash必须远离使用java。Logstash 肯定可以像 sensu 一样作为 ruby​​ 应用程序运行,并以更少(或没有)痛苦提供相同的价值。

在控制台上使用 java(jruby)puts "bla"需要 7 秒。

简短的回答是:java 在杯子里好,在电脑里不好。如果您看到类似“先决条件:Java”之类的内容,请准备好浪费。

于 2014-04-10T14:20:12.970 回答
0

我认为您会草率地得出结论,只需激活 --debug 日志并查看发生了什么+您甚至可以使用您的工具包对其进行分析并准确查看属于什么的。

于 2014-09-11T18:36:19.420 回答