Logstash Kibana指数模式显示错误结果
我正在使用ELK堆栈,其中我在logstash中使用了jdbc输入Logstash Kibana指数模式显示错误结果,logstash,kibana,elastic-stack,
elasticsearch-5,logstash-jdbc,Logstash,Kibana,Elastic Stack,
elasticsearch 5,Logstash Jdbc,我正在使用ELK堆栈,其中我在logstash中使用了jdbc输入 我已经创建了两个索引 使用者 雇员 两个索引都有一个相同的列objid 日志存储配置文件 input { jdbc { jdbc_driver_library => "/opt/application/cmt/ELK/logstash-5.3.0/ojdbc14.jar" jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
我已经创建了两个索引
objid
日志存储配置文件
input {
jdbc {
jdbc_driver_library => "/opt/application/cmt/ELK/logstash-5.3.0/ojdbc14.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_connection_string => "jdbc:oracle:thin:@xx.xxx.xx.xx:xxxx:abc"
jdbc_user => "xxxx"
jdbc_password => "xxxxx"
schedule => "*/2 * * * *"
statement => "select * from table_employee"
}
}
output {
elasticsearch {
index => "employees"
document_type => "employee"
document_id => "%{objid}"
hosts => "xx.xxx.xxx.xx:9200"
}
}
input {
jdbc {
jdbc_driver_library => "/opt/application/cmt/ELK/logstash-5.3.0/ojdbc14.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_connection_string => "jdbc:oracle:thin:@xx.xxx.xx.xx:xxxx:abc"
jdbc_user => "xx"
jdbc_password => "xxxxxxx"
schedule => "*/2 * * * *"
statement => "select A.OBJID,A.LOGIN_NAME,A.STATUS,A.USER_ACCESS2PRIVCLASS,A.USER_DEFAULT2WIPBIN,A.SUPVR_DEFAULT2MONITOR,A.USER2RC_CONFIG,A.OFFLINE2PRIVCLASS,A.WIRELESS_EMAIL from table_user a where A.STATUS=1"
}
}
output {
elasticsearch {
index => "users"
document_type => "user"
document_id => "%{objid}%{login_name}"
hosts => "xx.xxx.xxx.xx:9200"
}
}
第一次输入jdbc“employees”包含26935
记录
第二个输入jdbc“用户”包含10619
记录
常见记录:9635
(objid匹配)
第一个问题是,当我在kibana中创建索引模式时
使用者
它显示了37554的计数,为什么?它应该只显示10619
第二个问题:当我将索引模式创建为'
雇员
它显示了27919的计数,为什么?它应该只显示26935
此外,我还为索引“users”
%{objid}%{login\u name}
创建了不同的文档Id。如果您的用户和员工输入和输出在同一文件中/同时执行,正如您的示例所示,您需要使用条件将数据路由到正确的elasticsearch索引。Logstash将您的文件/文件连接到一个管道中,因此您的所有输入都通过所有过滤器/输出运行,这可能是您获得意外结果的原因。看这个
您需要执行以下操作:
input {
jdbc {
statement => "SELECT * FROM users"
type => "users"
}
}
input {
jdbc {
statement => "SELECT * FROM employees"
type => "employees"
}
}
output {
if [type] == "users" {
elasticsearch {
index => "users"
document_type => "user"
document_id => "%{objid}%{login_name}"
hosts => "xx.xxx.xxx.xx:9200"
}
}
if [type] == "employees" {
elasticsearch {
index => "employees"
document_type => "employee"
document_id => "%{objid}"
hosts => "xx.xxx.xxx.xx:9200"
}
}
}