在 logstash 和 elasticsearch 之间丢失消息
Losing messages between logstash and elasticsearch
在测试 ESK 堆栈并了解其工作原理时,我的设置如下:
客户端服务器 (CS) 运行 filebeat 将输出发送到站点聚合器节点 (AN) 上的 logstash 运行。
AN 使用一些过滤器运行 logstash,然后转发到我们 Elasticsearch/Kibana 节点 (ESK) 上的 rabbitmq。
ESK 运行 rabbitmq,logstash 在将输出发送到 elasticsearch(不过滤)之前从 rabbitmq 中提取消息。 Kibana 是我们的可视化(很明显),我们对 elasticsearch 都很陌生,所以我们没有直接用它做太多事情。
这是问题所在:
CS 生成一条消息。它肯定会被发送到 AN,在那里 logstash 过滤它并转发它(在回显到 logstash.stdout 之后)。 ESK 上的 logstash 实例也能看到它(并将其写入 logstash.stdout)。我可以在两个 logstash 实例中看到消息。它们匹配并被适当标记。但它们在 Kibana 中不可见。
我们的配置和来自两个日志的示例消息都以要点形式显示在这里:https://gist.github.com/wortmanb/ebd37b8bea278d06ffa058c1513ef940
这些消息会去哪里?它们不会出现在 Kibana 中——如果我过滤带有标签的消息:"puppet",在我知道这些消息正在流动的时间范围内,我基本上什么也得不到。
有调试建议吗?
问题是您正在使用日期过滤器解析日志的日期,默认情况下,它会替换 @timestamp
字段,该字段用于根据日期进行过滤。
I get basically nothing during timeframes when I know these messages are flowing.
所以消息不在它们流动的时间范围内,而是在它们被写入的时间范围内。
您可以看到“_grokparsefailure”日志,因为它们的日期未被解析,那么 @timestamp
是 Logstash 中的接收日期。
因此,您需要将时间范围更改为包含日志日期的时间范围。
在测试 ESK 堆栈并了解其工作原理时,我的设置如下:
客户端服务器 (CS) 运行 filebeat 将输出发送到站点聚合器节点 (AN) 上的 logstash 运行。
AN 使用一些过滤器运行 logstash,然后转发到我们 Elasticsearch/Kibana 节点 (ESK) 上的 rabbitmq。
ESK 运行 rabbitmq,logstash 在将输出发送到 elasticsearch(不过滤)之前从 rabbitmq 中提取消息。 Kibana 是我们的可视化(很明显),我们对 elasticsearch 都很陌生,所以我们没有直接用它做太多事情。
这是问题所在:
CS 生成一条消息。它肯定会被发送到 AN,在那里 logstash 过滤它并转发它(在回显到 logstash.stdout 之后)。 ESK 上的 logstash 实例也能看到它(并将其写入 logstash.stdout)。我可以在两个 logstash 实例中看到消息。它们匹配并被适当标记。但它们在 Kibana 中不可见。
我们的配置和来自两个日志的示例消息都以要点形式显示在这里:https://gist.github.com/wortmanb/ebd37b8bea278d06ffa058c1513ef940
这些消息会去哪里?它们不会出现在 Kibana 中——如果我过滤带有标签的消息:"puppet",在我知道这些消息正在流动的时间范围内,我基本上什么也得不到。
有调试建议吗?
问题是您正在使用日期过滤器解析日志的日期,默认情况下,它会替换 @timestamp
字段,该字段用于根据日期进行过滤。
I get basically nothing during timeframes when I know these messages are flowing.
所以消息不在它们流动的时间范围内,而是在它们被写入的时间范围内。
您可以看到“_grokparsefailure”日志,因为它们的日期未被解析,那么 @timestamp
是 Logstash 中的接收日期。
因此,您需要将时间范围更改为包含日志日期的时间范围。