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...