elasticsearch - Logstash 调度首次运行
问题描述
我有一个logstash管道,每5分钟运行一次,低于jdbc输入配置,问题是第一次启动管道时,它也等待5分钟然后开始调度。有什么方法可以指定我们的查询/语句在 logstash 管道启动后立即执行,而不是在前 5 分钟等待?
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"
}
}
解决方案
另一种解决方法是使用两个 jdbc 输入,一个用于启动,一个用于调度。它需要一些复制/粘贴,但还不错。
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"
}
}
}
推荐阅读
- json - 如何在后台运行并显示可点击通知的android应用程序中运行cron作业
- c# - WPF TextBlock 动画闪烁不起作用
- rest - API Rest上的SAML Authentication,打开认证页面
- asp.net - 模型和 DTO 上的 AutoMapper 映射异常
- wpf - wpf GridViewDataColumn 通过多个属性绑定
- ios - 苹果铅笔点击手势识别问题
- javascript - 从 Javascript 到 Go 的字符串模 Int
- python - pybind11::dict 中的 pybind11::object
- python - 如何找到与拟合双高斯的 y 轴的交点
- google-apps-script - 谷歌电子表格,第一列是脚本选择的