2017-04-25 3 views
0

J'utilise la pile ELK dans lequel j'ai utilisé entrée jdbc dans logstash
J'ai créé 2 indicesKibana Index motif montrant des résultats erronés

  1. utilisateurs
  2. employés

Les deux index ont une même colonne objid
Logstash fichier de configuration

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ère entrée jdbc 'employés' contient 26935 records

'utilisateurs' 2ème entrée jdbc contient 10619 enregistrements

Enregistrements communs: 9635 (matchs objID)

1er problème est que lorsque ic réer un motif d'indice Kibana comme «

utilisateurs

Il est montrant le nombre de 37554, pourquoi? il devrait montrer que 10619

2ème problème: quand je crée un modèle d'index '

employés

Il est montrant le nombre de 27919, pourquoi? il devrait montrer que 26935

Aussi j'ai créer différents documents Id pour « utilisateurs » %{objid}%{login_name}

Répondre

1

index Si votre entrée et de sortie des utilisateurs et des employés sont dans le même fichier/exécuté en même temps, comme ce que votre exemple montre, vous devez utiliser des conditions pour acheminer vos données vers l'index élastique correct. Logstash concatène vos fichiers/fichiers en un seul pipeline, de sorte que toutes vos entrées passent par tous les filtres/sorties, ce qui est probablement la raison pour laquelle vous obtenez des résultats inattendus. Voir ceci discussion.

Vous aurez besoin de faire quelque chose comme ceci:

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