logstash cron计划从特定时间开始每12小时运行一次

时间:2018-07-31 12:03:29

标签: elasticsearch logstash

我正在尝试0 1/12 * * * cron表达式,但它每天仅触发一次。以下是我的配置之一。

input {
    jdbc {
        jdbc_connection_string => "jdbc:redshift://xxx.us-west-2.redshift.amazonaws.com:5439/xxx"
        jdbc_user => "xxx"
        jdbc_password => "xxx"
        jdbc_validate_connection => true
        jdbc_driver_library => "/mnt/logstash-6.0.0/RedshiftJDBC42-1.2.10.1009.jar"
        jdbc_driver_class => "com.amazon.redshift.jdbc42.Driver"
        schedule => "0 1/12 * * *" #01:00,13:00, tried from https://crontab.guru/#0_1/12_*_*_*
        statement_filepath => "conf/log_event_query.sql"
        use_column_value => true
        tracking_column => dw_insert_dt
        last_run_metadata_path => "metadata/logstash_jdbc_last_run_log_event"
    }
}
output {
    elasticsearch {
        index => "logs-ics_%{+dd_MM_YYYY}"
        document_type => "log_event"
        document_id => "%{log_entry_id}"
        hosts => [ "x.x.x.x:xxxx" ]
    }
}

我还在https://www.freeformatter.com/cron-expression-generator-quartz.html0 0 1/12 ? * * *下面尝试过,但是lostash不支持这种类型。 已使用Original cron。

请帮助我获得一个cron表达式,该表达式可以根据以下日期在logstash中使用,并且还有一个在线页面可以测试我未来的logstash cron表达式吗?

1st  at 2018-08-01 01:00:00
then at 2018-08-01 13:00:00
then at 2018-08-02 01:00:00
then at 2018-08-02 13:00:00
then at 2018-08-03 01:00:00

1 个答案:

答案 0 :(得分:0)

您的日程安排格式似乎不正确。

要执行每十二小时一次的任务,请使用*/12,而不要使用1/12

0 */12 * * * # Every twelve hours at minute 0 of the hour.

您的日程安排看起来更像是尝试在1点和12点运行任务,但是要这样做,您将使用逗号,如下所示:

0 1,12 * * * # Run at one and twelve hours at minute 0.

如果您需要使用rufus扩展名来在非默认计算机时钟的特定时区安排运行时间,则rufus扩展名还可以添加时区(例如Asia / Kuala_Lumpur)。

您的上述代码未向我们显示您正在运行的SQL查询。该查询可能正在触发,但是如果查询没有结果,则不会在logstash中获得任何输入。无论如何,您的调度语法都需要从1/12更改为*/12才能执行您想要的操作。

更一般地,根据logstash jdbc输入插件文档,调度格式被认为是cron-like。 logstash jdbc输入插件使用ruby Rufus调度程序。该计划格式的文档位于:https://github.com/jmettraux/rufus-scheduler#parsing-cronlines-and-time-strings

Logstash 6.0 JDBC插件文档在这里:https://www.elastic.co/guide/en/logstash/6.0/plugins-inputs-jdbc.html

希望这会有所帮助。