ELK應用之Filebeat

Filebeat是本地文件的日志數(shù)據(jù)采集器,可監(jiān)控日志目錄或特定日志文件(tail file),并將它們轉(zhuǎn)發(fā)給Elasticsearch或Logstatsh進行索引祟绊、kafka等弓叛。帶有內(nèi)部模塊(auditd,Apache灾茁,Nginx窜觉,System和MySQL),可通過一個指定命令來簡化通用日志格式的收集北专,解析和可視化禀挫。

官方網(wǎng)址:https://www.elastic.co/guide/en/beats/filebeat/current/index.html

1.工作原理

Filebeat涉及兩個組件:查找器prospector和采集器harvester,來讀取文件(tail file)并將事件數(shù)據(jù)發(fā)送到指定的輸出拓颓。

啟動Filebeat時语婴,它會啟動一個或多個查找器,查看你為日志文件指定的本地路徑驶睦。對于prospector所在的每個日志文件砰左,prospector啟動harvester。每個harvester都會為新內(nèi)容讀取單個日志文件场航,并將新日志數(shù)據(jù)發(fā)送到libbeat缠导,后者將聚合事件并將聚合數(shù)據(jù)發(fā)送到你為Filebeat配置的輸出。

filebeat工作原理

當發(fā)送數(shù)據(jù)到Logstash或Elasticsearch時旗闽,F(xiàn)ilebeat使用一個反壓力敏感(backpressure-sensitive)的協(xié)議來解釋高負荷的數(shù)據(jù)量酬核。當Logstash數(shù)據(jù)處理繁忙時,F(xiàn)ilebeat放慢它的讀取速度适室。一旦壓力解除嫡意,F(xiàn)ilebeat將恢復到原來的速度,繼續(xù)傳輸數(shù)據(jù)捣辆。

1.1采集器Harvester

Harvester負責讀取單個文件的內(nèi)容蔬螟。讀取每個文件,并將內(nèi)容發(fā)送到the output汽畴,每個文件啟動一個harvester, harvester負責打開和關閉文件旧巾,這意味著在運行時文件描述符保持打開狀態(tài)耸序。

如果文件在讀取時被刪除或重命名,F(xiàn)ilebeat將繼續(xù)讀取文件鲁猩。這有副作用坎怪,即在harvester關閉之前,磁盤上的空間被保留廓握。默認情況下搅窿,F(xiàn)ilebeat將文件保持打開狀態(tài),直到達到close_inactive狀態(tài)

關閉harvester會產(chǎn)生以下結(jié)果:

1)如果在harvester仍在讀取文件時文件被刪除隙券,則關閉文件句柄男应,釋放底層資源。

2)文件的采集只會在scan_frequency過后重新開始娱仔。

3)如果在harvester關閉的情況下移動或移除文件沐飘,則不會繼續(xù)處理文件。

要控制收割機何時關閉牲迫,請使用close_ *配置選項

1.2查找器Prospector

Prospector負責管理harvester并找到所有要讀取的文件來源耐朴。如果輸入類型為日志,則查找器將查找路徑匹配的所有文件恩溅,并為每個文件啟動一個harvester隔箍。每個prospector都在自己的Go協(xié)程中運行。

Filebeat目前支持兩種prospector類型:log和stdin脚乡。每個prospector類型可以定義多次蜒滩。日志prospector檢查每個文件來查看harvester是否需要啟動,是否已經(jīng)運行奶稠,或者該文件是否可以被忽略(請參閱ignore_older)俯艰。

只有在harvester關閉后文件的大小發(fā)生了變化,才會讀取到新行锌订。

注:Filebeat prospector只能讀取本地文件竹握,沒有功能可以連接到遠程主機來讀取存儲的文件或日志。

2.配置文件

配置文件:$FILEBEAT_HOME/filebeat.yml辆飘。Filebeat可以一次讀取某個文件夾下的所有后綴名為log的文件啦辐,也可以讀取指定的某一個后綴名為log的文件。

yml配置

配置文件詳解(http://blog.51cto.com/michaelkang/1864225

(1)字段解釋

paths:指定要監(jiān)控的日志蜈项,目前按照Go語言的glob函數(shù)處理芹关。沒有對配置目錄做遞歸處理,比如配置的如果是:

/var/log/* /*.log

則只會去/var/log目錄的所有子目錄中尋找以".log"結(jié)尾的文件紧卒,而不會尋找/var/log目錄下以".log"結(jié)尾的文件侥衬。

encoding:指定被監(jiān)控的文件的編碼類型,使用plain和utf-8都是可以處理中文日志的。

input_type:指定文件的輸入類型log(默認)或者stdin轴总。

exclude_lines:在輸入中排除符合正則表達式列表的那些行直颅。

include_lines:包含輸入中符合正則表達式列表的那些行(默認包含所有行),include_lines執(zhí)行完畢之后會執(zhí)行exclude_lines怀樟。

exclude_files:忽略掉符合正則表達式列表的文件(默認為每一個符合paths定義的文件都創(chuàng)建一個harvester)功偿。

fields:向輸出的每一條日志添加額外的信息,比如"level:debug"漂佩,方便后續(xù)對日志進行分組統(tǒng)計脖含。默認情況下罪塔,會在輸出信息的fields子目錄下以指定的新增fields建立子目錄投蝉,

fields_under_root:如果該選項設置為true,則新增fields成為頂級目錄征堪,而不是將其放在fields目錄下瘩缆。自定義的field會覆蓋filebeat默認的field。

ignore_older:可以指定Filebeat忽略指定時間段以外修改的日志內(nèi)容佃蚜,比如2h(兩個小時)或者5m(5分鐘)庸娱。

close_older:如果一個文件在某個時間段內(nèi)沒有發(fā)生過更新,則關閉監(jiān)控的文件handle谐算。默認1h熟尉。

force_close_files:Filebeat會在沒有到達close_older之前一直保持文件的handle,如果在這個時間窗內(nèi)刪除文件會有問題洲脂,所以可以把force_close_files設置為true斤儿,只要filebeat檢測到文件名字發(fā)生變化,就會關掉這個handle恐锦。

scan_frequency:Filebeat以多快的頻率去prospector指定的目錄下面檢測文件更新(比如是否有新增文件)往果,如果設置為0s,則Filebeat會盡可能快地感知更新(占用的CPU會變高)一铅。默認是10s陕贮。

document_type:設定Elasticsearch輸出時的document的type字段,也可以用來給日志進行分類潘飘。

harvester_buffer_size:每個harvester監(jiān)控文件時肮之,使用的buffer的大小。

max_bytes:日志文件中增加一行算一個日志事件卜录,max_bytes限制在一次日志事件中最多上傳的字節(jié)數(shù)戈擒,多出的字節(jié)會被丟棄。默認是10MB暴凑。

multiline:適用于日志中每一條日志占據(jù)多行的情況峦甩,比如各種語言的報錯信息調(diào)用棧。這個配置的下面包含如下配置:

pattern:多行日志開始的那一行匹配的pattern

negate:是否需要對pattern條件轉(zhuǎn)置使用,不翻轉(zhuǎn)設為true凯傲,反轉(zhuǎn)設置為false犬辰。

match:匹配pattern后,與前面(before)還是后面(after)的內(nèi)容合并為一條日志

max_lines:合并的最多行數(shù)(包含匹配pattern的那一行)冰单,默認為500行幌缝。

timeout:到了timeout之后,即使沒有匹配一個新的pattern(發(fā)生一個新的事件)诫欠,也把已經(jīng)匹配的日志事件發(fā)送出去

tail_files:如果設置為true涵卵,F(xiàn)ilebeat從文件尾開始監(jiān)控文件新增內(nèi)容,把新增的每一行文件作為一個事件依次發(fā)送荒叼,而不是從文件開始處重新發(fā)送所有內(nèi)容轿偎。

backoff:Filebeat檢測到某個文件到了EOF之后,每次等待多久再去檢測文件是否有更新被廓,默認為1s坏晦。

max_backoff:Filebeat檢測到某個文件到了EOF之后,等待檢測文件更新的最大時間嫁乘,默認是10秒昆婿。

backoff_factor:定義到達max_backoff的速度,默認因子是2蜓斧,到達max_backoff后仓蛆,變成每次等待max_backoff那么長的時間才backoff一次,直到文件有更新才會重置為backoff挎春。比如:?

如果設置成1看疙,意味著去使能了退避算法,每隔backoff那么長的時間退避一次搂蜓。

spool_size:spooler的大小狼荞,spooler中的事件數(shù)量超過這個閾值的時候會清空發(fā)送出去(不論是否到達超時時間),默認1MB帮碰。

idle_timeout:spooler的超時時間相味,如果到了超時時間,spooler也會清空發(fā)送出去(不論是否到達容量的閾值)殉挽,默認1s丰涉。

registry_file:記錄filebeat處理日志文件的位置的文件

config_dir:如果要在本配置文件中引入其他位置的配置文件,可以寫在這里(需要寫完整路徑)斯碌,但是只處理prospector的部分一死。

publish_async:是否采用異步發(fā)送模式(實驗功能)。

具體的一個yml采集配置樣例如下:該配置文件是filebeat采集數(shù)據(jù)的依據(jù)傻唾,并根據(jù)需求添加必要配置投慈,filebeat收集日志后發(fā)往logstash承耿,配置如下:

yml配置樣例

3.啟動和停止

3.1開啟filebeat

cd FILEBEAT_HOME

?nohup ./bin/filebeat -f config/test.conf >>/FILEBEAT_HOME/logs/filebeat.log &

后臺啟動filebeat,配置對應的參數(shù)

啟動多個filebeat配置伪煤,新建一個目錄(conf)存放多個filebeat的配置文件加袋,

#nohup ./bin/filebeat -f conf/* >>/FILEBEAT_HOME/logs/filebeat.log &

?注意:一臺服務器只能啟動一個filebeat進程。

3.2停止filebeat

ps -ef |grep filebeat

kill -9 $pid

注意: 非緊急情況下抱既,殺掉進程只能用優(yōu)雅方式职烧。

3.3filebeat運行可能存在的問題(運行前最好是輸出到控制臺查看)

A、filebeat運行不成功

問題:配置文件格式有問題防泵,配置文件遵循yml文件格式蚀之,多或少一個空格都會導致啟動問題,可以使用cmd命令窗口到filebeat安裝路徑下捷泞,使用filebeat.exe –c filebeat.yml 查看報錯足删,也可以看filebeat路徑下的log文件夾中的filebeat文件

B、 filebeat第一次運行成功無數(shù)據(jù)

問題:a肚邢、路徑有問題

b壹堰、運行條件設置有問題(例如只采集某個條件下的數(shù)據(jù),文件中沒有符合條件的數(shù)據(jù)骡湖,這種情況下先注釋掉采集條件測試一下)

C、filebeat運行成功第一次運行后有數(shù)據(jù)峻厚,第二次無數(shù)據(jù)

問題:filebeat讀取文件后會生成一個registry文件响蕴,注意windows機器中這個文件在手動啟動的情況下會在filebeat安裝目錄下的data文件夾中,服務注冊啟動的情況下會在C盤下隱藏文件夾C:\ProgramData\filebeat中惠桃,刪除掉這個就可以了

D浦夷、filebeat運行成功有數(shù)據(jù),但是新添加數(shù)據(jù)不讀取問題

問題:filebeat傳輸存在反壓機制辜王,在數(shù)據(jù)量特別大或者傳輸通道不通的情況下劈狐,filebeat會進行反壓呐馆,暫停發(fā)送肥缔,等到數(shù)據(jù)量穩(wěn)定或者數(shù)據(jù)傳輸通道正常的之后才會發(fā)送

4.注意問題

4.1Filebeat如何保持文件的狀態(tài)?

Filebeat 保存每個文件的狀態(tài)并經(jīng)常將狀態(tài)刷新到磁盤上的注冊文件中汹来。該狀態(tài)用于記住harvester正在讀取的最后偏移量续膳,并確保發(fā)送所有日志行。如果輸出(例如Elasticsearch或Logstash)無法訪問收班,F(xiàn)ilebeat會跟蹤最后發(fā)送的行坟岔,并在輸出再次可用時繼續(xù)讀取文件。

在Filebeat運行時摔桦,每個prospector內(nèi)存中也會保存文件狀態(tài)信息社付,當重新啟動Filebeat時,將使用注冊文件的數(shù)據(jù)來重建文件狀態(tài),F(xiàn)ilebeat將每個harvester在從保存的最后偏移量繼續(xù)讀取鸥咖。

每個prospector為它找到的每個文件保留一個狀態(tài)纪隙。由于文件可以被重命名或移動,因此文件名和路徑不足以識別文件扛或。對于每個文件绵咱,F(xiàn)ilebeat存儲唯一標識符以檢測文件是否先前已被采集過。

如果你使用的案例涉及每天創(chuàng)建大量新文件熙兔,你可能會發(fā)現(xiàn)注冊文件增長過大悲伶。請參閱注冊表文件太大?編輯有關你可以設置以解決此問題的配置選項的詳細信息住涉。

4.2Filebeat如何確保至少一次交付麸锉?

Filebeat保證事件至少會被傳送到配置的輸出一次,并且不會丟失數(shù)據(jù)舆声。 Filebeat能夠?qū)崿F(xiàn)此行為花沉,因為它將每個事件的傳遞狀態(tài)存儲在注冊文件中。

在輸出阻塞或未確認所有事件的情況下媳握,F(xiàn)ilebeat將繼續(xù)嘗試發(fā)送事件碱屁,直到接收端確認已收到。如果Filebeat在發(fā)送事件的過程中關閉蛾找,它不會等待輸出確認所有收到事件娩脾。

發(fā)送到輸出但在Filebeat關閉前未確認的任何事件在重新啟動Filebeat時會再次發(fā)送。這可以確保每個事件至少發(fā)送一次打毛,但最終會將重復事件發(fā)送到輸出柿赊。

也可以通過設置shutdown_timeout選項來配置Filebeat以在關閉之前等待特定時間。

注意:Filebeat的至少一次交付保證包括日志輪換和刪除舊文件的限制幻枉。如果將日志文件寫入磁盤并且寫入速度超過Filebeat可以處理的速度碰声,或者在輸出不可用時刪除了文件,則可能會丟失數(shù)據(jù)熬甫。

在Linux上胰挑,F(xiàn)ilebeat也可能因inode重用而跳過行。有關inode重用問題的更多詳細信息罗珍,請參閱filebeat常見問題解答洽腺。

4.3Filebeat如何保證在日志文件被切割(或滾動rolling)時依然正確讀取文件?

Logback日志切割用的是JDK里File#renameTo()方法覆旱。如果該方法失敗蘸朋,就再嘗試使用復制數(shù)據(jù)的方式切割日志。查找該方法相關資料得知扣唱,只有當源文件和目標目錄處于同一個文件系統(tǒng)藕坯、同volumn(即windows下的C, D盤)下該方法才會成功团南,切不會為重命名的后的文件分配新的inode值。也就是說炼彪,如果程序里一直保存著該文件的描述符吐根,那么當程序再寫日志時,就會向重命名后的文件中寫辐马。那么問題來了拷橘,filebeat是會一直打開并保存文件描述符的,那么它是怎么得知日志被切割這件事的呢喜爷?

如果只用當前文件描述符一路監(jiān)控到天黑的話冗疮,那么當logback把日志重命名后,filebeat仍然會監(jiān)控重命名后的日志檩帐,新創(chuàng)建的日志文件就看不到了术幔。實際上,filebeat是通過close_inactive和scan_frequency兩個參數(shù)(機制)來應對這種情況的:

(1)close_inactive

該參數(shù)指定當被監(jiān)控的文件多長時間沒有變化后就關閉文件句柄(file handle)湃密。官方建議將這個參數(shù)設置為一個比文件最大更新間隔大的值诅挑。比如文件最長5s更新一次,那就設置成1min泛源。默認值為5min拔妥。

(2)scan_frequency

該參數(shù)指定Filebeat搜索新文件的頻率(時間間隔)。當發(fā)現(xiàn)新的文件被創(chuàng)建時俩由, Filebeat會為它再啟動一個 harvester 進行監(jiān)控毒嫡,默認為10s。

綜合以上兩個機制幻梯,當logback完成日志切割后(即重命名),此時老的harvester仍然在監(jiān)控重命名后的日志文件努释,但是由于該文件不會再更新碘梢,因此會在close_inactive時間后關閉這個文件的 harvester。當scan_frequency時間過后伐蒂,F(xiàn)ilebeat會發(fā)現(xiàn)目錄中出現(xiàn)了新文件煞躬,于是為該文件啟動 harvester 進行監(jiān)控。這樣就保證了切割日志時也能不丟不重的傳輸數(shù)據(jù)逸邦。(不重是通過為每個日志文件保存offset實現(xiàn)的)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恩沛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缕减,更是在濱河造成了極大的恐慌雷客,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桥狡,死亡現(xiàn)場離奇詭異搅裙,居然都是意外死亡皱卓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門部逮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娜汁,“玉大人,你說我怎么就攤上這事兄朋∑” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵颅和,是天一觀的道長傅事。 經(jīng)常有香客問我,道長融虽,這世上最難降的妖魔是什么享完? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮有额,結(jié)果婚禮上般又,老公的妹妹穿的比我還像新娘。我一直安慰自己巍佑,他們只是感情好茴迁,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萤衰,像睡著了一般堕义。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脆栋,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天倦卖,我揣著相機與錄音,去河邊找鬼椿争。 笑死怕膛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的秦踪。 我是一名探鬼主播褐捻,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼椅邓!你這毒婦竟也來了柠逞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤景馁,失蹤者是張志新(化名)和其女友劉穎板壮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裁僧,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡个束,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年慕购,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茬底。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡沪悲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阱表,到底是詐尸還是另有隱情殿如,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布最爬,位于F島的核電站涉馁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏爱致。R本人自食惡果不足惜烤送,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糠悯。 院中可真熱鬧帮坚,春花似錦、人聲如沸互艾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纫普。三九已至阅悍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昨稼,已是汗流浹背节视。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留假栓,地道東北人肴茄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像渣触,于是被迫代替她去往敵國和親泽铛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Filebeat的工作原理 Filebeat是一個日志文件收集工具,filebeat最初是基于logstash-f...
    JensenWong閱讀 10,860評論 0 9
  • 簡介 ELK是Elasticsearch妇萄、Logstash、Kibana的簡稱石景,這三者是核心套件捐康,但并非全部。后文...
    mysia閱讀 3,614評論 1 14
  • feisky云計算入热、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,843評論 0 5
  • 工欲善其事拍棕,必先利其器晓铆。 最近討論的比較多的就是如何把我們的log有效的管理起來,收集了一些ELK相關的知識绰播,做個...
    jaymz明閱讀 357評論 0 2
  • 地方 - 四諦法 - 四諦法 ################### Filebeat Configuration...
    linghu323323閱讀 999評論 0 1