2017-04-25 95 views
0

我使用ELK栈Kibana索引图案中,我已经在logstash
我已经建立2个索引显示错误的结果

  1. 用户
  2. 员工
使用JDBC输入

这两个指标都有同一列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, '雇员' 包含26935记录

第二输入JDBC '用户' 包含10619记录

公共记录:9635(ObjID的比赛)

第一个问题是当ic reate在kibana索引模式为“

用户

它显示的37554数,为什么呢?它应该只显示10619

第二个问题:当我创建一个索引模式为“

员工

它显示的27919数,为什么呢?它应该只显示26935

而且我对指数“用户” %{objid}%{login_name}

回答

1

创建不同的文档ID如果您的用户和员工的输入和输出都在同一个文件/在同一时间执行,因为你的例子显示,您需要使用条件将数据路由到正确的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" 
    } 
    } 
}