Шаблон индекса Кибаны показывает неверные результаты

Я использую стек ELK, в котором я использовал ввод jdbc в logstash
Я создал 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"
    }
}

1-й вход jdbc 'employee' содержит 26935 записей

2-й вход jdbc 'users' содержит 10619 записей

Общие записи: 9635 (совпадения objid)

1-я проблема заключается в том, что когда я создаю шаблон индекса в кибане как '

пользователи

Он показывает количество 37554, почему? должно отображаться только 10619

2-я проблема: когда я создаю шаблон индекса как '

сотрудники

Он показывает количество 27919, почему? должно отображаться только 26935

Также я создал другой идентификатор документа для индекса «пользователи» %{objid}%{login_name}


person Harish Gupta    schedule 25.04.2017    source источник


Ответы (1)


Если ваши пользователи и сотрудники вводят и выводят данные в одном файле / выполняются в одно и то же время, как показано в вашем примере, вам необходимо использовать условные выражения для маршрутизации данных в правильный индекс 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"
    }
  }  
}
person cattastrophe    schedule 03.05.2017