В моем Logstash у меня есть один конвейер, который выполняет 2 SQL-запроса для загрузки данных. Ниже файл конфига для конвейера:
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"]
}
}