BlockChain - 私有鏈系統監控

使用 Node.js 來監控鏈的狀態 ...

 

 

本系列為「徹底瞭解區塊鏈 從私有鏈出發 @夢森林」的會後心得。

 

章節分為三大部分:

  1. BlockChain - 私有鏈建立 ( Geth & Node.js )
  2. BlockChain - 私有鏈系統監控本篇
  3. BlockChain - 私有鏈的智能合約(Solidity & Node.js)- 未完工

 

 

為了方便了解鏈的狀態,除了使用終端機命令去查詢,

本篇介紹了一組工具 eth-netstats,此外它有一個依賴組件 eth-net-intelligence-api,兩者需要一併安裝佈署。

本工具使用 Node.js 作為伺服器環境,因此務必先行安裝。

 

以下將分別介紹:

 

專案目錄該怎麼放置分配呢?

如果你擔憂這些專案不知放何處,大可不必擔心,

你可以想像他們是獨立運作的伺服器,因此個別放置即可。

如下目錄結構:

 

 

 

一、eth-netstats

1. 安裝

首先將專案 clone 下來:

git clone https://github.com/cubedro/eth-netstats.git

進入專案。

cd eth-netstats

安裝依賴模組。

npm install

由於專案會使用到 grunt,因此我們先全域安裝

npm install -g grunt-cli

執行腳本佈署

grunt

 

接著在專案根目錄底下建立檔案 ws_secret.json

由於該專案使用到 Websockets 進行即時通訊,

因此我們必須先建立一份用於 socket 的密鑰。

ws_secret.json

{
    "WS_SECRET": "update"
}

 

 

2. 啟動

npm start

順利啟動後,就可以開啟網站 http://localhost:3000

 

如果出現以下警告,則代表可能是 ws_secret.json 設定失敗哦!

 

 

網站開起來後,可以看到漂亮的儀表板,

而數據部分則會透過 eth-net-intelligence-api 進行介接,因此接著繼續下一段佈署。

 

 

 

二、eth-net-intelligence-api

1. 安裝

將專案 clone 下來。

git clone https://github.com/cubedro/eth-net-intelligence-api.git

進入目錄:

cd eth-net-intelligence-api

安裝模組依賴。

npm install

 

在這邊使用到 pm2,它是用於管理 node.js 環境的一個程序管理器。

 

首先安裝該套件:

npm install -g pm2

利用查看版本來確認是否安裝成功:

pm2 -v

 

 

2. 設定參數

接著在專案根目錄中,修改 app.json

app.json

[
  {
    "name"              : "node-app",
    "script"            : "app.js",
    "log_date_format"   : "YYYY-MM-DD HH:mm Z",
    "merge_logs"        : false,
    "watch"             : false,
    "max_restarts"      : 10,
    "exec_interpreter"  : "node",
    "exec_mode"         : "fork_mode",
    "env":
    {
      "NODE_ENV"        : "production",
      "RPC_HOST"        : "localhost",
      "RPC_PORT"        : "8545",
      "LISTENING_PORT"  : "30303",
      "INSTANCE_NAME"   : "marginchain",
      "CONTACT_DETAILS" : "",
      "WS_SERVER"       : "http://localhost:3000",
      "WS_SECRET"       : "update",
      "VERBOSITY"       : 3
    }
  }
]
  • RPC_PORT:區塊鏈通訊協定 RPC 使用 8545 port,因此這邊與之相同。
  • LISTENING_PORT:區塊鏈所使用的 PORT 為 30303
  • WS_SERVER:這邊要通訊的主機就是剛剛的 eth-netstats
  • WS_SECRET:同 eth-netstats 專案中 ws_secret.json 的密鑰。
  • VERBOSITY:設定 pm2 的日誌儲存等級(3 = 全部記錄)
  • 詳細配置內容請查詢 - Configuration

 

 

3. 修改程式

由於程式有些問題,詳細可查看 [Ensure `results` is always an array #242],

根據[PR #242]我們修正一些程式碼:

找到檔案並修改 lib / node.js

lib / node.js]-約 590 行處

// var interv = {};
var interv = [];

lib / node.js]-約 610 行處

// results = false;
results = [];

 

 

4. 啟動程式

接著我們透過 pm2 掛載剛剛所寫的參數檔案 app.json 去啟動。

pm2 start app.json

 

務必區塊鏈以及 eth-netstats 都要保持啟動。

 

如果出現以下訊息,請務必確認是否有完成[修改程式]:

沒有自動替代文字。

 

啟動後看看網頁,就可以看儀表板獲取所有資訊了!

 

 

5. 查看程序狀態

使用 pm2 list 查看運作狀態。

pm2 list

 

 

查看程序日誌

使用 pm2 log 查看運作的日誌。

pm2 log

輸入 Ctrl + C 就可以停止監控。

 

 

6. 重啟服務

使用 pm2 restart [Name],就可以重新啟動服務。

pm2 restart node-app

或是使用 pm2 restart [ID],這裡的 ID,其實就是 pm2 list 中,項目索引值:

pm2 restart 0

 

你知道嗎?筆者輸入的 node-app 其實是由 app.json 所設定的哦!

 

 

7. 停止服務

使用 pm2 stop [Name],就可以停止服務,同樣也可使用 ID

pm2 stop node-app

 

這裡的停止服務,並非將服務移除,他是可以隨時被啟用的!

 

要再次啟用只要輸入 pm2 start [Name]

pm2 start node-app

 

 

8. 刪除服務

使用 pm2 delete [Name],就可以刪除。

pm2 delete node-app

或是使用 pm2 kill,將所有 pm2 的程序通通刪除

 

 

 

※、結語

本篇使用此兩組工具進行監控,

雖然有良好的視覺呈現,不過由於該專案已經很久沒有 maintain

可能會出現一些異狀,也歡迎推薦一些較新的監控工具。

 

下一篇,將會教學如何使用 Solidity 撰寫智慧合約。

 

有勘誤之處,不吝指教。ob'_'ov