logstash启动失败的问题追查
在实验中logstash是作为日志过滤器的作用,日志收集使用的则是filebeat组件。redis作为缓存器,logstash从redis中拉取数据进行过滤并传给elasticsearch组件。
但是logstash总是启动失败,还没有报错信息,因此追查起来异常艰难。
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: Unit logstash.service entered failed state.
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: logstash.service failed.
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: logstash.service holdoff time over, scheduling restart.
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: start request repeated too quickly for logstash.service
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: Failed to start logstash.
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: Unit logstash.service entered failed state.
Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[]: logstash.service failed.
就像上面的这个样子,什么也看不出来问题信息在哪。
今天我们来看一下logstash的一些用法:
1、查看配置文件:

logstash服务中,会去pipelines.yml中过滤数据,但这个文件的内容其实指向的是conf.d这个目录,因此我们要在conf.d目录下创建好配置文件,以备logstash服务来对数据进行使用。
2、我们在conf.d目录下创建一个新文件并写入一些信息

3、保存好之后我们就可以进行启动了,但是启动报错了。
[root@:vg_adn_tidbCkhsTest: /etc/logstash]#systemctl status logstash
● logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; disabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Tue 2019-01-15 07:23:33 UTC; 2s ago
Process: 11144 ExecStart=/usr/share/logstash/bin/logstash --path.settings /etc/logstash (code=exited, status=1/FAILURE)
Main PID: 11144 (code=exited, status=1/FAILURE) Jan 15 07:23:32 ip-172-31-22-29.ec2.internal systemd[]: Unit logstash.service entered failed state.
Jan 15 07:23:32 ip-172-31-22-29.ec2.internal systemd[]: logstash.service failed.
Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[]: logstash.service holdoff time over, scheduling restart.
Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[]: start request repeated too quickly for logstash.service
Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[]: Failed to start logstash.
Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[]: Unit logstash.service entered failed state.
Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[]: logstash.service failed.
报错信息看不出来问题出在哪里。后来我按照下列步骤来进行检查。
我们定位到这一行信息

这可以看出来systemctl start logstash触发的是这一条命令进行启动程序的。因此我们以这样的方式进行启动程序
如果以这样的方式进行启动我们发现
[root@:vg_adn_tidbCkhsTest: /etc/logstash]#/usr/share/logstash/bin/logstash --path.settings /etc/logstash
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2019-01-15T07:22:16,497][FATAL][logstash.runner ] Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting.
[2019-01-15T07:22:16,521][ERROR][org.logstash.Logstash ] java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit
这个报错意思是说我之前已经启动了一个logstash实例了,我又想起来使用的是nohup方式以后台启动的,虽然没有启动成功,但是却占用进程不放,因此我们找出来把他kill掉即可。
kill掉之后再次使用这个命令就可以启动成功了,这个命令的功能跟下面这个比较类似:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/l.conf
可以看出结果是指定了-f选项就要指定详细的配置文件,而指定--path.settings参数则是指定目录,因为它会从pipelines.yml这个文件中去找文件。
4、后来查出原因为什么systemctl命令不能启动logstash成功的原因是什么了,我们再使用systemctl命令启动程序时,最好查看一下/var/log/messages这个日志信息。今天就捕捉到原因了:

原理是因为JAVA环境变量引起的问题,好吧,logstash使用RPM包安装的,而JAVA使用的是tar包解压缩的,环境变量没有任何问题,可是这几个组件总是说找不到环境变量。所以我认为java这个环境变量以后使用yum一键安装最好了。如何还是想解压缩的话,那就创建个硬链接,把java的bin目录里面的各个二进制文件链接到/bin目录里面,我发现这几个组件总是到/usr/bin、/bin、/sbin、/usr/sbin这四个目录下寻找环境变量(这四个路径是Linux系统一开始安装好的最原始的PATH变量),后面你新加的环境变量都没有起作用。
既然明白了错误在哪里,就知道了如何去修改它,所以我就在java目录下创建一个硬链接,链接到/bin目录下好了。
其实像java的程序,我们使用yum一键安装最好了。
5、像redis这样的缓存,filebeat要使用,logstash也要使用,所以我们要看好这两个服务分别与redis之间的连接是正常响应的。
logstash启动失败的问题追查的更多相关文章
- windows service 1053错误 启动失败
		
做项目移植的时候发现一个项目的window service启动失败,最后试出来是启动时间超时 解决办法是给window service设置一个长一点的等待时间,步骤如下: 启动,输入regedit启动 ...
 - 玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
		
将VS创建的Windows服务项目编译生成的程序,通过命令行 “服务.exe -Service”注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服 ...
 - ubuntu升级内核后vmware-player启动失败
		
在虚拟机软件中,vmware player是对硬件支持很好的,通过它可以很方便的使用网银.单片机开发等等工作.但是最近ubuntu每次升级内核后,vmware都会启动失败,提示:Before you ...
 - CentOS 7下MySQL服务启动失败的解决思路
		
今天,启动MySQL服务器失败,如下所示: [root@spark01 ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl): Jo ...
 - 服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败
		
案例环境: 操作系统 : Microsoft Windows Server 2003 Standard Edtion SP2 数据库版本 : SQL Server 2005 Standard Ed ...
 - db2start启动失败
		
db2start启动失败 [db2inst1@localhost ~]$ db2start db2start: error while loading shared libraries: libaio ...
 - PHP5.6启动失败
		
PHP编译安装完毕,启动失败,提示 1 [23-Jun-2014 12:27:02] ERROR: failed to open configuration file '/usr/local/php/ ...
 - IIs管理服务一直启动失败的原因之一
		
首先eventlog里面的日志: 万维网发布服务(WWW 服务)没有为站点 1 注册 URL 前缀 https://*:8172/.该站点已被禁用.数据字段包含错误号. IISWMSVC_STARTU ...
 - win10 MySQL启动失败问题
		
系统升级到win10之后,本地装的MySQL却突然不能启动,系统显示明明就有,可是总是启动失败.在这里解决一下: 解决win10 mysql服务消失,连接不上的问题,注意:以管理员身份运行DOS命令 ...
 
随机推荐
- (剑指Offer)面试题45:圆圈中最后剩下的数字
			
题目: 0,1,...n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 思路: 1.环形链表模拟圆圈 创建一个n个节点的环形链表,然后每次在 ...
 -   Java后端学习路线图,你真的只需要这一张!
			
 前言 学习路线图往往是学习一样技术的入门指南.网上搜到的Java学习路线图也是一抓一大把. 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点.所谓不求最好,但求最全,学习Java ...
 - 从零开始学 Web 之 移动Web(四)实现JD分类页面
			
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
 - EOS生产区块:解析插件producer_plugin
			
producer_plugin是控制区块生产的关键插件. 关键字:producer_plugin,同步区块的处理,pending区块,生产区块,最后不可逆区块,生产循环,生产安排,水印轮次,计时器,确 ...
 - C语言第十一讲,预处理命令.
			
C语言第十一讲,预处理命令. 一丶预处理简介 什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件 这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理.提前 ...
 - myeclipse 添加mybatis generator插件
			
在红色的方框中输入下面的网址,一直下一步,最后finish即可. https://dl.bintray.com/mybatis/mybatis-generator/
 - SQL优化原则(转)
			
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
 - BizTalk 2010/2013 EDI B2B项目实践(1)
			
BizTalk 2010/2013 EDI B2B项目实践(1) BizTalk开发标准EDI B2B是件非常容易的事情,但对于初学者可能有很多专业术语不太理解,不知道如何下手,我之前开始学的时候虽然 ...
 - 序列化(pickle,shelve,json,configparser)
			
一,序列化 在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据结构,这个过程叫序列化,不同的序列化,结果也不同,但是目的是一样的,都是为了存储和传输. 在 ...
 - js------保留指定位数小数
			
// tofix.js文件// params// val: 要处理的数据,Number | String// len: 保留小数位数,位数不足时,以0填充// side: 1|-1 对应 入|舍exp ...