zoukankan      html  css  js  c++  java
  • logstash启动失败的问题追查

    在实验中logstash是作为日志过滤器的作用,日志收集使用的则是filebeat组件。redis作为缓存器,logstash从redis中拉取数据进行过滤并传给elasticsearch组件。

    但是logstash总是启动失败,还没有报错信息,因此追查起来异常艰难。

    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: Unit logstash.service entered failed state.
    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: logstash.service failed.
    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: logstash.service holdoff time over, scheduling restart.
    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: start request repeated too quickly for logstash.service
    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: Failed to start logstash.
    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: Unit logstash.service entered failed state.
    Jan 15 07:13:42 ip-172-31-22-29.ec2.internal systemd[1]: 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[1]: Unit logstash.service entered failed state.
    Jan 15 07:23:32 ip-172-31-22-29.ec2.internal systemd[1]: logstash.service failed.
    Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[1]: logstash.service holdoff time over, scheduling restart.
    Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[1]: start request repeated too quickly for logstash.service
    Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[1]: Failed to start logstash.
    Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[1]: Unit logstash.service entered failed state.
    Jan 15 07:23:33 ip-172-31-22-29.ec2.internal systemd[1]: 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之间的连接是正常响应的。

  • 相关阅读:
    25、排序算法之选择法排序 (待完成)
    24、求一个3×3的整型矩阵对角线元素之和
    23、32、输入一个字符,输出其大写字符 (待完成)
    22、有一个已排好序的数组,要求输入一个数字后,按原来的排序规律将它插入数组
    21、二维数组行列转换
    20、30、用冒泡法对N个数排序--升序 (完成)
    19、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个1~9的数字。例如2+22+222+2222+22222(此时共有5个数相加)。
    18、1-3+5-7+···-99+101等于多少
    17、反向输出
    16、判断101-200之间有多少个素数,并输出所有素数。
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10273974.html
Copyright © 2011-2022 走看看