Logstash詳解之——input模組

ritit發表於2017-07-31

Logstash由三個元件構造成,分別是input、filter以及output。我們可以吧Logstash三個元件的工作流理解為:input收集資料,filter處理資料,output輸出資料。至於怎麼收集、去哪收集、怎麼處理、處理什麼、怎麼發生以及傳送到哪等等一些列的問題就是我們接下啦要討論的一個重點。

我們今天先討論input元件的功能和基本外掛。前面我們意見介紹過了,input元件是Logstash的眼睛和鼻子,負責收集資料的,那麼們就不得不思考兩個問題,第一個問題要清楚的就是,後設資料在哪,當然,這就包含了後設資料是什麼型別,屬於什麼業務;第二個問題要清楚怎麼去拿到後設資料。只要搞明白了這兩個問題,那麼Logstash的input元件就算是弄明白了。
對於第一個問題,後設資料的型別有很多,比如說你的後設資料可以是日誌、報表、可以是資料庫的內容等等。後設資料是什麼樣子的我們不需要關心,我們要關係的是後設資料是什麼型別的,只要你知道後設資料是什麼型別的,你才能給他分類,或者說給他一個type,這很重要,type對於你後面的工作處理是非常有幫助的。所以第一個問題的重心後設資料在嗎,是什麼,現在已經是清楚了。那麼進行第二個問題。
第二個問題的核心是怎麼拿到這些不同型別的原資料?這是一個真個input元件的核心內容了,我們分門別類的來看待這和解決個問題。
首先,我們肯定需要認同的,什麼樣的資料來源,就需要使用什麼樣的方式去獲取資料。

我們列舉幾種:
1、檔案型別:檔案型別,顧名思義,檔案資料來源,我們可以使用input元件的file外掛來獲取資料。file{}外掛有很多的屬性引數,我們可以張開講解一下。具體內容在下面的程式碼中展示:

input{
    file{
        #path屬性接受的引數是一個陣列,其含義是標明需要讀取的檔案位置
        path => [‘pathA’,‘pathB’]
        #表示多就去path路徑下檢視是夠有新的檔案產生。預設是15秒檢查一次。
        discover_interval => 15
        #排除那些檔案,也就是不去讀取那些檔案
        exclude => [‘fileName1’,‘fileNmae2’]
        #被監聽的檔案多久沒更新後斷開連線不在監聽,預設是一個小時。
        close_older => 3600
        #在每次檢查檔案列 表的時候, 如果一個檔案的最後 修改時間 超過這個值, 就忽略這個檔案。 預設一天。
        ignore_older => 86400
        #logstash 每隔多 久檢查一次被監聽檔案狀態( 是否有更新) , 預設是 1 秒。
        stat_interval => 1
        #sincedb記錄資料上一次的讀取位置的一個index
        sincedb_path => ’$HOME/. sincedb‘
        #logstash 從什麼 位置開始讀取檔案資料, 預設是結束位置 也可以設定為:beginning 從頭開始
        start_position => ‘beginning’
        #注意:這裡需要提醒大家的是,如果你需要每次都從同開始讀取檔案的話,關設定start_position => beginning是沒有用的,你可以選擇sincedb_path 定義為 /dev/null
    }            

}

2、資料庫型別:資料庫型別的資料來源,就意味著我們需要去和資料庫打交道了是嗎?是的!那是必須的啊,不然怎麼獲取資料呢。input元件如何獲取資料庫類的資料呢?沒錯,下面即將隆重登場的是input元件的JDBC外掛jdbc{}。同樣的,jdbc{}有很多的屬性,我們在下面的程式碼中作出說明;

input{
    jdbc{
    #jdbc sql server 驅動,各個資料庫都有對應的驅動,需自己下載
    jdbc_driver_library => "/etc/logstash/driver.d/sqljdbc_2.0/enu/sqljdbc4.jar"
    #jdbc class 不同資料庫有不同的 class 配置
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    #配置資料庫連線 ip 和埠,以及資料庫    
    jdbc_connection_string => "jdbc:sqlserver://200.200.0.18:1433;databaseName=test_db"
    #配置資料庫使用者名稱
    jdbc_user =>   
    #配置資料庫密碼
    jdbc_password =>
    #上面這些都不重要,要是這些都看不懂的話,你的老闆估計要考慮換人了。重要的是接下來的內容。
    # 定時器 多久執行一次SQL,預設是一分鐘
    # schedule => 分 時 天 月 年  
    # schedule => * 22  *  *  * 表示每天22點執行一次
    schedule => "* * * * *"
    #是否清除 last_run_metadata_path 的記錄,如果為真那麼每次都相當於從頭開始查詢所有的資料庫記錄
    clean_run => false
    #是否需要記錄某個column 的值,如果 record_last_run 為真,可以自定義我們需要表的欄位名稱,
    #此時該引數就要為 true. 否則預設 track 的是 timestamp 的值.
    use_column_value => true
    #如果 use_column_value 為真,需配置此引數. 這個引數就是資料庫給出的一個欄位名稱。當然該欄位必須是遞增的,可以是 資料庫的資料時間這類的
    tracking_column => create_time
    #是否記錄上次執行結果, 如果為真,將會把上次執行到的 tracking_column 欄位的值記錄下來,儲存到 last_run_metadata_path 指定的檔案中
    record_last_run => true
    #們只需要在 SQL 語句中 WHERE MY_ID > :last_sql_value 即可. 其中 :last_sql_value 取得就是該檔案中的值
    last_run_metadata_path => "/etc/logstash/run_metadata.d/my_info"
    #是否將欄位名稱轉小寫。
    #這裡有個小的提示,如果你這前就處理過一次資料,並且在Kibana中有對應的搜尋需求的話,還是改為true,
    #因為預設是true,並且Kibana是大小寫區分的。準確的說應該是ES大小寫區分
    lowercase_column_names => false
    #你的SQL的位置,當然,你的SQL也可以直接寫在這裡。
    #statement => SELECT * FROM tabeName t WHERE  t.creat_time > :last_sql_value
    statement_filepath => "/etc/logstash/statement_file.d/my_info.sql"
    #資料型別,標明你屬於那一方勢力。單了ES哪裡好給你安排不同的山頭。
    type => "my_info"
    }
    #注意:外載的SQL檔案就是一個文字檔案就可以了,還有需要注意的是,一個jdbc{}外掛就只能處理一個SQL語句,
    #如果你有多個SQL需要處理的話,只能在重新建立一個jdbc{}外掛。
}

好了,廢話不多說了,接著第三種情況:


input {
  beats {
    #接受資料埠
    port => 5044
    #資料型別
    type => "logs"
  }
  #這個外掛需要和filebeat進行配很這裡不做多講,到時候結合起來一起介紹。
}

現在我們基本清楚的知道了input元件需要做的事情和如何去做,當然他還有很多的外掛可以進行資料的收集,比如說TCP這類的,還有可以對資料進行encode,這些感興趣的朋友可以自己去檢視,我說的只是我自己使用的。一般情況下我說的三種外掛已經足夠了。
今天的ELK種的Logstash的input元件就到這。後面還會講述Logstash的另外另個元件filter和output。


相關文章