NEAR節點自監控

2021-10-07 04:15:08 字數 3381 閱讀 9146

json rpc監控

結語對near節點程序的監控,可以從以下幾個方面入手:

通過對這三方面資訊的綜合分析,可以比較準確的得到節點的執行狀態和資源占用情況。

日誌的位置

通過分析該工具原始碼,可知節點程序有兩種啟動方式:docker和非docker方式。

在docker方式下,通過docker的方式檢視日誌,注意節點程序的容器名稱是nearcore

docker logs --follow nearcore --tail 100

在非docker方式下,從nearuplib/nodelib.py檔案的show_logs方法中可以看到日誌檔案位置:

command += [os.path.expanduser(f'~/.nearup/logs/.log')]

日誌的格式

near節點日誌按格式主要可分為三種,如圖:

分析方式

從自監控的角度,一般僅需關注日誌的頭部和尾部。

從頭部,可以獲得節點程序的啟動時間,版本號,build號和協議號等。還可以獲得區塊儲存路徑,可用於儲存監控。頭部資訊比較簡單,這裡不再贅述。

從尾部,可獲得最新的節點執行資訊。這裡以python**為例,詳細介紹這部分資訊的獲取和分析。

首先,從尾部獲取比如10行日誌資料,我們希望這些內容足夠揭示節點的運**況:

import subprocess

def tail_logfile():

ret =

command = 'tail -n 10 ~/.nearup/logs/betanet.log'

try:

output = subprocess.popen(command, shell=true, stdout=subprocess.pipe, stderr=subprocess.stdout)

ret = output.stdout.readlines()

except exception as e:

print('%s, %s' % (type(e), e))

return ret

然後,我們對每行日誌進行分類,判斷出是哪一類日誌,對每一類日誌,都保留最後一次記錄。

是否規範日誌,可通過是否顏色控制字開頭來判斷:

def is_regular(line):

"""return true if startwith \033[2m

which means this line is a regular log line.

"""if line.startswith('\033[2m'):

return true

return false

對於規範日誌,祭出強大的正規表示式,對各個部分進行拆分:

import re

parterns =

def regular_parser(line):

"""if ret['content'] != '', then this line is a regular info log,

otherwise, it is a regular state rutine log.

"""ret = {}

ret['content'] = line.split('\033[0m')[-1].strip()

for name, partern in parterns.items():

re_obj = re.search(partern, line)

if re_obj:

ret[name] = re_obj.group(1).strip()

return ret

比如對一條規範例行日誌,經過拆分,我們得到:

對一條規範資訊日誌,經過拆分,我們得到:

因此,可以通過content的內容是否為空串,區分資訊日誌與例行日誌。

而對於特殊日誌,我們將其前面一條規範日誌的時間作為其時間,將其多行內容完整記錄下來。

這樣一來,每次掃瞄日誌後,我們都得到:

而規範例行日誌中的高度height資訊,可以與rpc資訊相互驗證。

near的json prc詳情可參見

我們用到的主要是兩個method:

這些方法的具體返回欄位請見上面的鏈結。這裡主要介紹如何通過對本地和遠端呼叫的結果對比,發現異常。

比如對本地和遠端(一般選用團隊提供的rpc服務 的status方法返回:

2020-06-13 19:50:01 scan status ....

local status:

betanet version 1.0.0 build b30864b8 height 7205724

remote status:

betanet version 1.0.0 build b30864b8 height 7205724

我們需要對比版本和build號,看本地節點是否需要更新;

我們需要對比最新高度,如果本地落後遠端過多,則本地節點大概率出了問題,需要立刻告警出來。

而,對validators方法的返回資訊,需要檢查和對比的專案就要複雜一些。優先選擇remote的返回資訊進行分析。當remote不可達,且日誌分析未發現本地節點異常時,亦可採信本地rpc的返回內容:

remote validator info:

cur_set> shards: [0], stake: 149570.036872, gen/total: 63/63

cur_seat_price: 120010.530474

next_set> shards: [0], stake: 149606.072015

next_seat_price: 121814.883050

proposal> not in

top1_proposal: sl1sub stake 113953.634407

prev_epoch_kickout> not in

epoch_start_height: 7199487

通過日誌分析,本地和遠端rpc的對比分析,基本能精確定位本地節點是否有問題,然後根據情況進行郵件或簡訊告警,即可實現對near 節點的基本自監控功能。

更進一步,我們還可將得到的資料,通過grafana等dashboard工具進行視覺化展現。比如將cpu和記憶體占用以折線圖的形式呈現等。

Prometheus 監控節點

tar xf node exporter 0.18.1.linux amd64.tar.gz cd node exporter 0.18.1.linux amd64 cp node exporter usr local bin 檢視版本 root server03 media prometheus ...

ElasticSearch 監控單個節點詳解

集群健康就像是光譜的一端 對集群的所有資訊進行高度概述。而節點統計值api 則是在另一端。它提供乙個讓人眼花繚亂的統計資料的陣列,包含集群的每乙個節點統計值。節點統計值提供的統計值如此之多,在完全熟悉它之前,你可能都搞不清楚哪些指標是最值得關注的。我們將會高亮那些最重要的監控指標 但是我們鼓勵你記錄...

手把手部署Cadvisor監控單節點的容器負載

cadviosr是google用來監測單節點的資源資訊的監控工具。雖然docker提供了一些cli的命令列的功能,如docker stats,但是在乙個看圖的時代,基本的功能是很難滿足人民群眾日益增長的物質文化需求,cadvisor提供了一目了然的單節點多容器的資源監控功能。google的kuber...