开门见山,这几天在弄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目录下解决,笔者没有尝试过。有试过的小伙伴可以评论提出来是否成功了。