在我的 Logstash 中,我有一个运行 2 个 SQL 查询来下载数据的管道。下面是管道的conf文件:
input {
jdbc {
jdbc_driver_library => "/opt/logstash/lib/ojdbc8.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
#Hidden db connection details
statement_filepath => "/etc/logstash/queries/transactions_all.sql"
type => "transactions"
}
jdbc {
jdbc_driver_library => "/opt/logstash/lib/ojdbc8.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
#Hidden db connection details
statement_filepath => "/etc/logstash/queries/snow_db_stats_ts_all.sql"
type => "db_stats_ts"
}
output{
if [type] == "transactions" {
elasticsearch {
index => "servicenow_oraaspoc-%{+YYYY.MM.dd}"
hosts => ["localhost:9200"]
}
}
if [type] == "db_stats_ts" {
elasticsearch {
index => "snow_db_stats_ts-%{+YYYY.MM.dd}"
hosts => ["localhost:9200"]
}
}
stdout {
codec => rubydebug
}
}
我可以在控制台中看到一切正常,除了索引类型transactions
永远不会保存到 Elasticsearch。这个条件if [type] == "transactions" {
永远不会成立,第二个条件没有任何问题。我尝试在transactions
没有 if 条件的情况下仅使用索引运行管道,并且效果很好。出于某种原因,如果条件不起作用,但为什么?
我找到了一个荒谬的解决方法,但如果我遇到另一个索引存在此问题,它将无法正常工作:
if [type] == "db_stats_ts" { .. } else {
elasticsearch {
index => "servicenow_oraaspoc-%{+YYYY.MM.dd}"
hosts => ["localhost:9200"]
}
}