0

logstash.conf我已经建立了一个logstash管道,用jdbc输入和elasticsearch输出监视s的目录。

我启用.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 中可用。有没有办法在查询完成后将时间戳写入文件(用作我的应用程序中的标志)?

4

2 回答 2

1

最终,我能够通过利用多个管道获得所需的结果感谢@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,因为我不关心数据本身。

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

于 2019-08-26T20:48:27.487 回答
1

我不知道 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"
  }
}

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

查看所有配置设置的文件输入插件文件输出插件

于 2019-08-25T07:50:18.753 回答