ELK中的logstash启动后无输出

来源:互联网 发布:我的世界pe快速建造js 编辑:程序博客网 时间:2024/06/06 02:19

      在《elasticsearch技术解析与实战》第370页第10章ELK应用,书中以收集Nginx日志为例来说明;我这里用的版本分别是elasticsearch-2.3.0、logstash-2.3.0、kibana-4.5.0;和书中的版本不同,在373页我按照书上的例子取一条典型的nxlog日志,保存文件名为nxlog_access.log,编写配置文件,文件名为logstash_nxlog.conf:

input{    file{        path => "D:/elasticsearch/logstash-2.3.0/nxlog_access.log"        start_position => beginning    }}filter{    grok{        match => {            "message" => "%{COMBINEDAPACHELOG}"        }    }}output{    elasticsearch{        hosts => ["127.0.0.1:9200"]        user => "es_admin"        password => "123456"    }    stdout{        codec => rubydebug    }}

   

       当我先启动elasticsearch,再运行logstash -f  ..\logstash_nxlog.conf ,结果并没有得到像书中样的输出,二是只显示了下面两句话:


    

      然后光标就一直在“Pipeline main started"这一行下面闪烁,也无法输入,也没有得到期待的输出。后来在elasticsearch官网讨论区看到相似的问题,那个人对于这种情况是这么回答的:

        翻译过来就是:这意味着logstash正在等待接收新数据,我已经指定让他读取那个log文件了,那里面已经有数据了呀,为什么还要等待新数据。接着看第二句话,意思是打开那个log文件,将末尾添加几行(有数据或空行都行)再保存。我试着做了,我添加了几行空行,一直按enter回车键保存了几行空行,刚按ctrl+s,马上控制台就有输出了:


      如果你加了几行空行,虽然有输出了,但是那几行空行会解析错误,就会在控制台输入如下:


       起码你知道哪里错了,但是为什么要追加并保存才会触发输出呢,网上有人说是logstash默认不处理一天前的文件,后来试验了一下发现确实是时间的问题,只不过这个时间是文件的创建时间或修改时间。今天是9月18日,刚开始我一直用的是6月份的nginx日志文件,怪不得启动logstash没有输出,后来新建一个txt文件,里面放入一条Apache日志,因为是今天创建的嘛,启动logstash后立马就看到输出了。


参考地址:http://ask.csdn.net/questions/337445

http://blog.csdn.net/zhaoyangjian724/article/details/52274656(logstash默认不处理一天前的文件)

https://discuss.elastic.co/t/no-response-after-pipeline-main-started/57167/2(官网讨论区)