识别 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
管道。
我已经设置了一个 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
管道。