Logstash 作为具有 JDBC 输入的服务

Logstash as a service with JDBC input

我目前有一项服务 运行 有几个查询可以在我的数据库中构建数据。然后它使用 Logstash 的 JDBC 输入插件将数据发送到 Elastic Search。 问题是 Logstash 需要花费大量时间进行引导(有时比将数据发送到 Elastic Search 所需的时间还多)。

我决定探索将 Logstash 运行ning 作为一项服务来消除这个引导时间,但是似乎没有办法将其 运行ning 作为一项服务并接受 "requests" 到 运行 JDBC 语句。

最接近的似乎是使用 TCP/HTTP/Websocket 插件从我的服务接收数据,然后将其发送到 Elastic Search。

尝试开发这样的东西是否有意义,或者直接与 Elastic Search 通信是否会更好?

希望我的问题够清楚了,谢谢。

回答我自己的问题,以供将来遇到同一问题的任何人参考。

阅读了大量的论坛讨论后,我得出的结论是:

  1. 目前无法设置JDBC输入并随意触发(https://discuss.elastic.co/t/trigger-logstash-jdbc-input-plugin/54278)。您可以获得的最接近的方法是使用 schedule 选项定期执行此操作,或者通过 starting/stopping 手动服务,这将我们带到
  2. 启动 Logstash 需要相当多的时间,因为这是一项 Java 服务 (Why does logstash take so long to start/load?). The only way to speed this up is to either increase the machine's specs or, for versions prior to 5.5.0, modify the source of entropy for java: (https://discuss.elastic.co/t/logstash-starting-damn-slow/125708/3)
  3. 一个人可以完全使用 Logstash 并使用一个(或多个并行!!!)ES _bulk 请求来尽快填充索引 (https://discuss.elastic.co/t/fastest-way-to-import-billions-of-documents/81317/3)。
  4. 如果不想放弃 Logstash,那么建议编写一个自定义输入插件:https://www.elastic.co/guide/en/logstash/current/input-new-plugin.html.