我的意图是从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"
}
}
答案 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,您可以在输入部分使用它。