Logstash, если условие типа не работает - PullRequest
0 голосов
/ 02 мая 2018

В моем 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"]
       }
   }

1 Ответ

0 голосов
/ 09 мая 2018

Как сказал Томас Деко, вы можете использовать теги вместо типа, кстати, вы можете использовать столько тегов, сколько вы хотите для каждого блока jdbc. Удалите типы из файла конфигурации с тегами, как в примере ниже:

tags => ["transactions"]

tags => ["db_stats_ts"]

Ваш выходной блок должен выглядеть так:

output{
       if "transactions" in [tags] {
         elasticsearch {
           index => "servicenow_oraaspoc-%{+YYYY.MM.dd}"
           hosts => ["localhost:9200"]
         }
       }
       if "db_stats_ts" in [tags] {
        elasticsearch {
          index => "snow_db_stats_ts-%{+YYYY.MM.dd}"
          hosts => ["localhost:9200"]
        }
       }
}
...