GSP1116
總覽
基於安全性、法規遵循、效能或隱私權考量,您可能需要自行託管區塊鏈節點。去中心化、具韌性且永續發展的網路,是任何區塊鏈通訊協定的重要基礎。Web3 開發人員可以使用 Google Cloud 的 Blockchain Node Engine,這是全代管的節點託管解決方案,適用於 Web3 開發作業。組織也能在 Google Cloud 設定及管理自己的節點。Google Cloud 是值得信賴的 Web3 基礎架構合作夥伴,提供安全、可靠且可擴充的節點託管基礎架構。如要進一步瞭解如何在 Google Cloud 託管節點,請參閱網誌文章「Blockchain Node Engine 隆重登場:Web3 開發作業適用的全代管節點託管服務」。
如想深入瞭解將自行管理的區塊鏈節點部署至雲端時,需考量的技術因素和架構決策,請參閱網誌文章「Web3 適用的 Google Cloud」。
在本實驗室,您將建立虛擬機器 (VM) 來部署以太坊遠端程序呼叫 (RPC) 節點。此節點可接收網路中的區塊鏈更新,並處理 RPC API 要求。您將使用搭載 20 GB 開機磁碟、4 個虛擬 CPU (vCPU) 和 16 GB RAM 的 e2-standard-4 機型。為確保有足夠空間存放區塊鏈資料,您會將 200 GB 的 SSD 磁碟連至執行個體。您會使用 Ubuntu 20.04 並部署兩項服務:Geth (「執行層」) 和 Lighthouse (「共識層」)。這兩項服務共同組成以太坊 RPC 節點。
目標
在本實驗室,您將瞭解如何執行下列工作:
- 建立含有永久磁碟的 Compute Engine 執行個體。
- 設定靜態 IP 位址和網路防火牆規則。
- 安排定期備份。
- 部署以太坊執行層 Geth。
- 部署以太坊共識層 Lighthouse。
- 進行以太坊 RPC。
- 設定 Cloud Logging。
- 設定 Cloud Monitoring。
- 設定運作時間檢查。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始實驗室及登入 Google Cloud 控制台
-
按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 此實驗室所需的臨時憑證 (使用者名稱和密碼)
- 完成此實驗室所需的其他資訊 (如有)
請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。
-
按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗並排開啟分頁。
注意:頁面顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab setup and access」面板找到「Username」。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab setup and access」面板找到「Password」。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
繼續點按後續頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請按一下「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
在本實驗室,您將使用下列工具:
- Ubuntu 24.04
- Geth
- Lighthouse
- Curl
- gcloud
工作 1:建立虛擬機器的基礎架構
建立公開靜態 IP 位址、防火牆規則、服務帳戶、快照排程,以及使用新 IP 位址的虛擬機器。這是部署以太坊的基礎架構。
建立公開靜態 IP 位址
在本節中,您將設定公開 IP 位址供虛擬機器使用。
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「虛擬私有雲網路」>「IP 位址」。
- 在「IP 位址」資訊卡中,點選「預留外部 IP」,建立靜態 IP 位址。
- 使用下列值設定靜態位址:
| 屬性 |
值 (輸入或選取) |
| 名稱 |
eth-mainnet-rpc-ip |
| 網路服務級別 |
專業版 |
| IP 版本 |
IPv4 |
| 類型 |
單一區域 |
| 區域 |
|
| 連接到: |
無 |
- 點選「保留」。
建立防火牆規則
建立防火牆規則,供 VM 透過指定通訊埠通訊。
Geth P2P 會透過通訊埠 30303 上的 TCP 和 UDP 通訊;Lighthouse P2P 會透過通訊埠 9000 的 TCP 和 UDP 通訊;Geth RPC 則使用 TCP 8545。
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「虛擬私有雲網路」>「防火牆」。
- 點選動作列中的「建立防火牆規則」,建立防火牆規則。
- 使用下列值設定防火牆:
| 屬性 |
值 (輸入或選取) |
| 名稱 |
eth-rpc-node-fw |
| 記錄 |
停用 |
| 網路 |
default |
| 優先順序 |
1000 |
| 流量方向 |
輸入 |
| 相符時執行的動作 |
允許 |
| 目標 |
指定的目標標記 |
| 目標標記 |
eth-rpc-node (輸入值後按下 Enter 鍵) |
| 來源篩選器 |
IPv4 範圍 |
| 來源 IPv4 範圍 |
0.0.0.0/0 (輸入值後按下 Enter 鍵) |
| 指定的通訊協定和通訊埠: |
TCP:30303, 9000, 8545 UDP:30303, 9000 |
- 點選「建立」。
建立服務帳戶
建立 VM 運作所需的服務帳戶。
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「IAM 與管理」>「服務帳戶」。
- 點選動作列中的「建立服務帳戶」,建立帳戶。
- 使用下列值設定服務帳戶:
| 屬性 |
值 (輸入或選取) |
| 服務帳戶名稱 |
eth-rpc-node-sa |
| 服務帳戶 ID |
eth-rpc-node-sa |
- 點選「建立並繼續」。
- 新增下列角色:
| 屬性 |
值 (輸入或選取) |
| 角色 |
Compute OS Login、Service Controller、Logs Writer、Monitoring Metric Writer、Cloud Trace Agent、Compute Network User
|
- 點選「繼續」。
- 點選「完成」。
建立快照排程
在本節中,您將設定快照排程,用於虛擬機器連接的磁碟,其中包含區塊鏈資料。這麼做會備份鏈結資料。
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「Compute Engine」>「快照」。
- 點選「建立快照排程」,建立快照排程。
- 使用下列值設定快照排程:
| 屬性 |
值 (輸入或選取) |
| 名稱 |
eth-mainnet-rpc-node-disk-snapshot |
| 區域 |
|
| 單一區域 |
|
| 排程選項 |
排程頻率:Daily,開始時間 (世界標準時間):6:00 PM - 7:00 PM,超過下列時間即自動刪除快照:7
|
| 刪除規則 |
保留快照 |
- 點選「建立」。
建立虛擬機器
在本節中,您將設定虛擬機器來部署以太坊。
-
前往 Cloud 控制台,依序點選「導覽選單」圖示
>「Compute Engine」>「VM 執行個體」。
-
點選「建立執行個體」來建立 VM。
-
前往「機器設定」頁面。
將下列值填入對應欄位:
| 屬性 |
值 (輸入或選取) |
| 名稱 |
eth-mainnet-rpc-node |
| 區域 |
|
| 可用區 |
|
| 系列 |
E2 |
| 機型 |
e2-standard-4 |
-
點選「OS 和儲存空間」。
點選「變更」並選取下列值:
| 屬性 |
值(輸入或選取) |
| 作業系統 |
Ubuntu |
| 版本 |
Ubuntu 24.04 LTS (x86/64) |
| 開機磁碟類型 |
SSD 永久磁碟 |
| 大小 |
50 GB |
點選「選取」。
在「其他磁碟」下方,點選「新增磁碟」
| 屬性 |
值(輸入或選取) |
| 名稱 |
eth-mainnet-rpc-node-disk |
| 磁碟來源類型 |
空白磁碟 |
| 磁碟類型 |
SSD 永久磁碟 |
| 大小 |
200 GB (如為較大型的安裝作業,則為 2,000 GB) |
點選「儲存」。
-
點選「資料保護」
「快照排程」請選取「eth-mainnet-rpc-node-disk-snapshot」
-
點選「網路」。
| 屬性 |
值 (輸入或選取) |
| 網路標記 |
eth-rpc-node (輸入值後按下 Enter 鍵,此值與防火牆設定一致) |
-
點選「安全性」
點選「Check my progress」,確認目標已達成。
建立虛擬機器的基礎架構
工作 2:在虛擬機器進行設定及安裝
現在,請透過 SSH 連至 VM,並執行指令來安裝軟體。
透過 SSH 登入 VM
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「Compute Engine」>「VM 執行個體」。
- 在「eth-mainnet-rpc-node」資料列,點選「SSH」來開啟 SSH 視窗。
- 如果出現「允許透過瀏覽器中的 SSH 連線至 VM」提示訊息,請點選「授權」。
在 VM 建立交換檔案
為了提供程序額外的 RAM,請建立交換檔案。這是為了在 VM 需要時,增加可使用的 RAM 容量。
- 執行下列指令,建立 40 GB 的交換檔案:
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=40KiB
請注意,第一個指令需要一些時間才能執行完畢。
- 更新交換檔案的權限:
sudo chmod 0600 /swapfile
- 指定要做為交換分區的檔案:
sudo mkswap /swapfile
- 將交換檔案設定新增至 /etc/fstab,以便系統在重新啟動後能辨識掛接的磁碟機:
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
- 啟用交換檔案:
sudo swapon -a
- 確認系統已辨識交換檔案:
free -g
您應該會看到類似下列的訊息:
輸出內容:
total used free shared buff/cache available
Mem: 15 0 0 0 15 15
Swap: 24 0 24
將連接的磁碟掛接至 VM
在設定 VM 時,您建立了連接磁碟。VM 不會自動辨識此磁碟,必須先格式化並「掛接」才能使用。
- 查看連接的磁碟。您應該會看到 sdb 項目,大小為 200 GB:
sudo lsblk
- 格式化連接的磁碟:
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
- 建立資料夾並掛接連接的磁碟:
sudo mkdir -p /mnt/disks/chaindata-disk
sudo mount -o discard,defaults /dev/sdb /mnt/disks/chaindata-disk
- 更新資料夾權限,供程序讀取/寫入磁碟:
sudo chmod a+w /mnt/disks/chaindata-disk
- 擷取已掛接磁碟機的磁碟 ID,確認磁碟機已掛接:
sudo blkid /dev/sdb
您應該會看到類似下方輸出方塊中的訊息:
輸出內容:
/dev/sdb: UUID="7fa9c421-0054-4555-b0ca-b470a97a3d84" TYPE="ext4"
- 擷取已掛接磁碟的磁碟 ID,並附加至 /etc/fstab 檔案。此檔案可確保 VM 重新啟動時,磁碟機仍會掛接。
export DISK_UUID=$(findmnt -n -o UUID /dev/sdb)
echo "UUID=$DISK_UUID /mnt/disks/chaindata-disk ext4 discard,defaults,nofail 0 2" | sudo tee -a /etc/fstab
- 執行 df 指令,確認磁碟已掛接、格式化,且已分配正確的大小:
df -h
您應該會看到類似下方的訊息,其中顯示新掛接的磁碟區和大小:
輸出內容:
/dev/sdb 196G 28K 196G 1% /mnt/disks/chaindata-disk
如需日後調整磁碟大小,請按照操作說明進行。
點選「Check my progress」,確認目標已達成。
在 VM 建立交換檔案,並將連接的磁碟掛接至 VM
在 VM 建立使用者
建立用來執行程序的使用者。
- 執行下列指令,建立名為 ethereum (以太坊) 的使用者:
sudo useradd -m ethereum
sudo usermod -aG sudo ethereum
sudo usermod -aG google-sudoers ethereum
- 切換至以太坊使用者:
sudo su ethereum
- 啟動 Bash 指令列:
bash
- 切換至以太坊使用者的主資料夾:
cd ~
安裝以太坊軟體
- 更新作業系統:
sudo apt update -y
sudo apt-get update -y
- 安裝常用軟體:
sudo apt install -y dstat jq software-properties-common
- 安裝 Google Cloud Ops Agent:
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
- 移除下載的指令碼檔案:
rm add-google-cloud-ops-agent-repo.sh
- 為 Geth 和 Lighthouse 用戶端的記錄和鏈結資料建立資料夾:
mkdir /mnt/disks/chaindata-disk/ethereum/
mkdir /mnt/disks/chaindata-disk/ethereum/geth
mkdir /mnt/disks/chaindata-disk/ethereum/geth/chaindata
mkdir /mnt/disks/chaindata-disk/ethereum/geth/logs
mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse
mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse/chaindata
mkdir /mnt/disks/chaindata-disk/ethereum/lighthouse/logs
- 利用套件管理員安裝 Geth:
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get -y install ethereum
- 確認 Geth 可用且為最新版本:
geth version
您應該會看到類似下列的訊息:
輸出內容:
Geth
Version: 1.14.11-stable
Git Commit: ea9e62ca3db5c33aa7438ebf39c189afd53c6bf8
Architecture: amd64
Go Version: go1.23.1
Operating System: linux
GOPATH=
GOROOT=
- 下載 Lighthouse 用戶端。此指令碼會從 GitHub 下載最新版本。
# Fetch the latest release information from GitHub API
RELEASE_URL="https://api.github.com/repos/sigp/lighthouse/releases/latest"
LATEST_VERSION=$(curl -s $RELEASE_URL | jq -r '.tag_name')
# Download the latest release using curl
DOWNLOAD_URL=$(curl -s $RELEASE_URL | jq -r '.assets[] | select(.name | endswith("x86_64-unknown-linux-gnu.tar.gz")) | .browser_download_url')
curl -L "$DOWNLOAD_URL" -o "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
- 解壓縮 lighthouse tar 檔案後再移除:
# Extract the tar file
tar -xvf "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
# Remove the tar file
rm "lighthouse-${LATEST_VERSION}-x86_64-unknown-linux-gnu.tar.gz"
- 將 Lighthouse 二進位檔移至 /usr/bin 資料夾,並更新權限:
sudo mv lighthouse /usr/bin
- 確認 Lighthouse 可用且為最新版本:
lighthouse --version
您應該會看到類似下列的訊息,請注意,版本號碼可能不同:
輸出內容:
Lighthouse v5.3.0-d6ba8c3
BLS library: blst-portable
BLS hardware acceleration: true
SHA256 hardware acceleration: false
Allocator: jemalloc
Profile: maxperf
Specs: mainnet (true), minimal (false), gnosis (true)
- 建立共用 JWT 密鑰。此密鑰是安全機制,可限制誰能呼叫執行用戶端的 RPC 端點。
cd ~
mkdir ~/.secret
openssl rand -hex 32 > ~/.secret/jwtsecret
chmod 440 ~/.secret/jwtsecret
點選「Check my progress」,確認目標已達成。
在 VM 建立使用者並安裝以太坊軟體
工作 3:啟動以太坊的執行和共識用戶端
以太坊有兩個用戶端:Geth (執行層) 和 Lighthouse (共識層)。兩者會同時執行並搭配運作。Geth 接著會建立 Lighthouse 呼叫的 authrpc 端點和通訊埠。此端點受到儲存在本機的通用安全性權杖保護。Lighthouse 會使用執行端點和安全性權杖連至 Geth。
如要瞭解 Geth 如何連至共識用戶端,請參閱連至共識用戶端說明文件。如要進一步瞭解 Lighthouse 如何連至執行用戶端,請參閱合併遷移 - Lighthouse 手冊說明文件。
啟動 Geth
下列指令會啟動 Geth 執行用戶端。
- 首先在 gcloud 進行驗證。請在 SSH 工作階段執行下列指令:
gcloud auth login
當系統顯示「Do you want to continue (Y/n)?」提示訊息時,請按下 Enter 鍵。
-
在新分頁前往顯示的連結。
-
點選您目前所用帳戶的使用者名稱「」,然後按一下「Allow」。
-
當系統顯示「Enter the following verification code in gcloud CLI on the machine you want to log into」提示訊息時,請點選複製按鈕,然後返回 SSH 工作階段,將程式碼貼到「Enter authorization code:」提示訊息中。
-
設定外部 IP 位址環境變數:
export CHAIN=eth
export NETWORK=mainnet
export EXT_IP_ADDRESS_NAME=$CHAIN-$NETWORK-rpc-ip
export EXT_IP_ADDRESS=$(gcloud compute addresses list --filter=$EXT_IP_ADDRESS_NAME --format="value(address_range())")
- 執行下列指令,將 Geth 做為背景程序啟動。在本實驗室,您會使用「snap」同步模式,此為輕量節點。為了同步為完整節點,請使用「full」做為同步模式。您可以在指令列執行這項操作,也能先將指令儲存至 .sh 檔案再執行。您也能將 Geth 設為使用 systemd 做為服務執行。
nohup geth --datadir "/mnt/disks/chaindata-disk/ethereum/geth/chaindata" \
--http.corsdomain "*" \
--http \
--http.addr 0.0.0.0 \
--http.port 8545 \
--http.corsdomain "*" \
--http.api admin,debug,web3,eth,txpool,net \
--http.vhosts "*" \
--gcmode full \
--cache 2048 \
--mainnet \
--metrics \
--metrics.addr 127.0.0.1 \
--syncmode snap \
--authrpc.vhosts="localhost" \
--authrpc.port 8551 \
--authrpc.jwtsecret=/home/ethereum/.secret/jwtsecret \
--txpool.accountslots 32 \
--txpool.globalslots 8192 \
--txpool.accountqueue 128 \
--txpool.globalqueue 2048 \
--nat extip:$EXT_IP_ADDRESS \
&> "/mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log" &
點選「Check my progress」,確認目標已達成。
以背景程序啟動 Geth,並使用 snap 同步模式
- 執行下列指令,查看程序 ID:
ps -A | grep geth
- 查看記錄,確認程序是否正確啟動:
tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log
您應該會看到類似下方輸出方塊中的訊息。Geth 用戶端必須與共識用戶端配對,才能繼續運作。
輸出內容:
Looking for peers peercount=1 tried=27 static=0
Post-merge network, but no beacon client seen. Please launch one to follow the chain!
- 輸入 Ctrl+C,退出記錄監控作業。
啟動 Lighthouse
接下來您將啟動 Lighthouse 共識用戶端。
- 執行下列指令,以背景程序啟動 Lighthouse。您可以在指令列執行這項操作,也能先將指令儲存至 .sh 檔案再執行。您也能將 Geth 設為使用 systemd 做為服務執行。
nohup lighthouse bn \
--network mainnet \
--http \
--metrics \
--datadir /mnt/disks/chaindata-disk/ethereum/lighthouse/chaindata \
--execution-jwt /home/ethereum/.secret/jwtsecret \
--execution-endpoint http://localhost:8551 \
--checkpoint-sync-url https://sync-mainnet.beaconcha.in \
&> "/mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log" &
- 執行下列指令,查看程序 ID:
ps -A | grep lighthouse
- 查看記錄,確認程序是否正確啟動。可能需要幾分鐘才會顯示:
tail -f /mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log
畫面會顯示類似下列的訊息:
輸出內容:
INFO Syncing
INFO Synced
INFO New block received
-
輸入 Ctrl+C,退出記錄監控作業。
-
再次查看 Geth 記錄,確認記錄是否正確產生。
tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log
您應該會看到類似下方輸出方塊中的訊息:
輸出內容:
Syncing beacon headers
確認節點已與區塊鏈同步
確認節點是否仍在同步。此程序需要一些時間才能完成。請注意,您不必等待節點同步完成,就能完成實驗室。輸出內容應會顯示同步處理狀態 JSON,而非 false。有兩種方法能查看同步狀態:Geth 和 RPC。
- 執行下列 Geth 指令,檢查節點同步狀態。如果輸出內容為「false」,表示已與網路完全同步,但在本實驗室期間,節點可能還在同步中。
geth attach /mnt/disks/chaindata-disk/ethereum/geth/chaindata/geth.ipc
- 在 Geth 控制台執行下列指令:
eth.syncing
輸出結果應該會類似下列內容:
輸出內容:
#If not synced:
{
currentBlock: 5186007,
healedBytecodeBytes: 0,
healedBytecodes: 0,
healedTrienodeBytes: 0,
healedTrienodes: 0,
healingBytecode: 0,
healingTrienodes: 0,
highestBlock: 16193909,
startingBlock: 0,
syncedAccountBytes: 2338698797,
syncedAccounts: 9417189,
syncedBytecodeBytes: 302598044,
syncedBytecodes: 58012,
syncedStorage: 42832820,
syncedStorageBytes: 9263550660
}
#If synced:
false
- 輸入 exit,退出 Geth 控制台。
- 執行下列 curl 指令,檢查節點是否仍在同步。指令列工具「jq」會將 curl 指令的 json 輸出內容格式化。輸出內容為「false」表示節點已與網路同步。
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","id":67}' http://localhost:8545 | jq
輸出內容:
#If not synced:
{
"jsonrpc": "2.0",
"id": 67,
"result": {
"currentBlock": "0x4d70e9",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodeBytes": "0x0",
"healedTrienodes": "0x0",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0xf71975",
"startingBlock": "0x0",
"syncedAccountBytes": "0x8b65b62d",
"syncedAccounts": "0x8fb1e5",
"syncedBytecodeBytes": "0x1209479c",
"syncedBytecodes": "0xe29c",
"syncedStorage": "0x28d93b4",
"syncedStorageBytes": "0x2282690c4"
}
}
#If synced:
{"jsonrpc":"2.0","id":67,"result":false}
- 執行下列 curl 指令,確認節點能否透過外部 IP 位址存取:
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","id":67}' http://$EXT_IP_ADDRESS:8545 | jq
輸出內容:
#If not synced:
{
"jsonrpc": "2.0",
"id": 67,
"result": {
"currentBlock": "0x4d70e9",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodeBytes": "0x0",
"healedTrienodes": "0x0",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0xf71975",
"startingBlock": "0x0",
"syncedAccountBytes": "0x8b65b62d",
"syncedAccounts": "0x8fb1e5",
"syncedBytecodeBytes": "0x1209479c",
"syncedBytecodes": "0xe29c",
"syncedStorage": "0x28d93b4",
"syncedStorageBytes": "0x2282690c4"
}
}
#If synced:
{"jsonrpc":"2.0","id":67,"result":false}
工作 4:設定 Cloud 作業套件
Google Cloud 提供多項作業服務,可管理以太坊節點。本節將逐步說明如何設定 Cloud Logging、代管型 Prometheus、Cloud Monitoring 和 Cloud 警告功能。
設定 Cloud Logging
根據預設,Geth 和 Lighthouse 會將記錄寫入宣告的記錄檔。您需要將記錄資料匯入 Cloud Logging。Cloud Logging 具備強大的搜尋功能,可針對特定記錄訊息建立警告。
- 更新 Cloud 作業套件設定檔的權限,以便更新該檔案:
sudo chmod 666 /etc/google-cloud-ops-agent/config.yaml
- 設定 Cloud Ops Agent,將記錄資料傳送至 Cloud Logging。更新「/etc/google-cloud-ops-agent/config.yaml」檔案,加入這個 Ops Agent 設定。此設定檔定義了要匯入 Cloud Logging 的 Geth 和 Lighthouse 記錄:
sudo cat << EOF >> /etc/google-cloud-ops-agent/config.yaml
logging:
receivers:
syslog:
type: files
include_paths:
- /var/log/messages
- /var/log/syslog
ethGethLog:
type: files
include_paths: ["/mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log"]
record_log_file_path: true
ethLighthouseLog:
type: files
include_paths: ["/mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log"]
record_log_file_path: true
journalLog:
type: systemd_journald
service:
pipelines:
logging_pipeline:
receivers:
- syslog
- journalLog
- ethGethLog
- ethLighthouseLog
EOF
- 儲存後,執行下列指令,重新啟動代理並套用變更:
sudo systemctl stop google-cloud-ops-agent
sudo systemctl start google-cloud-ops-agent
sudo systemctl status google-cloud-ops-agent
- 輸入 Ctrl+C,退出狀態畫面。
- 如果狀態顯示錯誤,請使用下列指令查看詳情:
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
- 查看 Cloud Logging,確認記錄訊息顯示在控制台中。前往 Cloud 控制台,依序點選「導覽選單」圖示
>「查看所有產品」>「觀測能力」部分的「記錄」。在左選單點選「Logs Explorer」。您會看到類似下方的訊息:
設定代管型 Prometheus
我們使用 --metrics 旗標啟動了 geth 和 lighthouse 用戶端,因此這兩個用戶端都會在 HTTP 通訊埠輸出指標。這些指標可儲存在 Prometheus 等時間序列資料庫中,用來提供資料給 Grafana 資訊主頁,以便取得洞察資訊。一般來說,您需要在 VM 安裝 Prometheus,但只要在 Cloud Ops Agent 略為設定,就能擷取指標並儲存在 Google Cloud 的代管型 Prometheus 服務中。
- 在 VM 的指令列中,確認 Geth 指標端點已啟用。
curl http://localhost:6060/debug/metrics/prometheus
輸出內容:
......
# TYPE vflux_server_clientEvent_deactivated gauge
vflux_server_clientEvent_deactivated 0
# TYPE vflux_server_clientEvent_disconnected gauge
vflux_server_clientEvent_disconnected 0
# TYPE vflux_server_inactive_count gauge
vflux_server_inactive_count 0
- 在 VM 的指令列中,確認 Lighthouse 指標端點已啟用。
curl http://localhost:5054/metrics
輸出內容:
......
gossipsub_heartbeat_duration_bucket{le="300.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="350.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="400.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="450.0"} 5679573
gossipsub_heartbeat_duration_bucket{le="+Inf"} 5679573
......
- 設定 Cloud Ops Agent,將指標資料傳送至代管型 Prometheus。更新「/etc/google-cloud-ops-agent/config.yaml」檔案,加入這個 Ops Agent 設定。此設定檔定義了要匯入代管型 Prometheus 的 Geth 和 Lighthouse 指標端點:
sudo cat << EOF >> /etc/google-cloud-ops-agent/config.yaml
metrics:
receivers:
prometheus:
type: prometheus
config:
scrape_configs:
- job_name: 'geth_exporter'
scrape_interval: 10s
metrics_path: /debug/metrics/prometheus
static_configs:
- targets: ['localhost:6060']
- job_name: 'lighthouse_exporter'
scrape_interval: 10s
metrics_path: /metrics
static_configs:
- targets: ['localhost:5054']
service:
pipelines:
prometheus_pipeline:
receivers:
- prometheus
EOF
- 儲存後,執行下列指令,重新啟動代理並套用變更:
sudo systemctl stop google-cloud-ops-agent
sudo systemctl start google-cloud-ops-agent
sudo systemctl status google-cloud-ops-agent
- 輸入 Ctrl+C,退出狀態畫面。
- 如果狀態顯示錯誤,請使用下列指令查看詳情:
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
-
查看 Cloud Logging,確認指標顯示在控制台中。前往 Cloud 控制台,依序點選「導覽選單」圖示
>「查看所有產品」>「觀測能力」部分的「監控」。在左選單點選「Metrics Explorer」。
-
選取「<> PromQL」選項。在查詢方塊中,輸入 Lighthouse 指標 gossipsub_heartbeat_duration_bucket。點選「執行查詢」。您應該會看到類似下方的結果:
您也能對 Geth 指標執行相同操作 (例如 rpc_duration_eth_blockNumber_success_count),確認系統會顯示 Geth 指標。
查看 Cloud Monitoring
虛擬機器的 Cloud Monitoring 應該已啟用。
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「Compute Engine」>「VM 執行個體」。
- 點選 VM「eth-mainnet-rpc-node」。
- 點選「觀測能力」分頁標籤。
- 所有區段都應顯示 VM 的不同指標圖表。
- 點選不同的子選單和時間範圍,查看直接從 VM 擷取的各種指標。
設定通知管道
設定要接收警告的通知管道:
- 前往 Cloud 控制台,依序點選「導覽選單」圖示
>「查看所有產品」>「觀測能力」部分的「監控」。在左選單點選「警告」。
- 點選「編輯通知管道」。
- 在「Email」下方,點選「ADD NEW」。
- 輸入通知收件者的電子郵件地址和顯示名稱。
- 點選「Save」。
設定指標警告
根據 VM 指標設定警告:
- 在左選單的「偵測」下方,點選「警告」。
- 點選「建立政策」。
- 點選「選取指標」。
- 依序點選「VM Instance」>「Disk」>「Disk Utilization」,然後點選「套用」。
- 新增篩選器:
| 屬性 |
值 (輸入或選取) |
| 裝置 |
/dev/sdb |
| 狀態 |
已使用 |
- 點選「Next」。
- 輸入門檻值:90%
- 點選「NEXT」,然後選取下列值:
| 屬性 |
值 (輸入或選取) |
| 使用通知管道 |
選取 |
| 通知管道 |
選取先前建立的通知管道 |
| Notify on incident closure |
勾選 |
| 事件自動關閉期限 |
2 天 |
| Documentation |
檢查 VM 的磁碟空間 |
| 名稱 |
VM - 磁碟空間警告 - 使用率 90% |
- 點選「Next」。
- 點選「建立政策」。
設定運作時間檢查
設定 HTTP 端點的運作時間檢查:
- 在左選單的「偵測」部分下方,點選「運作時間檢查」。
- 點選「建立運作時間檢查」。
- 使用下列值設定運作時間檢查:
| 屬性 |
值 (輸入或選取) |
| Protocol |
HTTP |
| 資源類型 |
URL |
| 主機名稱 |
[執行個體的外部IP]
|
| Path |
/ |
| 展開「More target options」 |
|
| Request Method |
GET |
| Port |
8545 |
| 點選「繼續」 |
接受預設值 |
| 點選「繼續」 |
接受預設值 |
| 選擇「通知管道」 |
選取先前建立的通知管道 |
| Title |
eth-mainnet-rpc-node-uptime-check |
- 點選「TEST」 (應會顯示成功訊息「200 OK」)。
- 點選「CREATE」。
點選「Check my progress」,確認目標已達成。
設定 Cloud 作業套件
恭喜!
在本實驗室,您建立了含有永久磁碟的 Compute Engine 執行個體、設定靜態 IP 位址、設定網路防火牆規則、排定備份、部署 Geth 和 Lighthouse 以太坊用戶端、使用以太坊 RPC 測試設定、設定 Cloud Logging 和 Monitoring,以及設定運作時間檢查。
後續步驟/瞭解詳情
歡迎參考下列資源,繼續探索以太坊:
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2026 年 7 月 27 日
實驗室上次測試日期:2026 年 7 月 27 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。