Logstash启动失败了?进来看看为啥

3,281 阅读2分钟

开门见山,这几天在弄filebeat+logstash处理日志,安装完logstash后准备启动,熟练的敲下了启动命令systemctl start logstash ,然后习惯性的看了下status systemctl status logstash :

鲜艳的红色映入眼帘。


[root@spring-omega8 etc]# systemctl status logstash
● logstash.service - logstash
   Loaded: loaded (/etc/systemd/system/logstash.service; disabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since Wed 2019-12-11 11:15:52 CST; 8s ago
  Process: 18593 ExecStart=/usr/share/logstash/bin/logstash --path.settings /etc/logstash (code=exited, status=1/FAILURE)
 Main PID: 18593 (code=exited, status=1/FAILURE)

Dec 11 11:15:52 spring-omega8 systemd[1]: Unit logstash.service entered failed state.
Dec 11 11:15:52 spring-omega8 systemd[1]: logstash.service failed.
Dec 11 11:15:52 spring-omega8 systemd[1]: logstash.service holdoff time over, scheduling restart.
Dec 11 11:15:52 spring-omega8 systemd[1]: Stopped logstash.
Dec 11 11:15:52 spring-omega8 systemd[1]: start request repeated too quickly for logstash.service
Dec 11 11:15:52 spring-omega8 systemd[1]: Failed to start logstash.
Dec 11 11:15:52 spring-omega8 systemd[1]: Unit logstash.service entered failed state.
Dec 11 11:15:52 spring-omega8 systemd[1]: logstash.service failed.

注意到其中有一行命令:

/usr/share/logstash/bin/logstash --path.settings /etc/logstash

单独拎出来这一行运行,logstash启动成功。

黑人问号.jpg

没辙了,那就去看看日志。 日志在 /var/log/messages 文件中。

很明显他提示你的JAVA_HOME找不到, 然后我们来看看自己有没有配置JAVA_HOME呢: echo $JAVA_HOME
显然我们配置了的,但是!注意了,本人的jdk是通过解压包安装的,而不是yum安装的,那么有什么不同呢? 我们看下为什么会报这个错。

找到路径为 /usr/share/logstash/bin/下的 logstash.lib.sh文件,注意这里

也就是说当你通过systemctl start logstash命令行去启动logstash时,他会默认从$JAVA_HOME/bin/java去读取,如果你通过解压包安装,你配置的JAVA_HOME没能被logstash读取到,所以报错了。这里笔者没有研究为何自己配置的JAVA_HOME不生效,也没有测试yum安装jdk的话是否有这个问题。

问题找到了,那么解决问题也简单。直接在这个配置文件中加上一行配置JAVA_HOME="你自己安装的jdk路径 如 /usr/src/java" 然后重启就行了。

再看一下 status:

就已经启动成功啦!

另外,我参阅其他文章的时候说到,logstash默认配置文件是去 /usr/bin、/bin、/sbin、/usr/sbin 找Java,而我们手动安装java所以无法找到,可以通过在java目录下创建一个硬链接,链接到/bin目录下解决,笔者没有尝试过。有试过的小伙伴可以评论提出来是否成功了。