Kamboh
Kamboh

Reputation: 185

Logstash Scheduling first run

I have a logstash pipeline running every 5 minutes with below jdbc input config, issue is upon starting the pipeline first time, it also waits for 5 minutes and then start scheduling. Is there any way to specify that we query/statement is executed as soon as the logstash pipeline is started instead of waiting on first 5 minutes too?

input {
  jdbc {
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://${DB_HOST}/${DB_NAME}?useSSL=false"
    jdbc_user => "${DB_USER_NAME}"
    jdbc_password => "${DB_PASSWORD}"
    schedule => "*/5 * * * *"    
    statement => "Select * from students"
  }
}

Upvotes: 4

Views: 1847

Answers (2)

James McGuigan
James McGuigan

Reputation: 8106

The other workaround to this is to have two jdbc inputs, one for startup and one for schedule. It requires a bit of copy/paste but is not too bad.

input {
    jdbc {
        id => "index_name_startup"
        jdbc_connection_string => "${JDBC_STRING}"
        jdbc_user => "${JDBC_USER}"
        jdbc_password => "${JDBC_PASSWORD}"
        jdbc_driver_library => "/opt/logstash/postgresql-42.2.5.jre7.jar"
        jdbc_driver_class => "org.postgresql.Driver"
        add_field => { "[@metadata][project_id]" => "index_name" }
        statement_filepath => "/mnt/elastic-search-config/sql-scripts/assets-index_name.sql"
    }

    jdbc {
        id => "index_name"
        jdbc_connection_string => "${JDBC_STRING}"
        jdbc_user => "${JDBC_USER}"
        jdbc_password => "${JDBC_PASSWORD}"
        jdbc_driver_library => "/opt/logstash/postgresql-42.2.5.jre7.jar"
        jdbc_driver_class => "org.postgresql.Driver"
        add_field => { "[@metadata][project_id]" => "index_name" }
        statement_filepath => "/mnt/elastic-search-config/sql-scripts/assets-index_name.sql"
        schedule => "0 * * * *"
    }
}

filter {
    mutate {
        gsub => [
         "name", "_", " ",
         "name", "-", " "
        ]
    }
}

output {
    if [@metadata][project_id] == "index_name" {
        elasticsearch {
            index => "index_name"
            document_id => "%{geom_id}"
            hosts => "localhost:9200"
            template_name => "assets_template"
            id => "index_name_es"
        }
    }
}

Upvotes: 4

Badger
Badger

Reputation: 4072

No, that is not the way rufus cron schedules work (and that is what the jdbc input uses). There is an open issue that includes a link to a patch that adds this.

Upvotes: 2

Related Questions