Kibana Index Pattern显示错误的结果

时间:2017-04-25 04:56:20

标签: logstash kibana elastic-stack elasticsearch-5 logstash-jdbc

我正在使用ELK堆栈,其中我在logstash中使用了jdbc输入
我创建了2个索引

  
      
  1. 用户
  2.   
  3. 员工
  4.   

两个索引都有一个相同的列objid
Logstash配置文件

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

此外,我还为索引“用户”%{objid}%{login_name}

创建了不同的文档ID

1 个答案:

答案 0 :(得分:1)

如果您的用户和员工输入和输出位于同一文件中/同时执行,正如您的示例所示,您需要使用条件将数据路由到正确的elasticsearch索引。 Logstash将您的文件/文件连接到一个管道中,因此所有输入都会贯穿所有过滤器/输出,这可能是您获得意外结果的原因。见discussion

你需要做这样的事情:

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"
    }
  }  
}