先說明Pi節點怎麼運作的。

 

Pi Network採用的共識協議是「恆星共識協議 (Stellar Consensus Protocol, SCP)」,SCP的節點程式就叫做Stellar Core

 

因為不是每個人都有足夠的技術能力可以自行安裝與設定Stellar Core,所以Pi核心團隊想了一個辦法,將相關的程式與設定都打包好,做成一個image檔,只要安裝了Docker Desktop這個虛擬化軟體,就能執行。

 

Docker Desktop是一個虛擬化軟體,它載入image檔,建立一個Container(容器)Container就是一個執行的應用程式(此例是Stellar Core)加上執行它的簡易版Linux環境(包括root使用者權限、程式空間、使用者空間和網路空間等)

 

(以上內容摘至於 https://yuanrui919.github.io/whatisnode/ )

 

所以第一個要看的log就是Container運行的log,如果有重大的問題,這裡應該都能看出來,例如Linux環境啟動失敗。另外它也包含了supervisorlog(後面說明)

 

pi-consensus Container主要運行三個程式:

l   PostgreSQLStellar CoreHorizon的資料庫,它一定要先啟動,其餘兩個才能正常執行。

l   Stellar Core:就是SCP的節點程式。

l   HorizonTroubleshooting頁面中的API Services

 

另外還有Supervisor這個程式管理工具要提,它可用來管理容器中的多個程式,上述三個程式都是透過Supervisor來管理、啟動、停止。所以進一步要看的log就是這幾個程式的log

 

Log的位置可以從Docker查看 /VAR/LOG/SUPERVISOR 在本機的掛載路徑,WindowsMAC不一樣。

 

Windows位於 %appdata%\Pi Network\docker_volumes\supervisor_logs 目錄。

 

MAC位於 ~Library/Application Support/Pi Network/docker_volumes/supervisor_logs 目錄。

 

不管是Windows%appdata%MAC~Library都是隱藏檔,請自行上網搜尋怎麼開啟它,這裡不說明電腦操作技巧。

 

如下圖是Windows的範例:

 

該目錄有6種檔案:

檔名

說明

horizon-stdout---supervisor-xxxxxx.log

API Services (Horizon)的標準輸出。

postgresql-stderr---supervisor-xxxxxx.log

PostgreSQL的標準錯誤輸出。

postgresql-stdout---supervisor-xxxxxx.log

PostgreSQL的標準輸出。

stellar-core-stderr---supervisor-xxxxxx.log

Stellar Core的標準錯誤輸出。

stellar-core-stdout---supervisor-xxxxxx.log

Stellar Core的標準輸出,這是本文討論的重點。

supervisord.log

Supervisorlog

 

其中xxxxxx是隨機產生的,每台節點的檔名都不一樣。當檔案大小到達50MB的時候,會自動產生一個新檔,而舊檔案則在檔名後面接上 .1 .2 .3 等數字,最多10個檔案。

 

log裡面紀錄的時間是時區UTC+0,跟台灣的時間差了8小時,閱讀起來不是很方便,還要自己在腦袋中加8小時,我習慣裝好節點後先調整時區(不改也沒關係,這不是必要的)

 

pi-consensusCLI,執行sudo dpkg-reconfigure tzdata

 

stellar-core-stdout---supervisor-xxxxxx.log範例:

 

時間,包含日期和時間,精準到毫秒。要注意,如果沒有改時區,這裡的時間要再加8小時才是台灣時間。

 

節點ID,或稱節點的Public Key,每個節點都是獨一無二的,這裡只顯示前5碼。

 

log類型Stellar Core由好幾個元件組成,各自負責不同的功能,由log類型可以知道是哪個元件的log,還可以看出來是錯誤(ERROR)、警告(WARNING)還是訊息(INFO)

l   [SCP] 恆星共識協議子系統,負責產生共識。

l   [Herder] 負責SCPStellar Core的其餘部分之間的接口。Herder經常通過委派給其他元件來完成其任務。

l   [Overlay] 負責節點之間的點對點連線,以及管理廣播(broadcast)消息、任播(anycast)請求/回复消息。

l   [Ledger] 套用SCP共識的結果,將帳本內容提交給[Bucket]存儲,觸發歷史帳本的發布。當Ledger檢測到本地帳本落後於網路太多時,它也會觸發歷史系統的catchup程序。

l   [History] 將交易和帳本發佈到異地永久存儲以供審計,並作為其他節點的追趕資料來源。當該節點落後時,歷史系統會獲取追趕數據並將其提交給 Ledger 兩次:首先驗證(Verify)其安全性,然後套用(Apply,寫到core DBXDR)它。

l   [Bucket] 將帳本存儲在磁碟上。

l   [Tx] 執行各種交易與操作。

l   [Perf] 效能相關的訊息。

 

log內容,詳細的訊息。

 

案例:

 

上面的log是因為我不小心重啟了路由器,外部IP也變了,所以原本已經連上的節點(不管是inout連線),通通都中斷了,重新連線。還記得節點間的連線是由Overlay負責嗎?所以log類型是[Overlay INFO]

 

以上只是大略介紹,至少在節點有問題時,知道要去哪裡找log

 

回首頁