我們今天先討論input組件的功能和基本插件。前面我們意見介紹過了褪迟,input組件是Logstash的眼睛和鼻子冗恨,負(fù)責(zé)收集數(shù)據(jù)的,那么們就不得不思考兩個(gè)問題味赃,第一個(gè)問題要清楚的就是掀抹,元數(shù)據(jù)在哪,當(dāng)然心俗,這就包含了元數(shù)據(jù)是什么類型傲武,屬于什么業(yè)務(wù);第二個(gè)問題要清楚怎么去拿到元數(shù)據(jù)城榛。只要搞明白了這兩個(gè)問題揪利,那么Logstash的input組件就算是弄明白了。
對(duì)于第一個(gè)問題狠持,元數(shù)據(jù)的類型有很多疟位,比如說你的元數(shù)據(jù)可以是日志、報(bào)表工坊、可以是數(shù)據(jù)庫的內(nèi)容等等献汗。元數(shù)據(jù)是什么樣子的我們不需要關(guān)心,我們要關(guān)系的是元數(shù)據(jù)是什么類型的王污,只要你知道元數(shù)據(jù)是什么類型的罢吃,你才能給他分類,或者說給他一個(gè)type昭齐,這很重要尿招,type對(duì)于你后面的工作處理是非常有幫助的。所以第一個(gè)問題的重心元數(shù)據(jù)在嗎阱驾,是什么就谜,現(xiàn)在已經(jīng)是清楚了。那么進(jìn)行第二個(gè)問題里覆。
第二個(gè)問題的核心是怎么拿到這些不同類型的原數(shù)據(jù)丧荐?這是一個(gè)真?zhèn)€input組件的核心內(nèi)容了,我們分門別類的來看待這和解決個(gè)問題喧枷。
首先虹统,我們肯定需要認(rèn)同的弓坞,什么樣的數(shù)據(jù)源,就需要使用什么樣的方式去獲取數(shù)據(jù)车荔。
學(xué)習(xí)原始的文檔渡冻,請(qǐng)見:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
我們列舉幾種:
1、文件類型:文件類型忧便,顧名思義族吻,文件數(shù)據(jù)源,我們可以使用input組件的file插件來獲取數(shù)據(jù)珠增。file{}插件有很多的屬性參數(shù)超歌,我們可以張開講解一下。具體內(nèi)容在下面的代碼中展示:
input{
? ? file{
? ? ? ? #path屬性接受的參數(shù)是一個(gè)數(shù)組蒂教,其含義是標(biāo)明需要讀取的文件位置
? ? ? ? path => [‘pathA’握础,‘pathB’]
? ? ? ? #表示多就去path路徑下查看是夠有新的文件產(chǎn)生。默認(rèn)是15秒檢查一次悴品。
? ? ? ? discover_interval => 15
? ? ? ? #排除那些文件,也就是不去讀取那些文件
? ? ? ? exclude => [‘fileName1’,‘fileNmae2’]
? ? ? ? #被監(jiān)聽的文件多久沒更新后斷開連接不在監(jiān)聽简烘,默認(rèn)是一個(gè)小時(shí)苔严。
? ? ? ? close_older => 3600
? ? ? ? #在每次檢查文件列 表的時(shí)候, 如果一個(gè)文件的最后 修改時(shí)間 超過這個(gè)值孤澎, 就忽略這個(gè)文件届氢。 默認(rèn)一天。
? ? ? ? ignore_older => 86400
? ? ? ? #logstash 每隔多 久檢查一次被監(jiān)聽文件狀態(tài)( 是否有更新) 覆旭, 默認(rèn)是 1 秒退子。
? ? ? ? stat_interval => 1
? ? ? ? #sincedb記錄數(shù)據(jù)上一次的讀取位置的一個(gè)index
? ? ? ? sincedb_path => ’$HOME/. sincedb‘
? ? ? ? #logstash 從什么 位置開始讀取文件數(shù)據(jù), 默認(rèn)是結(jié)束位置 也可以設(shè)置為:beginning 從頭開始
? ? ? ? start_position => ‘beginning’
? ? ? ? #注意:這里需要提醒大家的是型将,如果你需要每次都從同開始讀取文件的話寂祥,關(guān)設(shè)置start_position => beginning是沒有用的,你可以選擇sincedb_path 定義為 /dev/null
? ? }? ? ? ? ? ?
}
?2七兜、數(shù)據(jù)庫類型:數(shù)據(jù)庫類型的數(shù)據(jù)源丸凭,就意味著我們需要去和數(shù)據(jù)庫打交道了是嗎?是的腕铸!那是必須的啊惜犀,不然怎么獲取數(shù)據(jù)呢。input組件如何獲取數(shù)據(jù)庫類的數(shù)據(jù)呢狠裹?沒錯(cuò)虽界,下面即將隆重登場(chǎng)的是input組件的JDBC插件jdbc{}。同樣的涛菠,jdbc{}有很多的屬性莉御,我們?cè)谙旅娴拇a中作出說明撇吞;
input{
? ? jdbc{
? ? #jdbc sql server 驅(qū)動(dòng),各個(gè)數(shù)據(jù)庫都有對(duì)應(yīng)的驅(qū)動(dòng),需自己下載
? ? jdbc_driver_library => "/etc/logstash/driver.d/sqljdbc_2.0/enu/sqljdbc4.jar"
? ? #jdbc class 不同數(shù)據(jù)庫有不同的 class 配置
? ? jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
? ? #配置數(shù)據(jù)庫連接 ip 和端口颈将,以及數(shù)據(jù)庫? ?
? ? jdbc_connection_string => "jdbc:sqlserver://200.200.0.18:1433;databaseName=test_db"
? ? #配置數(shù)據(jù)庫用戶名
? ? jdbc_user =>?
? ? #配置數(shù)據(jù)庫密碼
? ? jdbc_password =>
? ? #上面這些都不重要梢夯,要是這些都看不懂的話,你的老板估計(jì)要考慮換人了晴圾。重要的是接下來的內(nèi)容颂砸。
? ? # 定時(shí)器 多久執(zhí)行一次SQL,默認(rèn)是一分鐘
? ? # schedule => 分 時(shí) 天 月 年?
? ? # schedule => * 22? *? *? * 表示每天22點(diǎn)執(zhí)行一次
? ? schedule => "* * * * *"
? ? #是否清除 last_run_metadata_path 的記錄,如果為真那么每次都相當(dāng)于從頭開始查詢所有的數(shù)據(jù)庫記錄
? ? clean_run => false
? ? #是否需要記錄某個(gè)column 的值,如果 record_last_run 為真,可以自定義我們需要表的字段名稱死姚,
? ? #此時(shí)該參數(shù)就要為 true. 否則默認(rèn) track 的是 timestamp 的值.
? ? use_column_value => true
? ? #如果 use_column_value 為真,需配置此參數(shù). 這個(gè)參數(shù)就是數(shù)據(jù)庫給出的一個(gè)字段名稱人乓。當(dāng)然該字段必須是遞增的,可以是 數(shù)據(jù)庫的數(shù)據(jù)時(shí)間這類的
? ? tracking_column => create_time
? ? #是否記錄上次執(zhí)行結(jié)果, 如果為真,將會(huì)把上次執(zhí)行到的 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"
? ? #是否將字段名稱轉(zhuǎn)小寫都毒。
? ? #這里有個(gè)小的提示色罚,如果你這前就處理過一次數(shù)據(jù),并且在Kibana中有對(duì)應(yīng)的搜索需求的話账劲,還是改為true戳护,
? ? #因?yàn)槟J(rèn)是true,并且Kibana是大小寫區(qū)分的瀑焦。準(zhǔn)確的說應(yīng)該是ES大小寫區(qū)分
? ? lowercase_column_names => false
? ? #你的SQL的位置腌且,當(dāng)然,你的SQL也可以直接寫在這里榛瓮。
? ? #statement => SELECT * FROM tabeName t WHERE? t.creat_time > :last_sql_value
? ? statement_filepath => "/etc/logstash/statement_file.d/my_info.sql"
? ? #數(shù)據(jù)類型铺董,標(biāo)明你屬于那一方勢(shì)力。單了ES哪里好給你安排不同的山頭禀晓。
? ? type => "my_info"
? ? }
? ? #注意:外載的SQL文件就是一個(gè)文本文件就可以了精续,還有需要注意的是,一個(gè)jdbc{}插件就只能處理一個(gè)SQL語句粹懒,
? ? #如果你有多個(gè)SQL需要處理的話重付,只能在重新建立一個(gè)jdbc{}插件。
}
?接著第三種情況:
input {
? beats {
? ? #接受數(shù)據(jù)端口
? ? port => 5044
? ? #數(shù)據(jù)類型
? ? type => "logs"
? }
? #這個(gè)插件需要和filebeat進(jìn)行配很這里不做多講崎淳,到時(shí)候結(jié)合起來一起介紹堪夭。
}
現(xiàn)在我們基本清楚的知道了input組件需要做的事情和如何去做,當(dāng)然他還有很多的插件可以進(jìn)行數(shù)據(jù)的收集拣凹,比如說TCP這類的森爽,還有可以對(duì)數(shù)據(jù)進(jìn)行encode,這些感興趣的朋友可以自己去查看嚣镜,我說的只是我自己使用的爬迟。一般情況下我說的三種插件已經(jīng)足夠了
---------------------
作者:xcl119xxcl
來源:CSDN
原文:https://blog.csdn.net/xcl119xcl/article/details/89244191
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接菊匿!