在logstash和elasticsearch之间丢失消息

时间:2016-10-05 16:09:11

标签: elasticsearch logstash kibana

在我们测试ESK堆栈并了解所有这些工作原理时,我的设置如下:

  • 运行filebeat的客户端服务器(CS)将输出发送到在站点聚合器节点(AN)上运行的logstash。

  • AN使用一些过滤器运行logstash,然后在我们的Elasticsearch / Kibana节点(ESK)上转发到rabbitmq。

  • ESK运行rabbitmq,logstash从rabbitmq中提取消息,然后将输出发送到elasticsearch(不进行过滤)。 Kibana是我们的可视化(很明显),我们对弹性搜索都很新,所以我们没有直接使用它。

问题在于:

CS会生成一条消息。它肯定会被发送到AN,其中logstash过滤它并将它开启(在将它回显到logstash.stdout之后)。 ESK上的logstash实例也可以看到它(并将其写入logstash.stdout)。我可以在两个logstash实例中看到消息。它们匹配并被适当标记。但它们在Kibana中不可见。

我们的配置和来自两个日志的示例消息都在这里以gist形式出现:https://gist.github.com/wortmanb/ebd37b8bea278d06ffa058c1513ef940

这些消息可以在哪里发生?他们没有出现在Kibana中 - 如果我过滤带有标签的消息:“puppet”,当我知道这些消息流动时,我在时间框架内基本上什么都没有。

有任何调试建议吗?

1 个答案:

答案 0 :(得分:1)

问题是您使用日期过滤器解析日志的日期,默认情况下,该日期过滤器会替换@timestamp字段,该字段用于根据日期进行过滤。

  

当我知道这些消息流动时,我在时间框架内基本上什么都没有。

因此,消息不在流动的时间范围内,而是在编写时间范围内。

您可以看到“_grokparsefailure”日志,因为它们的日期未被解析,然后@timestamp是Logstash中的接收日期。

因此,您需要将时间范围更改为包括日志日期的时间范围。