在Logstash 7.0中定义常量

时间:2019-04-16 17:51:09

标签: java elasticsearch logstash

我的意图是从Oracle数据库中索引ElasticSearch N表。为此,我为输入部分中的每个表定义了一个jdbc。例如,我不想重复每个jdbc条目中JDBC jar的位置,因此我尝试mutate/add_field一次设置该值,但这是行不通的。我得到

Couldn't find any input plugin named 'mutate'

我尝试使用stdin而不是mutate,但它也不起作用。有什么想法如何设置和使用常量?

input {
  mutate {
      add_field => { "[@metadata][lib]" => "/path/to/lib/ojdbc8.jar" }
  }

  jdbc {
    jdbc_driver_library => [@metadata][lib]
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@//localhost:1521/XE"
    jdbc_user => "user"
    jdbc_password => "pwd"
    schedule => "* * * * *"
    statement => "SELECT col1 from table1"
  }

  jdbc {
    jdbc_driver_library => [@metadata][lib]
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@//localhost:1521/XE"
    jdbc_user => "user"
    jdbc_password => "pwd"
    schedule => "* * * * *"
    statement => "SELECT col2 from table2"
  }

}
output {
     elasticsearch {
        hosts => ["localhost:9200"]
        index => "my_index"
        user => "kibana"
        password => "changeme"
    }
}

2 个答案:

答案 0 :(得分:2)

正如@Alain Collins所述,您可以使用环境变量。这是一个示例:

input {
  jdbc {
    jdbc_driver_library => "${JDBC_DRIVER_LIB}"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@//localhost:1521/XE"
    jdbc_user => "user"
    jdbc_password => "pwd"
    schedule => "* * * * *"
    statement => "SELECT col1 from table1"
  }
}

,然后在启动Logstash进程时可以设置环境变量。例如,如果您使用命令行启动Logstash进程:

JDBC_DRIVER_LIB=/path/to/lib/ojdbc8.jar /PATH_TO_LOGSTASH_BIN_DIR/logstash -f YOUR_CONFIG.yaml

答案 1 :(得分:0)

错误消息为您提供了一个线索-mutate是一个过滤器插件,在输入或输出部分中不可用。

您可以尝试使用environment variables,您可以在输入部分使用它。