溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

FISCO BCOS日志規(guī)范有哪些

發(fā)布時(shí)間:2021-08-03 11:02:39 來(lái)源:億速云 閱讀:278 作者:Leah 欄目:互聯(lián)網(wǎng)科技

FISCO BCOS日志規(guī)范有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

FISCO BCOS日志規(guī)范

 

為了使日志輸出更加友好,F(xiàn)ISCO BCOS 2.0設(shè)計(jì)了通用的日志格式,并根據(jù)日志輸出信息的重要性對(duì)日志進(jìn)行了分級(jí)。

此外,為了清晰地區(qū)分各模塊日志,F(xiàn)ISCO BCOS 2.0為各模塊設(shè)計(jì)了日志關(guān)鍵字,并設(shè)計(jì)了各種宏來(lái)確保日志輸出格式一致、方便寫(xiě)日志輸出代碼。

本節(jié)從日志格式、日志級(jí)別以及日志關(guān)鍵字三個(gè)方面介紹FISCO BCOS日志規(guī)范。

 

  通用日志格式

FISCO BCOS所有群組的日志均輸出到節(jié)點(diǎn)log目錄下的 log_%YYYY%mm%dd%HH.%MM 文件中,該日志文件每1個(gè)小時(shí)切分一次。為了區(qū)分各群組日志,使得日志輸出更加友好,F(xiàn)ISCO BCOS 2.0設(shè)計(jì)了通用日志格式。

通用日志格式如下:

log_level|time|[g:group_id][module_name]content
  • log_level : 日志級(jí)別,目前主要包括 trace , debug , info ,warning, error 和 fatal ,其中在發(fā)生極其嚴(yán)重錯(cuò)誤時(shí)會(huì)輸出fatal

  • time : 日志輸出時(shí)間,精確到納秒

     

  • group_id : 輸出日志記錄的群組ID

     

  • module_name :模塊關(guān)鍵字,例如同步模塊關(guān)鍵字為SYNC ,共識(shí)模塊關(guān)鍵字為CONSENSUS

     

  • content :日志記錄內(nèi)容

下面是群組3提交區(qū)塊時(shí)輸出的日志:

info|2019-06-2616:37:08.253147|[g:3][CONSENSUS][PBFT]^^^^^^^^Report,num=0,sealerIdx=0,hash=a4e10062...,next=1,tx=0,nodeIdx=2

該日志級(jí)別是info,輸出時(shí)間是 2019-06-26 ,群組id是3,模塊是 CONSENSUS ,日志關(guān)鍵字是 PBFT 和 Report 。

  日志級(jí)別

日志分級(jí)對(duì)于及時(shí)定位問(wèn)題至關(guān)重要,F(xiàn)ISCO BCOS 2.0 對(duì)標(biāo)生產(chǎn)環(huán)境,將日志級(jí)別從低到高劃分為 trace、debug、info、 warning、error 和 fatal ,其中:

  • trace 和 debug 日志主要用于代碼調(diào)試

     

  • info 級(jí)別日志輸出了系統(tǒng)關(guān)鍵流程,主要用于生產(chǎn)環(huán)境定位問(wèn)題

     

  • warning 日志輸出了告警信息,當(dāng)告警日志記錄超過(guò)一定數(shù)目時(shí),運(yùn)維人員應(yīng)當(dāng)介入

     

  • error 日志輸出了核心錯(cuò)誤信息,系統(tǒng)出現(xiàn) error 日志時(shí),運(yùn)維人員應(yīng)當(dāng)介入

     

  • fatal 日志一般用于程序開(kāi)發(fā)調(diào)試過(guò)程中,盡快定位bug,當(dāng)系統(tǒng)觸及不可能的邏輯時(shí),可以通過(guò)打印日志的形式終止程序,從而在開(kāi)發(fā)階段暴露邏輯錯(cuò)誤

我們希望,在降低日志占用磁盤(pán)空間的同時(shí),能盡量暴露、定位系統(tǒng)問(wèn)題。為了達(dá)到這個(gè)目的,生產(chǎn)環(huán)境一般開(kāi)啟info及其以上級(jí)別的日志,F(xiàn)ISCO BCOS建鏈工具生成的區(qū)塊鏈節(jié)點(diǎn)默認(rèn)日志級(jí)別是 info,會(huì)輸出 info、warning、error 以及fatal級(jí)別的日志。

若需要調(diào)整日志級(jí)別,可以修改節(jié)點(diǎn)目錄下的 config.ini 的 log.level 配置,如,將日志級(jí)別調(diào)整為 ≥debug ,配置如下:

[log]level=debug

  模塊日志關(guān)鍵字

 

為了準(zhǔn)確區(qū)分多個(gè)模塊日志、方便定位bug和解析日志,F(xiàn)ISCO BCOS 2.0為每個(gè)模塊都定制了日志關(guān)鍵字,且設(shè)計(jì)了宏,方便開(kāi)發(fā)者寫(xiě)日志輸出代碼的同時(shí),保證日志輸出格式一致,提升代碼的可讀性。

主要的日志宏包括:

  • LOG_BADGE :輸出模塊信息,模塊信息外圍用中括號(hào) [] 括起來(lái),從而與其他日志輸出信息區(qū)分開(kāi)

     

  • LOG_DESC : 輸出日志描述信息

     

  • LOG_KV :LOG_KV(_K, _V) 被定義為 "," << (_K) << "=" << (_V) ,主要用于輸出關(guān)鍵變量及其對(duì)應(yīng)的值

以 DEBUG 級(jí)別輸出區(qū)塊執(zhí)行信息的例子如下:

BLOCKVERIFIER_LOG(DEBUG)<< LOG_BADGE("executeBlock")                        << LOG_DESC("Init env takes")                                              << LOG_KV("time(ms)",utcTime() - startTime)                                               <<LOG_KV("txNum",block.transactions().size())                                               << LOG_KV("num",block.blockHeader().number());

各個(gè)模塊的日志關(guān)鍵字如下:

 

FISCO BCOS日志規(guī)范有哪些

常用日志

網(wǎng)絡(luò)模塊、共識(shí)模塊是決定區(qū)塊鏈系統(tǒng)能否正常運(yùn)行的重要模塊,本節(jié)主要介紹這兩個(gè)模塊的常用日志。通過(guò)這些日志,大家可以判斷區(qū)塊鏈系統(tǒng)是否正常工作。

  網(wǎng)絡(luò)模塊

 

查看網(wǎng)絡(luò)連接數(shù)目

可通過(guò)搜索關(guān)鍵字connected count 獲取指定節(jié)點(diǎn)的網(wǎng)絡(luò)連接情況,查看四節(jié)點(diǎn)區(qū)塊鏈系統(tǒng)中,某個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)連接情況,輸出日志如下:

$ tail -f log/* |grep "connected count"info|2019-06-2618:00:01.343480|[P2P][Service] heartBeat,connected count=3

其中 connected count 表示與當(dāng)前節(jié)點(diǎn)建立P2P網(wǎng)絡(luò)連接的節(jié)點(diǎn)數(shù)。

從上面日志可看出,該節(jié)點(diǎn)與三個(gè)其他節(jié)點(diǎn)建立了P2P網(wǎng)絡(luò)連接,符合預(yù)期。若節(jié)點(diǎn)連接不符合預(yù)期,則需要通過(guò)命令 netstat -anp| grep fisco-bcos 命令檢查節(jié)點(diǎn)連接情況,找出斷連節(jié)點(diǎn)。

證書(shū)驗(yàn)證失敗輸出日志

為了保障節(jié)點(diǎn)通信的機(jī)密性,F(xiàn)ISCOBCOS節(jié)點(diǎn)間通信采用了openssl握手協(xié)議,需要相互間進(jìn)行證書(shū)驗(yàn)證,在P2P 初始化過(guò)程中,若由于證書(shū)驗(yàn)證失敗導(dǎo)致節(jié)點(diǎn)間斷連,一般會(huì)輸出 Certverify failed 關(guān)鍵字的error日志:

$ tail -f log/* |grep "Cert verify failed"error|2019-06-2621:01:01.343989|[NETWORK][Host] Cert verify failed, wrong version number

節(jié)點(diǎn)輸出該錯(cuò)誤時(shí),一方面要確認(rèn)節(jié)點(diǎn)證書(shū)是否正確,另一方面需要確認(rèn)openssl版本是否升級(jí)到最新,ubuntu系統(tǒng)可使用 sudo apt install -y openssl 安裝最新的openssl;centos系統(tǒng)可使用 sudo yum -y install opensslopenssl-devel 升級(jí)到最新的openssl。

  共識(shí)模塊

 

查看Leader打包區(qū)塊

 

FISCO BCOS 2.0共識(shí)節(jié)點(diǎn)輪流擔(dān)任leader打包區(qū)塊,成功打包區(qū)塊時(shí)會(huì)輸出 +++ 日志,可通過(guò)搜索群組id(記為group_id )以及 +++ 日志判斷指定群組是否正常共識(shí),若沒(méi)有輸出 ++ 日志,說(shuō)明節(jié)點(diǎn)已處于異常狀態(tài),請(qǐng)優(yōu)先檢查網(wǎng)絡(luò)連接是否正常、節(jié)點(diǎn)證書(shū)是否有效。

查看群組2的區(qū)塊打包情況,輸出日志如下:

$ tail -f log/*|grep "g:2.*++"info|2019-06-2618:00:02.551399|[g:2][CONSENSUS][SEALER]++++++++++++++++ Generating sealon,blkNum=1,tx=0,nodeIdx=3,hash=1f9c2b14...

日志中各字段的含義如下:

  • blkNum : 打包區(qū)塊的高度

  • tx : 打包區(qū)塊中包含的交易數(shù)

  • nodeIdx : 當(dāng)前共識(shí)節(jié)點(diǎn)的索引

  • hash : 打包區(qū)塊的哈希

從上面日志可以看出,群組2的當(dāng)前l(fā)eader是索引為3( nodeIdx=3 )的節(jié)點(diǎn),正在打包區(qū)塊高度為1( blkNum=1 )的空區(qū)塊( tx=0 ,空區(qū)塊不落盤(pán))。

查看區(qū)塊落盤(pán)情況

 

非空區(qū)塊共識(shí)落盤(pán)成功或區(qū)塊同步落盤(pán)成功,均會(huì)輸出關(guān)鍵字為 Report 的日志,可通過(guò) `tail -f log/* | grep"${group_id}.*Report" 查看區(qū)塊落盤(pán)情況。

查看群組1區(qū)塊落盤(pán)日志輸出如下:

$ tail -f log/* |grep "g:1.*Report"info|2019-06-2618:00:07.802027|[g:1][CONSENSUS][PBFT]^^^^^^^^Report,num=716,sealerIdx=2,hash=dfd75e06...,next=717,tx=8,nodeIdx=3

其中,各個(gè)字段含義如下:

  • num : 落盤(pán)區(qū)塊塊高

  • sealerIdx : 打包該區(qū)塊的共識(shí)節(jié)點(diǎn)索引

  • hash : 落盤(pán)區(qū)塊哈希

  • next : 下一個(gè)區(qū)塊塊高

  • tx : 落盤(pán)區(qū)塊中包含的交易數(shù)

  • nodeIdx : 當(dāng)前共識(shí)節(jié)點(diǎn)索引

從上面日志可看出,群組1高度為716( num=716 )的區(qū)塊落盤(pán)成功,出塊節(jié)點(diǎn)是索引為2( sealerIdx=2)的共識(shí)節(jié) 點(diǎn),區(qū)塊哈希前8位為 dfd75e06 ,包含8筆( tx=8 )交易。

共識(shí)異常

 

網(wǎng)絡(luò)抖動(dòng)、網(wǎng)絡(luò)斷連或配置出錯(cuò)(如同一個(gè)群組的創(chuàng)世塊文件不一致)均有可能導(dǎo)致節(jié)點(diǎn)共識(shí)異常,PBFT共識(shí)節(jié)點(diǎn)會(huì)輸出 ViewChangeWarning 日志,可使用 tail -f log/*|grep "g:group_id.*ViewChangeWarning" 查看組group_id 是否共識(shí)異常。

組1共識(shí)異常輸出日志如下:

$ tail -f log/*|grep "g:1.*ViewChangeWarning"warning|2019-06-2618:00:06.154102|[g:1][CONSENSUS][PBFT]ViewChangeWarning: not caused by omitempty block ,v=5,toV=6,curNum=715,hash=ed6e856d...,nodeIdx=3,myNode=e39000ea...

各個(gè)字段的含義如下:

  • v: 當(dāng)前節(jié)點(diǎn)PBFT共識(shí)視圖

  • toV: 當(dāng)前節(jié)點(diǎn)試圖切換到的視圖

  • curNum: 節(jié)點(diǎn)最高塊高

  • hash: 節(jié)點(diǎn)最高塊哈希

  • nodeIdx: 當(dāng)前共識(shí)節(jié)點(diǎn)索引

  • myNode: 當(dāng)前節(jié)點(diǎn)Node ID

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI