2016-09-07 82 views
0

我想從oracle導入數據並希望將導入數據的參數之一傳遞給彈性搜索以獲取其他一些細節。從logstash連接到彈性搜索的問題在輸入中

對於例如: - 如果我有一個員工ID,我從oracle數據庫獲得100比說,我想通過所有這100個員工id到彈性搜索並獲得emp名稱和工資。

我現在能夠從oracle檢索數據,但無法連接到彈性搜索。另外我不確定什麼是更好的方法來做到這一點。
我使用日誌隱藏2.3.3和彈性搜索日誌隱藏過濾器插件。

input { 
     jdbc { 
     jdbc_connection_string => "jdbc:oracle:thin:@<dbhost>:<port>:<sid>" 
     # The user we wish to execute our statement as 
     jdbc_user => 「user" 
     jdbc_password => 「pass" 
     # The path to our downloaded jdbc driver 
     jdbc_driver_library => 「<path>" 
     # The name of the driver class for oracle 
     jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver" 
     # our query 
     statement => "SELECT empId, desg from Employee" 
    } 
    elasticsearch { 
     hosts => "https://xx.corp.com:9200" 
     index => 「empdetails」 
    } 
    } 
    output { 
    stdout { codec => json_lines } 
    } 

由於彈性搜索,我得到下面的錯誤。

插件有一個不可恢復的錯誤。將重新啓動這個插件。

插件:[「https://xx.corp.com:9200」],index =>「empdetails」,query =>「empId:'1001'」,codec =>「UTF-8」>,scan => true,size => 1000, scroll =>「1m」,docinfo => false,docinfo_target =>「@ metadata」,docinfo_fields => [「_ index」,「_type」,「_id」],ssl => false>

錯誤:[401 ] {:級別=>:錯誤}

+0

我可以得到上述錯誤修正,現在我能夠從彈性搜索中獲取數據。但是,任何人都可以給我任何指示,告訴我如何從jdbc傳遞數據並從彈性搜索中獲取相應的數據。我很新的日誌存儲,因此任何信息非常感謝。 – LookingForSolution

+0

更新了代碼如下 - elasticsearch { SSL =>真 \t主機=> 「xx.corp.com:9200」 \t指數=> 「empdetails」 \t查詢=>「{ 「查詢」:{「匹配「:{」empId「:」1001「}}}' \t user =>」admin「 \t password =>」admin「 } – LookingForSolution

回答

1

您需要使用elasticsearch filter而不是elasticsearch input

input { 
    jdbc { 
    jdbc_connection_string => "jdbc:oracle:thin:@<dbhost>:<port>:<sid>" 
    # The user we wish to execute our statement as 
    jdbc_user => 「user" 
    jdbc_password => 「pass" 
    # The path to our downloaded jdbc driver 
    jdbc_driver_library => 「<path>" 
    # The name of the driver class for oracle 
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver" 
    # our query 
    statement => "SELECT empId, desg from Employee" 
    } 
} 
filter { 
    elasticsearch { 
    hosts => ["xx.corp.com:9200"] 
    query => "empId:%{empId}" 
    user => "admin" 
    password => "admin" 
    sort => "empName:desc" 
    fields => { 
     "empName" => "empName" 
     "salary" => "salary" 
    } 
    } 
} 
output { 
    stdout { codec => json_lines } 
} 

其結果是,經由JDBC取出每個記錄將被噸富集他在ES中找到相應的數據。

+0

Thanks Val。我已經想通了,並將其更改爲彈性搜索過濾器,但我遇到了另一個問題,我得到了「找不到[@empName]的映射以進行排序」。在過濾器中的更新的代碼是濾波器{ \t elasticsearch { SSL => 「真」 \t主機=> .... \t用戶=> 「管理員」 \t密碼=> 「管理員」 \t指數=>。 ... \t查詢=> 「EMPID:R1001」 \t欄=> [ 「@empName」, 「@salary」] \t排序=> 「@ empName:desc」 的 \t \t }} 什麼 – LookingForSolution

+0

是你想排序的字段的名稱?你確定它是'@ empName'而不是簡單''empName'? – Val

+0

empName字段存儲在彈性搜索中。 – LookingForSolution