我可以在 Logstash 中使用 mutate 过滤器将某些字段转换为 genjdbc 输入的整数吗?
Can I use mutate filter in Logstash to convert some fields to integers of a genjdbc input?
我正在使用 Logstash 的 genjdbc 输入插件从 DB2 数据库获取数据。它工作得很好,我在 Kibana 中将所有数据库列作为字段。
我遇到的问题是,在 Kibana 中,所有字段都是字符串类型,而我希望数字字段是整数。我已经尝试了下面的代码,但是如果不存在过滤子句,结果是一样的。
有人可以帮我解决这个问题吗?提前致谢!
logstash.conf代码:
input {
genjdbc {
jdbcHost => "XXX.XXX.XXX.XXX"
jdbcPort => "51260"
jdbcTargetDB => "db2"
jdbcDBName => "XXX"
jdbcUser => "XXX"
jdbcPassword => "XXX"
jdbcDriverPath => "C:\...\db2jcc4.jar"
jdbcSQLQuery => "SELECT * FROM XXX1"
jdbcTimeField => "LOGSTAMP"
jdbcPStoreFile => "C:\elk\logstash\bin\db2.pstore"
jdbcURL => "jdbc:db2://XXX.XXX.XXX.XXX:51260/XXX"
type => "table1"
}
genjdbc {
jdbcHost => "XXX.XXX.XXX.XXX"
jdbcPort => "51260"
jdbcTargetDB => "db2"
jdbcDBName => "XXX"
jdbcUser => "XXX"
jdbcPassword => "XXX"
jdbcDriverPath => "C:\...\db2jcc4.jar"
jdbcSQLQuery => "SELECT * FROM XXX2"
jdbcTimeField => "LOGSTAMP"
jdbcPStoreFile => "C:\elk\logstash\bin\db2.pstore"
jdbcURL => "jdbc:db2://XXX.XXX.XXX.XXX:51260/XXX"
type => "table2"
}
}
filter {
mutate {
convert => [ "T1", "integer" ]
convert => [ "T2", "integer" ]
convert => [ "T3", "integer" ]
}
}
output {
if [type] == "table1" {
elasticsearch {
host => "localhost"
protocol => "http"
index => "db2_1-%{+YYYY.MM.dd}"
}
}
if [type] == "table2" {
elasticsearch {
host => "localhost"
protocol => "http"
index => "db2_2-%{+YYYY.MM.dd}"
}
}
}
只要您尝试转换为整数的字段名称为 T1、T2、T3 并且您要插入到没有任何数据的索引中,您所拥有的就应该有效。如果索引中已有数据,则需要删除索引,以便 logstash 可以使用正确的映射重新创建它。
我正在使用 Logstash 的 genjdbc 输入插件从 DB2 数据库获取数据。它工作得很好,我在 Kibana 中将所有数据库列作为字段。 我遇到的问题是,在 Kibana 中,所有字段都是字符串类型,而我希望数字字段是整数。我已经尝试了下面的代码,但是如果不存在过滤子句,结果是一样的。
有人可以帮我解决这个问题吗?提前致谢!
logstash.conf代码:
input {
genjdbc {
jdbcHost => "XXX.XXX.XXX.XXX"
jdbcPort => "51260"
jdbcTargetDB => "db2"
jdbcDBName => "XXX"
jdbcUser => "XXX"
jdbcPassword => "XXX"
jdbcDriverPath => "C:\...\db2jcc4.jar"
jdbcSQLQuery => "SELECT * FROM XXX1"
jdbcTimeField => "LOGSTAMP"
jdbcPStoreFile => "C:\elk\logstash\bin\db2.pstore"
jdbcURL => "jdbc:db2://XXX.XXX.XXX.XXX:51260/XXX"
type => "table1"
}
genjdbc {
jdbcHost => "XXX.XXX.XXX.XXX"
jdbcPort => "51260"
jdbcTargetDB => "db2"
jdbcDBName => "XXX"
jdbcUser => "XXX"
jdbcPassword => "XXX"
jdbcDriverPath => "C:\...\db2jcc4.jar"
jdbcSQLQuery => "SELECT * FROM XXX2"
jdbcTimeField => "LOGSTAMP"
jdbcPStoreFile => "C:\elk\logstash\bin\db2.pstore"
jdbcURL => "jdbc:db2://XXX.XXX.XXX.XXX:51260/XXX"
type => "table2"
}
}
filter {
mutate {
convert => [ "T1", "integer" ]
convert => [ "T2", "integer" ]
convert => [ "T3", "integer" ]
}
}
output {
if [type] == "table1" {
elasticsearch {
host => "localhost"
protocol => "http"
index => "db2_1-%{+YYYY.MM.dd}"
}
}
if [type] == "table2" {
elasticsearch {
host => "localhost"
protocol => "http"
index => "db2_2-%{+YYYY.MM.dd}"
}
}
}
只要您尝试转换为整数的字段名称为 T1、T2、T3 并且您要插入到没有任何数据的索引中,您所拥有的就应该有效。如果索引中已有数据,则需要删除索引,以便 logstash 可以使用正确的映射重新创建它。