知道 logstash 何时完成处理其管道中的所有内容
Posted
技术标签:
【中文标题】知道 logstash 何时完成处理其管道中的所有内容【英文标题】:Know when logstash has finished processing everything in its pipelines 【发布时间】:2019-06-26 14:41:04 【问题描述】:我有一个相对复杂的 logstash 管道设置,一些管道馈入其他管道,拆分事件,对外部服务进行 http 调用,有时将事件反馈到它来自的管道中。 (有防止无限循环的逻辑)。
我正在尝试编写一些集成测试,将测试事件馈送到正在运行的 Logstash,等待 Logstash 完成对它们的完全处理(包括它们产生的任何额外事件),然后检查结果输出是否符合预期.
这个 logstash 实例不应该从其他地方接收任何额外的输入,所以我认为检查它是否“空闲”就足够了(忽略与 xpack 监控有关的任何事件)。
我认为管道统计监控 API 可能是我想要使用的 - https://www.elastic.co/guide/en/logstash/current/node-stats-api.html#pipeline-stats - 但我不确定。如果每个管道的“输入”和“输出”值都相等,这是否意味着我可以确定没有更多的“在飞行中”?或者这些计数器是否可能由于其他原因不同步,例如事件拆分,事件过滤?
https://discuss.elastic.co/t/pipeline-stats-api-in-out-filtered/163742 的讨论(以及链接之后)似乎表明“in”和“out”将始终同步出现,但有一个错误表明情况不应该如此 - https://github.com/elastic/logstash/issues/8752 - 以及相关的错误显示了进出不同的情况 - https://github.com/elastic/logstash/issues/8753
【问题讨论】:
【参考方案1】:大多数时候,我发现使用事件统计 API https://www.elastic.co/guide/en/logstash/current/node-stats-api.html#event-stats 并等待“out”等于“in”可以达到我想要的效果。
但是,我有时目睹“out”高于“in” - 我无法追查到这一点,但我认为当其他地方出现错误时会发生这种情况。
所以这个检查对于集成测试来说可能已经足够好了,当你之后要再次拆除 logstash 时——但我不想在生产中依赖它。
遗憾的是,我无法找到这些数字含义的任何官方定义。
【讨论】:
以上是关于知道 logstash 何时完成处理其管道中的所有内容的主要内容,如果未能解决你的问题,请参考以下文章