導航:首頁 > 文件管理 > filebeat配置文件

filebeat配置文件

發布時間:2022-09-12 09:10:10

『壹』 ELK應用之Filebeat

Filebeat是本地文件的日誌數據採集器,可監控日誌目錄或特定日誌文件(tail file),並將它們轉發給Elasticsearch或Logstatsh進行索引、kafka等。帶有內部模塊(auditd,Apache,Nginx,System和MySQL),可通過一個指定命令來簡化通用日誌格式的收集,解析和可視化。

官方網址: https://www.elastic.co/guide/en/beats/filebeat/current/index.html

Filebeat涉及兩個組件:查找器prospector和採集器harvester,來讀取文件(tail file)並將事件數據發送到指定的輸出。

啟動Filebeat時,它會啟動一個或多個查找器,查看你為日誌文件指定的本地路徑。對於prospector所在的每個日誌文件,prospector啟動harvester。每個harvester都會為新內容讀取單個日誌文件,並將新日誌數據發送到libbeat,後者將聚合事件並將聚合數據發送到你為Filebeat配置的輸出。

當發送數據到Logstash或Elasticsearch時,Filebeat使用一個反壓力敏感(backpressure-sensitive)的協議來解釋高負荷的數據量。當Logstash數據處理繁忙時,Filebeat放慢它的讀取速度。一旦壓力解除,Filebeat將恢復到原來的速度,繼續傳輸數據。

Harvester負責讀取單個文件的內容。讀取每個文件,並將內容發送到the output,每個文件啟動一個harvester, harvester負責打開和關閉文件,這意味著在運行時文件描述符保持打開狀態。

如果文件在讀取時被刪除或重命名,Filebeat將繼續讀取文件。這有副作用,即在harvester關閉之前,磁碟上的空間被保留。默認情況下,Filebeat將文件保持打開狀態,直到達到close_inactive狀態

關閉harvester會產生以下結果:

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

2)文件的採集只會在scan_frequency過後重新開始。

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

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

Prospector負責管理harvester並找到所有要讀取的文件來源。如果輸入類型為日誌,則查找器將查找路徑匹配的所有文件,並為每個文件啟動一個harvester。每個prospector都在自己的Go協程中運行。

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

只有在harvester關閉後文件的大小發生了變化,才會讀取到新行。

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

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

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

(1)欄位解釋

paths: 指定要監控的日誌,目前按照Go語言的glob函數處理。沒有對配置目錄做遞歸處理,比如配置的如果是:

/var/log/* /*.log

則只會去/var/log目錄的所有子目錄中尋找以".log"結尾的文件,而不會尋找/var/log目錄下以".log"結尾的文件。

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

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

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

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

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

fields: 向輸出的每一條日誌添加額外的信息,比如"level:debug",方便後續對日誌進行分組統計。默認情況下,會在輸出信息的fields子目錄下以指定的新增fields建立子目錄,

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

ignore_older: 可以指定Filebeat忽略指定時間段以外修改的日誌內容,比如2h(兩個小時)或者5m(5分鍾)。

close_older: 如果一個文件在某個時間段內沒有發生過更新,則關閉監控的文件handle。默認1h。

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

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

document_type: 設定Elasticsearch輸出時的document的type欄位,也可以用來給日誌進行分類。

harvester_buffer_size: 每個harvester監控文件時,使用的buffer的大小。

max_bytes: 日誌文件中增加一行算一個日誌事件,max_bytes限制在一次日誌事件中最多上傳的位元組數,多出的位元組會被丟棄。默認是10MB。

multiline: 適用於日誌中每一條日誌占據多行的情況,比如各種語言的報錯信息調用棧。這個配置的下麵包含如下配置:

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

negate: 是否需要對pattern條件轉置使用,不翻轉設為true,反轉設置為false。

match: 匹配pattern後,與前面(before)還是後面(after)的內容合並為一條日誌

max_lines: 合並的最多行數(包含匹配pattern的那一行),默認為500行。

timeout: 到了timeout之後,即使沒有匹配一個新的pattern(發生一個新的事件),也把已經匹配的日誌事件發送出去

tail_files: 如果設置為true,Filebeat從文件尾開始監控文件新增內容,把新增的每一行文件作為一個事件依次發送,而不是從文件開始處重新發送所有內容。

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中的事件數量超過這個閾值的時候會清空發送出去(不論是否到達超時時間),默認1MB。

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

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

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

publish_async: 是否採用非同步發送模式(實驗功能)。

具體的一個yml採集配置樣例如下:該配置文件是filebeat採集數據的依據,並根據需求添加必要配置,filebeat收集日誌後發往logstash,配置如下:

cd FILEBEAT_HOME

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

後台啟動filebeat,配置對應的參數

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

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

 注意:一台伺服器只能啟動一個filebeat進程。

ps -ef |grep filebeat

kill -9 $pid

注意: 非緊急情況下,殺掉進程只能用優雅方式。

A、filebeat運行不成功

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

B、 filebeat第一次運行成功無數據

問題:a、路徑有問題

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

C、filebeat運行成功第一次運行後有數據,第二次無數據

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

D、filebeat運行成功有數據,但是新添加數據不讀取問題

問題:filebeat傳輸存在反壓機制,在數據量特別大或者傳輸通道不通的情況下,filebeat會進行反壓,暫停發送,等到數據量穩定或者數據傳輸通道正常的之後才會發送

Filebeat 保存每個文件的狀態並經常將狀態刷新到磁碟上的注冊文件中。該狀態用於記住harvester正在讀取的最後偏移量,並確保發送所有日誌行。如果輸出(例如Elasticsearch或Logstash)無法訪問,Filebeat會跟蹤最後發送的行,並在輸出再次可用時繼續讀取文件。

在Filebeat運行時,每個prospector內存中也會保存文件狀態信息,當重新啟動Filebeat時,將使用注冊文件的數據來重建文件狀態,Filebeat將每個harvester在從保存的最後偏移量繼續讀取。

每個prospector為它找到的每個文件保留一個狀態。由於文件可以被重命名或移動,因此文件名和路徑不足以識別文件。對於每個文件,Filebeat存儲唯一標識符以檢測文件是否先前已被採集過。

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

Filebeat保證事件至少會被傳送到配置的輸出一次,並且不會丟失數據。 Filebeat能夠實現此行為,因為它將每個事件的傳遞狀態存儲在注冊文件中。

在輸出阻塞或未確認所有事件的情況下,Filebeat將繼續嘗試發送事件,直到接收端確認已收到。如果Filebeat在發送事件的過程中關閉,它不會等待輸出確認所有收到事件。

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

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

注意:Filebeat的至少一次交付保證包括日誌輪換和刪除舊文件的限制。如果將日誌文件寫入磁碟並且寫入速度超過Filebeat可以處理的速度,或者在輸出不可用時刪除了文件,則可能會丟失數據。

在Linux上,Filebeat也可能因inode重用而跳過行。有關inode重用問題的更多詳細信息,請參閱filebeat常見問題解答。

Logback日誌切割用的是JDK里File#renameTo()方法。如果該方法失敗,就再嘗試使用復制數據的方式切割日誌。查找該方法相關資料得知,只有當源文件和目標目錄處於同一個文件系統、同volumn(即windows下的C, D盤)下該方法才會成功,切不會為重命名的後的文件分配新的inode值。也就是說,如果程序里一直保存著該文件的描述符,那麼當程序再寫日誌時,就會向重命名後的文件中寫。那麼問題來了,filebeat是會一直打開並保存文件描述符的,那麼它是怎麼得知日誌被切割這件事的呢?

如果只用當前文件描述符一路監控到天黑的話,那麼當logback把日誌重命名後,filebeat仍然會監控重命名後的日誌,新創建的日誌文件就看不到了。實際上,filebeat是通過close_inactive和scan_frequency兩個參數(機制)來應對這種情況的:

(1)close_inactive

該參數指定當被監控的文件多長時間沒有變化後就關閉文件句柄(file handle)。官方建議將這個參數設置為一個比文件最大更新間隔大的值。比如文件最長5s更新一次,那就設置成1min。默認值為5min。

(2)scan_frequency

該參數指定Filebeat搜索新文件的頻率(時間間隔)。當發現新的文件被創建時, Filebeat會為它再啟動一個 harvester 進行監控,默認為10s。

綜合以上兩個機制,當logback完成日誌切割後(即重命名),此時老的harvester仍然在監控重命名後的日誌文件,但是由於該文件不會再更新,因此會在close_inactive時間後關閉這個文件的 harvester。當scan_frequency時間過後,Filebeat會發現目錄中出現了新文件,於是為該文件啟動 harvester 進行監控。這樣就保證了切割日誌時也能不丟不重的傳輸數據。(不重是通過為每個日誌文件保存offset實現的)

『貳』 filebeat常見問題

Filebeat保持文件處理程序打開,直到文件到達文件末尾,以便它可以近乎實時地讀取新的日誌行。 如果Filebeat正在收集大量文件,則打開文件的數量可能會成為問題。 在大多數環境中,正在更新的文件數量很少。
close_inactive配置選項應相應地設置為關閉不再處於活動狀態的文件。

您可以使用其他配置選項來關閉文件處理程序,但所有這些選項都應該小心使用,因為它們可能有副作用。 選項是:

close_renamed和close_removed選項在Windows上很有用,可以解決與文件旋轉相關的問題。
請參閱打開文件處理程序導致Windows文件旋轉問題?

close_eof選項在具有大量只有很少條目的文件的環境中很有用。
close_timeout選項在關閉文件處理程序比發送所有日誌行更重要的環境中很有用。 有關更多詳細信息,請參閱設置探礦者。

確保在使用這些配置選項之前閱讀這些配置選項的文檔。

Filebeat可能被配置為頻繁掃描文件。 檢查filebeat.yml配置文件中scan_frequency的設置。 將scan_frequency設置為小於1s可能會導致Filebeat在頻繁的循環中掃描磁碟。

Filebeat保持每個文件的狀態並將該狀態保存在registry_file中的磁碟上。 Filebeat重新啟動時,文件狀態用於在前一個位置繼續讀取文件。 如果每天都生成大量新文件,則注冊表文件可能會變得太大。 要減小注冊表文件的大小,有兩個可用的配置選項:clean_removed和clean_inactive。

對於不再接觸並忽略的舊文件(請參閱ignore_older),我們建議您使用clean_inactive。 如果舊文件從磁碟中刪除,請使用clean_removed選項。

Inode重用會導致Filebeat跳過行嗎?
在Linux文件系統上,Filebeat使用inode和設備來識別文件。
從磁碟中刪除文件時,可將inode分配給新文件。
在涉及文件旋轉的使用情況下,如果舊文件被刪除並且之後立即創建新文件,
新文件可能與刪除的文件具有完全相同的inode。在這種情況下,Filebeat假定新文件與舊文件相同,並嘗試在舊位置繼續讀取,這是不正確的。

默認狀態不會從注冊表文件中刪除。要解決inode重用問題,我們建議您使用clean_ *選項(特別是clean_inactive)來刪除非活動文件的狀態。
例如,如果您的文件每24小時輪換一次,並且輪換的文件不再更新,則可以將ignore_older設置為48小時,將clean_inactive設置為72小時。

您可以將clean_removed用於從磁碟中刪除的文件。請注意,clean_removed會在掃描期間無法找到文件時清除注冊表中的文件狀態。如果文件稍後再次顯示,它將從頭開始重新發送。

Filebeat使用換行符來檢測事件的結束。 如果將行逐漸添加到正在採集的文件中,則在最後一行之後需要換行符,否則Filebeat將不會讀取文件的最後一行。

在默認行為中,Filebeat會打開文件並保持打開狀態,直到達到文件末尾。
在配置的輸出很長時間(例如Elasticsearch或Logstash不可用)的情況下,這可能會導致Filebeat將文件處理程序保留到同時從文件系統中刪除的文件。 只要Filebeat保持已刪除的文件處於打開狀態,操作系統就不會釋放磁碟空間,這可能會導致磁碟利用率增加,甚至出現磁碟不足的情況。

為了緩解這個問題,您可以將close_timeoutedit設置設置為"5m"。 這將確保每5分鍾關閉一次文件處理程序,而不管是否達到EOF。
請注意: 如果在Filebeat到達文件末尾之前刪除文件,則此選項可能會導致數據丟失。

如果您需要限制帶寬使用率,我們建議您在操作系統OS上配置網路堆棧以執行帶寬限制。

例如,以下Linux命令通過在通過埠5044的TCP連接上設置50 kbps的限制來限制Filebeat和Logstash之間的連接:

使用操作系統工具執行帶寬限制可讓您更好地控制策略。 例如,您可以使用操作系統工具在白天限制帶寬,但不是在晚上。 或者您可以保留帶寬不受限制,但為流量分配低優先順序。

您的配置文件的結構有問題,或者您使用了YAML分析程序無法解析的路徑或表達式,因為配置文件包含未正確轉義的字元。

如果YAML文件包含具有空格或不常用字元的路徑,請將路徑包裝在單引號中(請參閱將單引號標記為包裹路徑)。

另請參閱YAML提示和疑難解答中的一般建議: https://www.elastic.co/guide/en/beats/filebeat/current/yaml-tips.html

索引模板可能未正確載入。 請參閱步驟4:在Elasticsearch中載入索引模板。

如果您最近執行了載入或解析自定義結構化日誌的操作,則可能需要刷新索引以使欄位在Kibana中可用。 要刷新索引,請使用刷新API。 例如:

【參考: https://www.elastic.co/guide/en/beats/filebeat/current/faq.html 】

『叄』 FileBeat手動配置採集

為了手動配置Filebeat(代替用模塊),你可以在filebeat.yml中的filebeat.inputs區域下指定一個inputs列表。

列表時一個YMAL數組,並且你可以指定多個inputs,相同input類型也可以指定多個。例如:

從日誌文件讀取行

為了配置這種input,需要指定一個paths列表,列表中的每一項必須能夠定位並抓取到日誌行。例如:

你還可以應用設置其它額外的配置項(比如,fields, include_lines, exclude_lines, multiline等等)來從這些文件中讀取行。你設置的這些配置對所有這種類型的input在獲取日誌行的時候都生效。

為了對不同的文件應用不同的配置,你需要定義多個input區域:

paths

例如:/var/log/ / .log 將會抓取/var/log子目錄目錄下所有.log文件。它不會從/var/log本身目錄下的日誌文件。如果你應用recursive_glob設置的話,它將遞歸地抓取所有子目錄下的所有.log文件。

recursive_glob.enabled

允許將 擴展為遞歸glob模式。啟用這個特性後,每個路徑中最右邊的 被擴展為固定數量的glob模式。例如:/foo/ 擴展到/foo,/foo/ , /foo/ ,等等。如果啟用,它將單個 擴展為8級深度 模式。這個特性默認是啟用的,設置recursive_glob.enabled為false可以禁用它。

encoding

讀取的文件的編碼

下面是一些W3C推薦的簡單的編碼:

plain編碼是特殊的,因為它不校驗或者轉換任何輸入。

exclude_lines

一組正則表達式,用於匹配你想要排除的行。Filebeat會刪除(PS:我覺得用「丟棄」更合適)這組正則表達式匹配的行。默認情況下,沒有行被刪除。空行被忽略。

如果指定了multiline,那麼在用exclude_lines過濾之前會將每個多行消息合並成一個單行。(PS:也就是說,多行合並成單行後再支持排除行的過濾)

下面的例子配置Filebeat刪除以DBG開頭的行:

一組正則表達式,用於匹配你想要包含的行。Filebeat只會導出那些匹配這組正則表達式的行。默認情況下,所有的行都會被導出。空行被忽略。

如果指定了multipline設置,每個多行消息先被合並成單行以後再執行include_lines過濾。

下面是一個例子,配置Filebeat導出以ERR或者WARN開頭的行:

(畫外音:如果 include_lines 和 exclude_lines 都被定義了,那麼Filebeat先執行 include_lines 後執行 exclude_lines,而與這兩個選項被定義的順序沒有關系。include_lines 總是在 exclude_lines選項前面執行,即使在配置文件中 exclude_lines 出現在 include_lines的前面。)

下面的例子導出那些除了以DGB開頭的所有包含sometext的行:

當抓取一個文件時每個harvester使用的buffer的位元組數。默認是16384。

max_bytes

單個日誌消息允許的最大位元組數。超過max_bytes的位元組將被丟棄且不會被發送。對於多行日誌消息來說這個設置是很有用的,因為它們往往很大。默認是10MB(10485760)。

json

這些選項使得Filebeat將日誌作為JSON消息來解析。例如:

為了啟用JSON解析模式,你必須至少指定下列設置項中的一個:

keys_under_root

默認情況下,解碼後的JSON被放置在一個以"json"為key的輸出文檔中。如果你啟用這個設置,那麼這個key在文檔中被復制為頂級。默認是false。

overwrite_keys

如果keys_under_root被啟用,那麼在key沖突的情況下,解碼後的JSON對象將覆蓋Filebeat正常的欄位

add_error_key

如果啟用,則當JSON反編排出現錯誤的時候Filebeat添加 "error.message" 和 "error.type: json"兩個key,或者當沒有使用message_key的時候。

message_key

一個可選的配置,用於在應用行過濾和多行設置的時候指定一個JSON key。指定的這個key必須在JSON對象中是頂級的,而且其關聯的值必須是一個字元串,否則沒有過濾或者多行聚集發送。

ignore_decoding_error

一個可選的配置,用於指定是否JSON解碼錯誤應該被記錄到日誌中。如果設為true,錯誤將被記錄。默認是false。

multiline

用於控制Filebeat如何擴多行處理日誌消息

exclude_files

一組正則表達式,用於匹配你想要忽略的文件。默認沒有文件被排除。

下面是一個例子,忽略.gz的文件

如果啟用,那麼Filebeat會忽略在指定的時間跨度之前被修改的文件。如果你想要保留日誌文件一個較長的時間,那麼配置ignore_older是很有用的。例如,如果你想要開始Filebeat,但是你只想發送最近一周最新的文件,這個情況下你可以配置這個選項。

你可以用時間字元串,比如2h(2小時),5m(5分鍾)。默認是0,意思是禁用這個設置。

你必須設置ignore_older比close_inactive更大。

close_ *

close_*配置項用於在一個確定的條件或者時間點之後關閉harvester。關閉harvester意味著關閉文件處理器。如果在harvester關閉以後文件被更新,那麼在scan_frequency結束後改文件將再次被拾起。然而,當harvester關閉的時候如果文件被刪除或者被移動,那麼Filebeat將不會被再次拾起,並且這個harvester還沒有讀取的數據將會丟失。

close_inactive

當啟用此選項時,如果文件在指定的持續時間內未被獲取,則Filebeat將關閉文件句柄。當harvester讀取最後一行日誌時,指定周期的計數器就開始工作了。它不基於文件的修改時間。如果關閉的文件再次更改,則會啟動一個新的harvester,並且在scan_frequency結束後,將獲得最新的更改。

推薦給close_inactive設置一個比你的日誌文件更新的頻率更大一點兒的值。例如,如果你的日誌文件每隔幾秒就會更新,你可以設置close_inactive為1m。如果日誌文件的更新速率不固定,那麼可以用多個配置。

將close_inactive設置為更低的值意味著文件句柄可以更早關閉。然而,這樣做的副作用是,如果harvester關閉了,新的日誌行不會實時發送。

關閉文件的時間戳不依賴於文件的修改時間。代替的,Filebeat用一個內部時間戳來反映最後一次讀取文件的時間。例如,如果close_inactive被設置為5分鍾,那麼在harvester讀取文件的最後一行以後,這個5分鍾的倒計時就開始了。

你可以用時間字元串,比如2h(2小時),5m(5分鍾)。默認是5m。

close_renamed

當啟用此選項時,Filebeat會在重命名文件時關閉文件處理器。默認情況下,harvester保持打開狀態並繼續讀取文件,因為文件處理器不依賴於文件名。如果啟用了close_rename選項,並且重命名或者移動的文件不再匹配文件模式的話,那麼文件將不會再次被選中。Filebeat將無法完成文件的讀取。

close_removed

當啟用此選項時,Filebeat會在刪除文件時關閉harvester。通常,一個文件只有在它在由close_inactive指定的期間內不活躍的情況下才會被刪除。但是,如果一個文件被提前刪除,並且你不啟用close_removed,則Filebeat將保持文件打開,以確保harvester已經完成。如果由於文件過早地從磁碟中刪除而導致文件不能完全讀取,請禁用此選項。

close_timeout

當啟用此選項是,Filebeat會給每個harvester一個預定義的生命時間。無論讀到文件的什麼位置,只要close_timeout周期到了以後就會停止讀取。當你想要在文件上只花費預定義的時間時,這個選項對舊的日誌文件很有用。盡管在close_timeout時間以後文件就關閉了,但如果文件仍然在更新,則Filebeat將根據已定義的scan_frequency再次啟動一個新的harvester。這個harvester的close_timeout將再次啟動,為超時倒計時。

scan_frequency

Filebeat多久檢查一次指定路徑下的新文件(PS:檢查的頻率)。例如,如果你指定的路徑是 /var/log/* ,那麼會以指定的scan_frequency頻率去掃描目錄下的文件(PS:周期性掃描)。指定1秒鍾掃描一次目錄,這還不是很頻繁。不建議設置為小於1秒。

如果你需要近實時的發送日誌行的話,不要設置scan_frequency為一個很低的值,而應該調整close_inactive以至於文件處理器保持打開狀態,並不斷地輪詢你的文件。

默認是10秒。

scan.sort

如果你指定了一個非空的值,那麼你可以決定用scan.order的升序或者降序。可能的值是 modtime 和 filename。為了按文件修改時間排序,用modtime,否則用 filename。默認此選項是禁用的。

scan.order

可能的值是 asc 或者 desc。默認是asc。

『肆』 Filebeat佔用文件句柄

平台使用整套的ELK日誌框架:服務寫本地文件日誌,由Filebeat監控本地日誌,並寫入ES。
本地Filebeat配置如下:

問題:文件句柄佔用,導致磁碟無法釋放。重啟Filebeat後可清理掉佔用的磁碟。

收到問題後,感覺是一個很常見的問題,就直接網路了一下,果然是一下就有很多的線索。結合一些帖子,對現有伺服器做了排查,如下:

這里有兩個問題:

可設置:
close_older:1h
force_close_files:false
由於目前服務日誌滾動的頻率不是很高,文件更名後,1h左右不會被刪除。所以可以嘗試使用close_older配置在文件刪除之前釋放句柄。

=====================
2019/7/17更新:
調研後發現,close_older的默認值就是1h,所以該方案不會讓原本的問題變得更好。

雖然問題可能會被解決,但對Filebeat還不夠理解,並且上述提出的兩個問題,沒有很好的解答。因此,我繼續對Filebeat做進一步的學習和實驗。

資料鏈接: https://www.jianshu.com/p/6282b04fe06a
Filebeat主要組件:prospector和harvester,如圖:

filebeat保持文件狀態:

filebeat保證至少一次交付:
每次交付會有狀態,對端需要ACK確認。

注意:
Filebeat的至少一次交付保證包括日誌輪換和刪除舊文件的限制。如果將日誌文件寫入磁碟並且寫入速度超過Filebeat可以處理的速度,或者在輸出不可用時刪除了文件,則可能會丟失數據。
在Linux上,Filebeat也可能因inode重用而跳過行。有關inode重用問題的更多詳細信息,請參閱filebeat常見問題解答。(後續遇到的話,繼續研究,本次略過)

首先看一下close_renamed的解釋:
close_renamed
Only use this option if you understand that data loss is a potential side effect.
When this option is enabled, Filebeat closes the file handler when a file is renamed. This happens, for example, when rotating files. By default, the harvester stays open and keeps reading the file because the file handler does not depend on the file name. If the close_renamedoption is enabled and the file is renamed or moved in such a way that it』s no longer matched by the file patterns specified for the , the file will not be picked up again. Filebeat will not finish reading the file.
WINDOWS: If your Windows log rotation system shows errors because it can』t rotate the files, you should enable this option.
經過測試後發現,採用filebeat監聽一個文本文件,通過mv將文件更改,close_renamed是管用的,但通過rm刪除文件,close_renamed是不管用的。

結論:未重現生產環境的現象。

階段性結論:升級生產環境filebeat版本後,檢查問題是否解決。

後續研究:

close_inactive
啟用此選項時,如果文件在指定的持續時間內沒有更新,Filebeat會關閉文件句柄。如果關閉的文件再次發生變化,則會啟動一台新的harvester,並在scan_frequency過去後採集最新的更改。建議將close_inactive設置為大於日誌文件兩次更新間隔時間的最大值。例如,如果日誌文件每隔幾秒更新一次,則可以安全地將close_inactive設置為1m。如果有更新頻率非常不同的日誌文件,則可以使用具有不同值的多個prospectors配置。將close_inactive設置為較低的值意味著文件句柄會更快關閉。但是,這具有副作用,即如果harvester關閉,則不會實時發送新的日誌行。關閉文件的時間戳不取決於文件的修改時間,關閉文件的時間戳為修改文件的時間+close_inactive。例如,如果close_inactive設置為5分鍾,那麼在收割機讀取文件的最後一行之後,5分鍾的倒計時開始。您可以使用時間字元串,如2h(2小時)和5m(5分鍾)。默認值是5m。

scan_frequency
指定掃描指定路徑目錄下是否有新的文件產生。例如,指定1以盡可能頻繁地掃描目錄,而不會導致Filebeat過於頻繁地掃描。我們不建議將此值設置為<1秒。
如果您需要近實時發送日誌行,請勿使用非常低的scan_frequency,但應調整close_inactive,以便文件處理程序保持打開狀態並持續輪詢您的文件。
默認設置是10秒。
注意區分backoff

『伍』 ELFK-基礎篇

本文發布鏈接地址: https://www.jianshu.com/p/bf5189583543

[TOC]

後台運行與測試

關閉

配置文件的格式是 YAML 格式

elasticsearch-head 是一個簡單的 elasticsearch web 圖形化的管理工具
使用javascript寫的一個彈性搜索集群的Web前端,在 elasticsearch5.x 後不再支持
插件形式的安裝,需要作為一個獨立的服務安裝和啟動。

上面的方式我測試沒有成功,原因可能是網路問題導致,訪問的都是國外的網站,慢。

推薦下面的方式

還有一種安裝方式非常簡單,只需要在 chrome 瀏覽器中安裝 head 插件即可
在 谷歌商店 搜索 "ElasticSearch Head" 插件,安裝這個插件,之後點擊 相應插件圖標即可。

插件安裝地址

之後,在瀏覽地址欄里輸入 elasticsearch 的地址和埠,點擊連接

安裝完畢

== 該配置文件的所有者必須是root或正在執行Beat進程的用戶。 該文件的許可權必須不允許除所有者以外的任何人寫入,需要是0644的許可權==

==/var/log/* 這樣的匹配是錯誤的==

默認情況下,Filebeat 會自動載入推薦的模板文件 filebeat.template.json,如果啟用了 Elasticsearch 輸出。您可以通過調整 filebeat.yml 文件中的選項template.name和template.path選項來配置filebeat以載入其他模板:

==默認情況下,如果索引中已存在模板,則不會覆蓋該模板。要覆蓋現有的模板,請template.overwrite: true在配置文件中進行設置。==

要禁用自動模板載入,請注釋Elasticsearch輸出下的 template 的相關部分。

==如果使用Logstash輸出,則不支持自動載入模板的選項,需要手動載入模板。==

假如配置了輸出到 Logstash 中,需要手動添加索引模板到 Elasticsearch 中,就需要在 filebeat 的安裝目錄中執行如下命令

假如你之前已經用了輸出到 elasticsearch 的索引模板,可以在成功執行上面命令後,執行下面的命令,用於刪除舊的索引模板,這樣可以強迫 Kibana 重新使用新的索引模板

要在 Kibana 中查看數據,假如首次使用 kibana,需要先創建索引模式,具體請看 Kibana 部分的介紹

創建索引模式後,您可以 filebeat-* 在 Kibana 中選擇索引模式來探索 Filebeat數據。

數據在線程之間以 事件 的形式流傳。不要叫行,因為 logstash 可以處理多行事件

此時可以在命令行里輸入一下信息,應該可以看到一些輸出

可以利用文件輸入插件,Logstash 可以很容易配置成讀取日誌文件作為輸入源

例如 讀取 Apache 日誌文件作為輸入,然後輸出到標准輸出。配置文件如下:

配置為將所有的輸入輸出到一個 Elasticsearch 實例中. 這是在 ELK 平台中是最常用的配置。

這里是把一個Django 的日誌作為輸入,之後輸出到 elasticsearch

好像沒啥卵用

插件類型包括:

Logstash 可以從 file 讀取數據

file 插件可用於將事件和日誌文件輸入給 Logstsh

stdin 輸入插件用於從標准輸入中讀取事件和日誌。

當我們配置為 stdin 時,終端上的任何輸入都會作為 Logstash 日誌管道的輸入。
這通常用於測試。

filebeat 插件出現在最新的 5.x 版本中,它是一個輕量級的事件和日誌搜集工具。

會把處理過的數據輸出到屏幕終端

把處理過的數據存儲到 elasticsearch 集群中

true 和 false

編輯碼器實際上並不是一種數據類型,它是在輸入或輸出的時候對數據進行解碼或編碼
的一種方式

例子:
在輸出的時候設置,把輸出數據編碼成 JSON 格式

就是由一系列鍵值對組合成的集合。
以 "key" => "value" 的形式表示,多個用空格分開

用雙引號引起來的字元序列

以字元 # 開頭

欄位可以使用 [field_name] 的方式引用
嵌套欄位 [field1][field2]

支持下標索引

小貼士:logstash 的數組也支持倒序下標,即 [geoip][location][-1] 可以獲取數組最後一個元素的值。

Logstash 還支持變數內插,在字元串里使用欄位引用的方法是這樣:
"the longitude is %{[geoip][location][0]}"

Logstsh 的判斷語句,與js的一樣

條件語句可以一起配合使用的運算符如下:

通常來說,你都會在表達式里用到欄位引用。為了盡量展示全面各種表達式,下面虛擬一個示例:

要配置Logstash,您可以創建一個配置文件,指定要使用的插件和每個插件的設置。 您可以在配置中引用事件欄位,並使用條件來滿足某些條件時處理事件。 當您運行logstash時,使用-f指定您的配置文件。

可以把 Logstash 相關的配置信息放在一個自定義的文件里

配置文件的格式是被分為不同的區域塊兒的,基本上是根據 輸入插件、過濾插件和輸出插件來區分的

每一個區域塊兒都包含了一個或者多個插件的配置選項。

==如果在同一個區域中使用了多個插件,則配置文件中的順序就指定了應用到事件處理六的順序。==

在運行 Logstash 運行時,可以用 -f 參數指定配置文件的完整路徑,甚至可以指定一個包含了多個不同類型如輸入、過濾和輸出插件的配置文件目錄

使用 -t (--configtest) 參數可以檢查配置文件的語法,而不是真正運行 Logstash

測試配置文件

如果配置文件通過配置測試,請使用以下命令啟動Logstash:

該--config.reload.automatic選項啟用自動配置重新載入,以便您每次修改配置文件時不必停止並重新啟動Logstash。
--config.reload.automatic 可以用 -r 替代

配置文件常見錯誤:

下面是完整正確的配置文件內容

用指定配置文件的方式啟動 Ctrl + d 停止 logstash 在 shell 命令行里執行的啟動程序first-pipeline.conf

其實上面的命令參數在 5.x 之後,都可以在配置文件 logstash.yml 中設置了

現在,您有一個工作流程,從Filebeat讀取日誌行。但是您會注意到日誌消息的格式不理想。您要解析日誌消息以從日誌中創建特定的命名欄位。為此,您將使用grok過濾器插件。

因為grok過濾器插件在傳入的日誌數據中查找模式,所以配置插件需要您決定如何識別用例感興趣的模式。來自Web伺服器日誌示例的代錶行如下所示:

使用方法,編輯 first-pipeline.conf
寫入下面的內容:

假如你在這之前已經運行了 logstash 和 filebeat 。要想生效現在的過濾配置,您需要強制Filebeat從頭開始讀取日誌文件。
不必重新啟動Logstash來接收更改,但是需要刪除 filebeat 下的注冊表文件 registry,此文件一般在安裝目錄下的 data 目錄下。

由於Filebeat存儲在注冊表中收集的每個文件的狀態,因此刪除注冊表文件會強制Filebeat讀取從頭開始捕獲的所有文件。

接下來,使用以下命令重新啟動Filebeat即可

除了解析日誌數據以獲得更好的搜索之外,過濾插件也可以從現有數據中導出補充信息。例如,geoip插件會查找IP地址,從地址中導出地理位置信息,並將該位置信息添加到日誌中。

將Logstash實例配置為使用geoip過濾器插件,將以下行添加到文件的filter部分first-pipeline.conf

完整的示例:

修改好保存,生效的話,同樣先刪除 Filebeat 注冊文件,之後重啟 filebeat

配置輸出到 Elasticsearch

測試您的管道編輯
現在,Logstash管道配置為將數據索引到Elasticsearch集群中,您可以查詢Elasticsearch。

根據grok過濾器插件創建的欄位,嘗試對Elasticsearch進行測試查詢。使用YYYY.MM.DD格式將$ DATE替換為當前日期

輸出

注意
索引名稱中使用的日期是基於UTC,而不是Logstash運行的時區。如果查詢返回index_not_found_exception,請確保logstash-$DATE反映了索引的實際名稱。要查看可用索引的列表,請使用此查詢:curl 'localhost:9200/_cat/indices?v'

ps -ef |grep node

kill -9 進程號

在瀏覽其中輸入以下地址

『陸』 filebeat安裝使用

1.配置文件含義

2.啟動filebeat測試

輸出信息

filebeat找不到配置文件時可以指定配置文件

./filebeat -c /usrlocal/filebeat/filebeat.yml

-e 將啟動信息輸出到屏幕上

filebeat進程日誌

filebeat本身運行的日誌默認位置 ${install_path}/logs/filebeat

要修改filebeat的日子路徑,可以添加一下內容在filebeat.yml配置文件

查看可用的模塊列表

模塊配置文件保存位置

${install_path}/filebeat/moles.d/

啟動nginx模塊

sudo ./filebeat moles enable nginx

1.使用模板默認路徑

nginx模塊配置收集日誌的默認路徑是

CentOS

Ubuntu

測試

2.nginx日誌不在默認存儲路徑下時

如果不設置此項,filebeat將根據你的操作系統選擇使用默認路徑

注意:此種方式十一追加的方式和模塊默認路徑合並在一起的,也就是說使用了此種方式,nginx模塊還是回去默認路徑下查找。

3.配置ouput

filebeat是用於搜集日誌,之後把日誌推送到某個接受的系統中,這些系統或者裝置在filebeat中稱為output。

output類型

完整的output列表在filebeat官方文檔

filebeat在運行的時候,以上的output只可配置其中一種

輸出到console

輸出完整的json數據

前台運行filebeat

如果只想輸出完整json數據中的某些欄位

其他輸出目標:

輸出到elasticsearch

輸出到 logstash

有時候處於實驗目的,可能需要重新讀取日誌文件,這個時候需要刪除安裝目錄下的 data 文件夾,重新運行 filebeat 即可。
[圖片上傳失敗...(image-c04404-1650615591430)]

報錯

假如出現如下報錯,請刪制除安裝目錄中的data文件夾

查看一下是否有一個進程已經處於運行狀態,嘗試殺死此進程,之後重新運行filebeat

可以在配置中定義處理器,以便在事件發送到配置的輸出之前對其進行處理。libbeat庫提供以下處理器∶

工作方式

每個處理器都接收一個事件,對該事件應用已定義的操作,然後返回該事件。如果定義

處理器列表,則將按照在Filebeat配置文件中定義的順序執行它們。

去重日誌中的某些行

配置位置在 filebeat.yml 文件中

刪除所有以 DBG: 開頭的行

像輸出的信息中添加某些自定義欄位

從事件中刪除某些欄位

以上配置,將刪除欄位: field1 和 field2

ignore_missing 的值為 false 表示,欄位名不存在則會返回錯誤。為true不會返回錯誤。

注意: 事件中的 "@timestamp 和 type 欄位是無法刪除的。

下面的配置示例是刪除頂級欄位 input 和頂級欄位 ecs 中的 version 欄位。

『柒』 微服務治理-日誌歸集-環境搭建(開發及測試)

根據houyi平台規劃,日誌歸集相關的技術組件都是基於k8s進行部署。
相關部署文件列表如圖所示:

對應各個技術組件的部署以最簡單的單點方式部署,暫時不考慮高可用性及性能彈性伸縮等非功能需求。

該部署比較簡單,就是對外提供9200,9300兩個埠提供服務,也沒有考慮數據存儲到容器外。

創建一個ClusterService, K8S內服務可以通過服務名稱elasticsearch-service或一個固定IP訪問es。

自定義logstash logstash.conf配置文件及logstash.yml文件,配置如下所示:
logstash.conf主要配置為:

logstash.yml的配置主要是實現與es之間的心跳。(通過監控日誌及名稱猜測是這個作用 ,並沒有核實,如理解有誤望指點。)

logstash 容器啟動logstash,並指定配置文件,打開5044埠。

通過filebeat config定義filebeat配置文件filebeat.yml:

根據filebeat 配置,讀取指定路徑下的增量日誌信息,

『捌』 FileBeat配置輸出

當你指定Elasticsearch作為output時,Filebeat通過Elasticsearch提供的HTTP API向其發送數據。例如:

為了啟用SSL,只需要在hosts下的所有URL添加https即可

如果Elasticsearch節點是用IP:PORT的形式定義的,那麼添加protocol:https。

enabled

啟用或禁用該輸出。默認true。

hosts

Elasticsearch節點列表。事件以循環順序發送到這些節點。如果一個節點變得不可訪問,那麼自動發送到下一個節點。每個節點可以是URL形式,也可以是IP:PORT形式。如果埠沒有指定,用9200。

username

用於認證的用戶名

password

用戶認證的密碼

protocol

可選值是:http 或者 https。默認是http。

path

HTTP API調用前的HTTP路徑前綴。這對於Elasticsearch監聽HTTP反向代理的情況很有用。

headers

將自定義HTTP頭添加到Elasticsearch輸出的每個請求。

index

索引名字。(PS:意思是要發到哪個索引中去)。默認是"filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"(例如,"filebeat-6.3.2-2017.04.26")。如果你想改變這個設置,你需要配置 setup.template.name 和 setup.template.pattern 選項。如果你用內置的Kibana dashboards,你也需要設置setup.dashboards.index選項。

indices

索引選擇器規則數組,支持條件、基於格式字元串的欄位訪問和名稱映射。如果索引缺失或沒有匹配規則,將使用index欄位。例如:

timeout

請求超時時間。默認90秒。

在filebeat.yml配置文件的setup.template區域指定索引模板,用來設置在Elasticsearch中的映射。如果模板載入是啟用的(默認的),Filebeat在成功連接到Elasticsearch後自動載入索引模板。

你可以調整下列設置或者覆蓋一個已經存在的模板。

上面是配置Filebeat輸出到Logstash,那麼Logstash本身也有配置,例如:

『玖』 記Filebeat的prospectors部分配置說明

Filebeat是一個日誌文件收集工具,filebeat最初是基於logstash-forwarder源碼的日誌數據shipper,部署在所要採集日誌的伺服器上,採集指定的日誌文件信息轉發給logstash進行分析然後再發送到elasticsearch構建索引,或者直接發送到elasticsearch,也可以發送到redis上,用redis作為消息隊列

Filebeat搜集日誌的主要角色有 harvester 和 prospectors

harvester負責讀取單個文件的內容。harvester逐行讀取每個文件,並將內容發送到輸出。每個文件啟動一台harvester。harvester負責打開關閉文件,harvester運行時會保持文件的文件描述符保持打開的狀態,而且文件在被掃描時被刪除或重命名了,Filebeat會繼續讀取文件, 這會導致在harvester關閉之前,被刪除的文件的磁碟空間不會被釋放。 默認情況下,Filebeat將文件保持打開狀態,直到達到 close_inactive 。

prospectors目前支持5種類型:

prospectors檢查每個文件以查看是否需要啟動harvester,是否已經運行harvester,或者文件是否可以被忽略。 只有在harvester關閉後文件的大小發生了變化,才會選擇新行。
prospectors只能讀取本地文件
Filebeat保持每個文件的狀態並經常將狀態刷新到磁碟的上注冊表中。 該狀態用於記住harvester正在讀取的最後偏移量,便於確保發送所有日誌行。但是如果你收集的日誌,每天新建了大量的文件,會發現注冊表會非常的巨大。要減小注冊表文件的大小,有兩個可用的配置選項: clean_removed 和 clean_inactive 。 對於不再接觸並忽略的舊文件,使用 clean_inactive 。 如果舊文件從磁碟中刪除,請使用 clean_removed 選項。

Filebeat保證事件至少會被傳送到你所配置的output目標一次,並且不會丟失數據。 Filebeat能夠實現此行為,因為它將每個事件的傳遞狀態存儲在注冊表文件中。 在定義的output被阻止並且未確認所有事件接收到情況下,Filebeat將繼續嘗試發送事件,直到輸出確認已收到事件。 如果Filebeat在發送事件的過程中關閉,它不會在關閉之前等待output目標確認所有事件的接受,Filebeat在重新啟動後,他會重新發送之前沒被輸出目標確認接受的事件。 這可以確保每個事件至少發送一次,但也可能會將重復事件發送到輸出目標。 您可以通過設置 shutdown_timeout 選項來配置Filebeat以在關閉之前的等待時間。

每個prospectors為每個文件保持一個狀態。 由於文件可以被重命名或移動,因此文件名和路徑不足以識別文件。 對於每個文件,Filebeat存儲唯一標識符以檢測文件是否先前已被harvester掃描過。

我們可以在filebeat.yaml中定義prospectors的配置選項,來實現對特定的日誌進行特定的掃描收集,下文只列出部分配置選項,詳細請看 官方文件

close_ * 配置選項用於在某個標准或時間後關閉harvester。 關閉harvester意味著關閉文件處理程序。 如果收割機關閉後文件被更新,則在 scan_frequency 過後,文件將再次被掃描。 但是,如果在harvester關閉的情況下移動或刪除文件,Filebeat將無法再次掃描文件,harvester將丟失未讀取的數據。

close_inactive
啟用此選項時,如果文件在指定的持續時間內沒有更新,Filebeat會關閉文件句柄。如果關閉的文件再次發生變化,則會啟動一台新的harvester,並在 scan_frequency 過去後採集最新的更改。建議將 close_inactive 設置為大於日誌文件兩次更新間隔時間的最大值。例如,如果日誌文件每隔幾秒更新一次,則可以安全地將close_inactive設置為1m。如果有更新頻率非常不同的日誌文件,則可以使用具有不同值的多個prospectors配置。將close_inactive設置為較低的值意味著文件句柄會更快關閉。但是,這具有副作用,即如果harvester關閉,則不會實時發送新的日誌行。關閉文件的時間戳不取決於文件的修改時間,關閉文件的時間戳為修改文件的時間+close_inactive。例如,如果close_inactive設置為5分鍾,那麼在收割機讀取文件的最後一行之後,5分鍾的倒計時開始。您可以使用時間字元串,如2h(2小時)和5m(5分鍾)。默認值是5m。

close_renamed
啟用此選項時,文件重命名時Filebeat會關閉文件處理程序。 默認情況下,採集器保持打開狀態並持續讀取文件,因為文件處理程序不依賴於文件名。 如果啟用close_renamed選項,並且文件被重命名或移動,則文件將不會再次拾取。 Filebeat不會完成讀取文件。

close_removed
如果啟用此選項,Filebeat會在刪除文件時馬上關閉harvester。如果一個文件在harvester執行時被提前刪除,而您沒有啟用close_removed,Filebeat會保持文件打開以確保harvester已經完成 通常情況下,文件只能在 close_inactive 指定的時間內未更新導致文件關閉後才能被刪除。 如果此設置導致文件因為太早從磁碟中刪除而未完全讀取,請禁用此選項。 該選項默認啟用。 如果禁用此選項,則還必須禁用clean_removed。
WINDOWS:如果您的Windows日誌輪換系統由於無法輪換文件而顯示錯誤,請確保啟用此選項。

close_eof
啟用此選項後,一旦文件結束,Filebeat會立即關閉文件。 當您的文件只寫入一次而不是不時更新時,這很有用。

close_timeout
啟用此選項時,Filebeat會為每個harvester提供預定義的使用期限。無論harvester讀取到文件中哪個位置,在close_timeout時間過後讀數都會停止。當您只想在文件上花費預定義的時間時,此選項可用於較舊的日誌文件。雖然close_timeout將在預定義的超時後關閉文件,但如果文件仍在更新中,探礦者將根據定義的scan_frequency再次啟動一個新的採集器。此收割機的close_timeout將在超時倒計時後重新開始。此選項在輸出被阻止的情況下特別有用,這使得Filebeat即使對從磁碟中刪除的文件也保持打開的文件處理程序。將close_timeout設置為5m可確保文件定期關閉,以便操作系統釋放它們。如果您將close_timeout設置為與ignore_older相等,則在收割機關閉時如果修改該文件,則該文件將不會被拾取。這些設置的組合通常會導致數據丟失,並且不會發送完整的文件。當您對包含多行事件的日誌使用close_timeout時,收割機可能會停在多行事件的中間,這意味著只會發送部分事件。如果收割機再次啟動並且文件仍然存在,則只會發送事件的第二部分。該選項默認設置為0,這意味著它被禁用。

clean_ *選項用於清理注冊表文件中的狀態條目。 這些設置有助於減小注冊表文件的大小,並可以防止潛在的inode重用問題。

clean_inactive
啟用此選項後,Filebeat將在指定的非活動時間段過去後移除文件的狀態。如果文件已被Filebeat忽略(該文件比ignore_older早),則只能刪除該狀態。 clean_inactive設置必須大於ignore_older + scan_frequency,以確保在收集文件時不會刪除狀態。否則,該設置可能會導致Filebeat不斷重新發送全部內容,因為clean_inactive將刪除文件的狀態,harvester仍然執行,如果文件更新或再次出現,則從頭開始讀取文件。 clean_inactive配置選項對於減小注冊表文件的大小非常有用,特別是在每天生成大量新文件的情況下。此配置選項對於防止Linux上的inode重用導致的Filebeat問題也很有用。

clean_removed
啟用此選項後,如果文件在磁碟上找不到,Filebeat會清除注冊表中的文件,該選項默認啟用。
如果您還禁用了 close_removed ,則必須禁用此選項。

指定掃描指定路徑目錄下是否有新的文件產生。例如,指定1以盡可能頻繁地掃描目錄,而不會導致Filebeat過於頻繁地掃描。我們不建議將此值設置為<1秒。
如果您需要近實時發送日誌行,請勿使用非常低的scan_frequency,但應調整 close_inactive ,以便文件處理程序保持打開狀態並持續輪詢您的文件。
默認設置是10秒。

注意區分 backoff

每個harvester在獲取文件時使用的緩沖區的大小(以位元組為單位)。 默認值是16384。

單個日誌消息可以擁有的最大位元組數。 max_bytes之後的所有位元組被丟棄並且不發送。 此設置對於可能變大的多行日誌消息特別有用。 默認值是10MB(10485760)。

這些選項使Filebeat能夠解碼構造為JSON消息的日誌。這些選項使Filebeat解碼日誌結構化為JSON消息。

解碼發生在行過濾和多行之前。 如果您設置了 message_key 選項,您可以將JSON解碼與過濾和多行結合使用。 在應用程序日誌被包裝在JSON對象中的情況下,這可能會很有用,例如Docker發生的情況。

配置示例:

您必須至少指定以下設置之一才能啟用JSON解析模式:

默認情況下,解碼後的JSON放在輸出文檔中的「json」鍵下。 如果啟用此設置,則會將鍵復制到輸出文檔的頂層。 默認值是false。

如果啟用了keys_under_root和此設置,則來自解碼的JSON對象的值會覆蓋Filebeat通常添加的欄位(類型,源,偏移量等)以防沖突。

如果啟用此設置,則在出現JSON解組錯誤或配置中定義了message_key但無法使用的情況下,Filebeat會添加「error.message」和「error.type:json」項。

一個可選的配置設置,用於指定應用行篩選和多行設置的JSON密鑰。 如果指定,鍵必須位於JSON對象的頂層,並且與鍵關聯的值必須是字元串,否則不會發生篩選或多行聚合。

控制Filebeat如何處理跨越多行的日誌消息的選項。 有關配置多行選項的更多信息,請參閱管理多行消息 。

如果此選項設置為true,Filebeat開始在每個文件的末尾讀取新文件,而不是開始。 將此選項與日誌輪換結合使用時,可能會跳過新文件中的第一個日誌條目。 默認設置為false。

此選項適用於Filebeat尚未處理的文件。 如果您之前運行Filebeat並且文件的狀態已被tail_files ,則tail_files將不適用。 harvester將繼續之前的狀態執行掃描。 要將tail_files應用於所有文件,您必須停止Filebeat並刪除注冊表文件。 請注意,這樣做會刪除以前的所有狀態。

注意
當您首次在一組日誌文件上運行Filebeat時,忽略舊的日誌。 第一次運行後,我們建議禁用此選項,否則您可能會在文件輪轉過程中丟失行。

為此prespectors生成的事件設置的接收節點管道標識。

注意
管道標識也可以在Elasticsearch輸出中進行配置,但此選項通常會讓配置文件更簡單。 如果管道在prespectors和輸出中均配置,則選擇prespectors中的配置。

向輸出的每一條日誌添加額外的信息,比如「level:debug」,方便後續對日誌進行分組統計。默認情況下,會在輸出信息的fields子目錄下以指定的新增fields建立子目錄。
例如

則在Kibana看到的內容如下:

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

則在Kibana看到的內容如下:

symlinks選項允許Filebeat除了常規文件以外還收集符號鏈接。 收集符號鏈接時,Filebeat會打開並讀取原始文件。

當您配置收集符號鏈接時,請確保排除是否存在原始文件路徑。 如果單個prespectors配置為收集的符號鏈接指向的路徑已存在同一個prespectors下,則prespectors將檢測到問題並僅處理找到的第一個文件。 但是,如果配置了兩個不同的prespectors(一個讀取符號鏈接而另一個讀取原始路徑),則將採集兩個路徑,導致Filebeat發送重復數據,並且prespectors覆蓋彼此的狀態。

如果符號鏈接到日誌文件的文件名中包含額外的元數據,並且您想要在Logstash中處理元數據,則symlinks選項可能很有用。 例如Kubernetes日誌文件的情況。

由於此選項可能會導致數據丟失,因此默認情況下會禁用它。

該選項指定達到EOF後再次檢查文件是否有更新的間隔時間,默認值是1秒。

該選項指定達到EOF後再次檢查文件是否有更新的最大間隔時間。 默認值是10秒。

要求:max_backoff應始終設置為max_backoff <= scan_frequency 。 如果max_backoff應該更大,建議關閉文件處理程序,而不要讓探礦者重新拾取文件。

指定backoff的增長因數,backoff=backoff * backoff_factor <= max_backoff。 默認值是2。

harvester_limit選項限制一個探礦者並行啟動的收割機數量。 這直接關繫到打開的文件處理程序的最大數量。 harvester_limit的默認值是0,這意味著沒有限制。 如果要採集的文件數量超過操作系統的打開文件處理程序限制,則此配置很有用。

設置收割機數量的限制意味著可能不是所有文件都並行打開。 因此,我們建議您將此選項與close_*選項組合使用,以確保收割機更經常停止,以便可以拾取新文件。

目前,如果新的收割機可以重新啟動,收割機將隨機挑選。 這意味著收割機可能剛剛關閉,然後再次更新,可能會啟動而不是收割機收集長時間未收割的文件。

此配置選項適用於每個探礦者。 您可以使用此選項通過分配更高限的收割機來間接地為某些探礦者設置更高的優先順序。

與type: udp ,指定通過UDP接收的消息的最大大小。 默認值是10240。

這些選項僅在使用docker探礦器類型時可用。 它們允許配置容器列表以從中讀取日誌。

Docker探礦者將在其路徑下搜索容器日誌,並將其解析為常見的消息行,並提取時間戳。 所有事情都發生在行篩選,多行和JSON解碼之前,因此可以與它們結合使用。

配置示例:

使用docker探礦者類型時,您必須定義containers.ids ,這些都是可用的設置:

『拾』 docker安裝filebeat

1、使用docker拉取filebeat鏡像

2、下載filebeat配置文件

3、啟動容器

說明:執行setup命令, 安裝filebeat的index

說明:一定要映射日誌文件路徑,區分宿主機日誌路徑(/mnt/ygt_cloud/log)和容器日誌路徑(/logs/tomcat)

閱讀全文

與filebeat配置文件相關的資料

熱點內容
網路HRV是什麼意思 瀏覽:918
word框中打勾 瀏覽:577
tcl筆試題java 瀏覽:467
win10怎麼登錄安全模式 瀏覽:679
除了archdaily還有什麼網站 瀏覽:567
數控下料圓形怎麼編程 瀏覽:785
安裝游戲在文件管理找不到怎麼辦 瀏覽:216
想買奢侈包包下載什麼app 瀏覽:1000
閃送員是哪裡的app 瀏覽:530
火車站進站閘機的數據哪裡可以查 瀏覽:503
cad備份文件清理軟體 瀏覽:822
夾具裝配圖cad文件百度網盤 瀏覽:567
如何將excel表格轉成文件包 瀏覽:1
網路配置文件應該怎麼設置 瀏覽:886
蘋果全能文件王下載位置 瀏覽:700
中國知網是哪些資料庫 瀏覽:280
fastjson優點 瀏覽:302
mstcam數控銑床編程如何串連 瀏覽:502
d4252用什麼軟體編程 瀏覽:35
大學生如何參與大數據 瀏覽:779

友情鏈接