【问题标题】:Kibana Index Pattern showing wrong resultsKibana 索引模式显示错误结果
【发布时间】:2017-04-25 04:56:20
【问题描述】:

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

  1. 用户
  2. 员工

两个索引都有一个相同的列 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 'users' 包含 10619 记录

通用记录:9635(objid 匹配)

第一个问题是当我在 kibana 中创建一个索引模式为 '

用户

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

第二个问题:当我将索引模式创建为 '

员工

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

我还为索引“用户”%{objid}%{login_name}创建了不同的文档 ID

【问题讨论】:

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


    【解决方案1】:

    如果您的用户和员工输入和输出在同一个文件中/同时执行,如您的示例所示,您需要使用条件将您的数据路由到正确的弹性搜索索引。 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"
        }
      }  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多