elasticsearch-5,logstash-jdbc,Logstash,Kibana,Elastic Stack,elasticsearch 5,Logstash Jdbc" /> elasticsearch-5,logstash-jdbc,Logstash,Kibana,Elastic Stack,elasticsearch 5,Logstash Jdbc" />

Logstash Kibana指数模式显示错误结果

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"

我正在使用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"
        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"
        }
      }  
    }