识别 logstash jdbc SQL 语句何时完成执行

Identifying when logstash jdbc SQL statement has completed execution

我已经设置了一个 logstash 管道,它使用 jdbc 输入和 elasticsearch 输出监视 logstash.conf 的目录。

我启用了 .logstash_jdbc_test_last_run,它记录了执行查询的时间:

--- 2019-08-23 15:26:42.847349000 Z

当在命令行上 运行 logstash 时,我的管道成功处理了一个 logstash conf 文件:

[2019-08-23T15:26:48,168][INFO ][logstash.inputs.jdbc     ] (5.250782s) select S0.* from mytable S0

我正在尝试通知我的应用程序 logstash 已完成处理 logstash conf 并且数据在 ES 中可用。有没有办法在查询完成时将时间戳写入文件(在我的应用程序中用作标志)?

我不知道 Logstash 在实际 完成 一个 SQL 查询时会记录时间戳。无论如何,您可以做的是在读取 .logstash_jdbc_test_last_run 文件的地方实施一个额外的管道。根据我的经验,Logstash 将不会更新时间戳,直到它获取所有记录。

所以这个管道看起来像那样(未经测试):

input{
  file{
    path => ["/your/absolute/path/to/.logstash_jdbc_test_last_run"]
    file_completed_action => "log"
    file_completed_log_path => "/path/where/logfile/should/be/stored"
    mode => "read"
    codec => "plain" # default, you could do json as well
  }
}
output{
  file{
    path => "/foo/bar/logstash_runs.txt"
  }
}

此管道将识别文件的每个 new/updated 时间戳并将其附加到您在输出插件中配置的指定文件。

查看所有配置设置的 file input plugin as well as the file output plugin

最终我能够通过利用多个管道获得预期的结果 谢谢@apt-get_install_skill,你让我走上了正确的道路!

pipelines.yml:

- pipeline.id: logstash
  pipeline.workers: 1
  path.config: "/tmp/logstash*.conf"
  queue.type: persisted
- pipeline.id: postprocessing
  pipeline.workers: 1
  path.config: "/tmp/postprocessing*.conf"

logstash.conf:

input {
   jdbc {
     ...
   }
}
output   {
    elasticsearch {
      ...
    }
    pipeline { send_to => [postProcessing] }
}

postprocessing.conf,它使用 logstash 管道的输出:

input {
    pipeline { address => postProcessing }
}
output {
    file{
        path => "/tmp/finishedflag"
        codec => "dots"
    }
}

编解码器 dots 因为我不关心数据本身。

当它 运行s 时,它将首先 运行 logstash 管道,当它完成时 运行s postprocessing 管道。