真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言日志配置文件,golang 日志

ELK應(yīng)用之Filebeat

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

成都網(wǎng)站建設(shè)、做網(wǎng)站,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向成百上千企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。

官方網(wǎng)址:

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

啟動(dòng)Filebeat時(shí),它會(huì)啟動(dòng)一個(gè)或多個(gè)查找器,查看你為日志文件指定的本地路徑。對(duì)于prospector所在的每個(gè)日志文件,prospector啟動(dòng)harvester。每個(gè)harvester都會(huì)為新內(nèi)容讀取單個(gè)日志文件,并將新日志數(shù)據(jù)發(fā)送到libbeat,后者將聚合事件并將聚合數(shù)據(jù)發(fā)送到你為Filebeat配置的輸出。

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

Harvester負(fù)責(zé)讀取單個(gè)文件的內(nèi)容。讀取每個(gè)文件,并將內(nèi)容發(fā)送到the output,每個(gè)文件啟動(dòng)一個(gè)harvester, harvester負(fù)責(zé)打開和關(guān)閉文件,這意味著在運(yùn)行時(shí)文件描述符保持打開狀態(tài)。

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

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

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

2)文件的采集只會(huì)在scan_frequency過后重新開始。

3)如果在harvester關(guān)閉的情況下移動(dòng)或移除文件,則不會(huì)繼續(xù)處理文件。

要控制收割機(jī)何時(shí)關(guān)閉,請(qǐng)使用close_ *配置選項(xiàng)

Prospector負(fù)責(zé)管理harvester并找到所有要讀取的文件來源。如果輸入類型為日志,則查找器將查找路徑匹配的所有文件,并為每個(gè)文件啟動(dòng)一個(gè)harvester。每個(gè)prospector都在自己的Go協(xié)程中運(yùn)行。

Filebeat目前支持兩種prospector類型:log和stdin。每個(gè)prospector類型可以定義多次。日志prospector檢查每個(gè)文件來查看harvester是否需要啟動(dòng),是否已經(jīng)運(yùn)行,或者該文件是否可以被忽略(請(qǐng)參閱ignore_older)。

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

注:Filebeat prospector只能讀取本地文件,沒有功能可以連接到遠(yuǎn)程主機(jī)來讀取存儲(chǔ)的文件或日志。

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

配置文件詳解( )

(1)字段解釋

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

/var/log/* /*.log

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

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

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

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

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

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

fields: 向輸出的每一條日志添加額外的信息,比如"level:debug",方便后續(xù)對(duì)日志進(jìn)行分組統(tǒng)計(jì)。默認(rèn)情況下,會(huì)在輸出信息的fields子目錄下以指定的新增fields建立子目錄,

fields_under_root: 如果該選項(xiàng)設(shè)置為true,則新增fields成為頂級(jí)目錄,而不是將其放在fields目錄下。自定義的field會(huì)覆蓋filebeat默認(rèn)的field。

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

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

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

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

document_type: 設(shè)定Elasticsearch輸出時(shí)的document的type字段,也可以用來給日志進(jìn)行分類。

harvester_buffer_size: 每個(gè)harvester監(jiān)控文件時(shí),使用的buffer的大小。

max_bytes: 日志文件中增加一行算一個(gè)日志事件,max_bytes限制在一次日志事件中最多上傳的字節(jié)數(shù),多出的字節(jié)會(huì)被丟棄。默認(rèn)是10MB。

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

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

negate: 是否需要對(duì)pattern條件轉(zhuǎn)置使用,不翻轉(zhuǎn)設(shè)為true,反轉(zhuǎn)設(shè)置為false。

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

max_lines: 合并的最多行數(shù)(包含匹配pattern的那一行),默認(rèn)為500行。

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

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

backoff: Filebeat檢測(cè)到某個(gè)文件到了EOF之后,每次等待多久再去檢測(cè)文件是否有更新,默認(rèn)為1s。

max_backoff: Filebeat檢測(cè)到某個(gè)文件到了EOF之后,等待檢測(cè)文件更新的最大時(shí)間,默認(rèn)是10秒。

backoff_factor: 定義到達(dá)max_backoff的速度,默認(rèn)因子是2,到達(dá)max_backoff后,變成每次等待max_backoff那么長的時(shí)間才backoff一次,直到文件有更新才會(huì)重置為backoff。比如:?

如果設(shè)置成1,意味著去使能了退避算法,每隔backoff那么長的時(shí)間退避一次。

spool_size: spooler的大小,spooler中的事件數(shù)量超過這個(gè)閾值的時(shí)候會(huì)清空發(fā)送出去(不論是否到達(dá)超時(shí)時(shí)間),默認(rèn)1MB。

idle_timeout: spooler的超時(shí)時(shí)間,如果到了超時(shí)時(shí)間,spooler也會(huì)清空發(fā)送出去(不論是否到達(dá)容量的閾值),默認(rèn)1s。

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

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

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

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

cd FILEBEAT_HOME

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

后臺(tái)啟動(dòng)filebeat,配置對(duì)應(yīng)的參數(shù)

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

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

注意:一臺(tái)服務(wù)器只能啟動(dòng)一個(gè)filebeat進(jìn)程。

ps -ef |grep filebeat

kill -9 $pid

注意: 非緊急情況下,殺掉進(jìn)程只能用優(yōu)雅方式。

A、filebeat運(yùn)行不成功

問題:配置文件格式有問題,配置文件遵循yml文件格式, 多或少一個(gè)空格 都會(huì)導(dǎo)致啟動(dòng)問題,可以使用cmd命令窗口到filebeat安裝路徑下,使用filebeat.exe –c filebeat.yml 查看報(bào)錯(cuò),也可以看filebeat路徑下的log文件夾中的filebeat文件

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

問題:a、路徑有問題

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

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

問題:filebeat讀取文件后會(huì)生成一個(gè)registry文件,注意windows機(jī)器中這個(gè)文件在手動(dòng)啟動(dòng)的情況下會(huì)在filebeat安裝目錄下的data文件夾中,服務(wù)注冊(cè)啟動(dòng)的情況下會(huì)在C盤下隱藏文件夾C:\ProgramData\filebeat中,刪除掉這個(gè)就可以了

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

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

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

在Filebeat運(yùn)行時(shí),每個(gè)prospector內(nèi)存中也會(huì)保存文件狀態(tài)信息,當(dāng)重新啟動(dòng)Filebeat時(shí),將使用注冊(cè)文件的數(shù)據(jù)來重建文件狀態(tài),F(xiàn)ilebeat將每個(gè)harvester在從保存的最后偏移量繼續(xù)讀取。

每個(gè)prospector為它找到的每個(gè)文件保留一個(gè)狀態(tài)。由于文件可以被重命名或移動(dòng),因此文件名和路徑不足以識(shí)別文件。對(duì)于每個(gè)文件,F(xiàn)ilebeat存儲(chǔ)唯一標(biāo)識(shí)符以檢測(cè)文件是否先前已被采集過。

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

Filebeat保證事件至少會(huì)被傳送到配置的輸出一次,并且不會(huì)丟失數(shù)據(jù)。 Filebeat能夠?qū)崿F(xiàn)此行為,因?yàn)樗鼘⒚總€(gè)事件的傳遞狀態(tài)存儲(chǔ)在注冊(cè)文件中。

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

發(fā)送到輸出但在Filebeat關(guān)閉前未確認(rèn)的任何事件在重新啟動(dòng)Filebeat時(shí)會(huì)再次發(fā)送。這可以確保每個(gè)事件至少發(fā)送一次,但最終會(huì)將重復(fù)事件發(fā)送到輸出。

也可以通過設(shè)置shutdown_timeout選項(xiàng)來配置Filebeat以在關(guān)閉之前等待特定時(shí)間。

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

在Linux上,F(xiàn)ilebeat也可能因inode重用而跳過行。有關(guān)inode重用問題的更多詳細(xì)信息,請(qǐng)參閱filebeat常見問題解答。

Logback日志切割用的是JDK里File#renameTo()方法。如果該方法失敗,就再嘗試使用復(fù)制數(shù)據(jù)的方式切割日志。查找該方法相關(guān)資料得知,只有當(dāng)源文件和目標(biāo)目錄處于同一個(gè)文件系統(tǒng)、同volumn(即windows下的C, D盤)下該方法才會(huì)成功,切不會(huì)為重命名的后的文件分配新的inode值。也就是說,如果程序里一直保存著該文件的描述符,那么當(dāng)程序再寫日志時(shí),就會(huì)向重命名后的文件中寫。那么問題來了,filebeat是會(huì)一直打開并保存文件描述符的,那么它是怎么得知日志被切割這件事的呢?

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

(1)close_inactive

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

(2)scan_frequency

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

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

Go語言之log(如何將日志寫到指定文件里面)

對(duì)于Go語言的日志來說,如何將log寫到指定的文件里面,下面是一個(gè)例子。

output:

output:

Golang將日志同時(shí)輸出到控制臺(tái)和文件

日常開發(fā)當(dāng)中需要將golang的log包打印的日志同時(shí)輸出到控制臺(tái)和文件,應(yīng)該如何解決這個(gè)問題?

log包可以通過SetOutput()方法指定日志輸出的方式(Writer),但是只能指定一個(gè)輸出的方式(Writer)。我們利用io.MultiWriter()將多個(gè)Writer拼成一個(gè)Writer使用的特性,把log.Println()輸出的內(nèi)容分流到控制臺(tái)和文件當(dāng)中。

原文地址

golang 應(yīng)該怎么寫配置文件

在項(xiàng)目開始之前,先根據(jù)大概業(yè)務(wù)設(shè)計(jì)日志系統(tǒng)。

一個(gè)好的日志系統(tǒng)在項(xiàng)目維護(hù)時(shí)非常重要。

我的日志系統(tǒng)中的內(nèi)容:

時(shí)間戳

日志調(diào)用地點(diǎn):文件+行號(hào)

報(bào)錯(cuò)級(jí)別 致命 錯(cuò)誤 警告 信息 調(diào)試

Summary

關(guān)鍵內(nèi)存Dump

這些信息方便排查故障。

配置文件:


名稱欄目:go語言日志配置文件,golang 日志
URL網(wǎng)址:http://weahome.cn/article/dsepdco.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部