Create Infrastructure for the Virtual Machine

Check my progress

/ 30

Create a Swap File on the VM and Mount the Attached Disk on the VM

Check my progress

/ 20

Create a User on the VM and Install the Ethereum software

Check my progress

/ 20

Start Geth as a background process and use the snap sync mode

Check my progress

/ 10

Configure Cloud Operations

Check my progress

/ 20

This lab may incorporate AI tools to support your learning.
This content is not yet optimized for mobile devices.
For the best experience, please visit us on a desktop computer using a link sent by email.

GSP1116

Google Cloud 自學實驗室

總覽

基於安全性、法規遵循、效能或隱私權考量,您可能需要自行託管區塊鏈節點。去中心化、具韌性且永續發展的網路,是任何區塊鏈通訊協定的重要基礎。Web3 開發人員可以使用 Google Cloud 的 Blockchain Node Engine,這是全代管的節點託管解決方案,適用於 Web3 開發作業。組織也能在 Google Cloud 設定及管理自己的節點。Google Cloud 是值得信賴的 Web3 基礎架構合作夥伴,提供安全、可靠且可擴充的節點託管基礎架構。如要進一步瞭解如何在 Google Cloud 託管節點,請參閱網誌文章「Blockchain Node Engine 隆重登場:Web3 開發作業適用的全代管節點託管服務」。

如想深入瞭解將自行管理的區塊鏈節點部署至雲端時,需考量的技術因素和架構決策,請參閱網誌文章「Web3 適用的 Google Cloud」。

專屬節點託管圖表,包含區塊鏈網路和 DApp。

在本實驗室,您將建立虛擬機器 (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 控制台

  1. 按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 此實驗室所需的臨時憑證 (使用者名稱和密碼)
    • 完成此實驗室所需的其他資訊 (如有)

    請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。

  2. 按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗並排開啟分頁。

    注意:頁面顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」。
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab setup and access」面板找到「Username」。

  4. 點選「下一步」。

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab setup and access」面板找到「Password」。

  6. 點選「下一步」。

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 繼續點按後續頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請按一下「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

在本實驗室,您將使用下列工具:

  • Ubuntu 24.04
  • Geth
  • Lighthouse
  • Curl
  • gcloud

工作 1:建立虛擬機器的基礎架構

建立公開靜態 IP 位址、防火牆規則、服務帳戶、快照排程,以及使用新 IP 位址的虛擬機器。這是部署以太坊的基礎架構。

建立公開靜態 IP 位址

在本節中,您將設定公開 IP 位址供虛擬機器使用。

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「虛擬私有雲網路」>「IP 位址」。
  2. 在「IP 位址」資訊卡中,點選「預留外部 IP」,建立靜態 IP 位址。
  3. 使用下列值設定靜態位址:
屬性 值 (輸入或選取)
名稱 eth-mainnet-rpc-ip
網路服務級別 專業版
IP 版本 IPv4
類型 單一區域
區域
連接到: 無
靜態位址設定頁面,內含前述欄位。
  1. 點選「保留」。

建立防火牆規則

建立防火牆規則,供 VM 透過指定通訊埠通訊。

Geth P2P 會透過通訊埠 30303 上的 TCP 和 UDP 通訊;Lighthouse P2P 會透過通訊埠 9000 的 TCP 和 UDP 通訊;Geth RPC 則使用 TCP 8545。

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「虛擬私有雲網路」>「防火牆」。
  2. 點選動作列中的「建立防火牆規則」,建立防火牆規則。
  3. 使用下列值設定防火牆:
屬性 值 (輸入或選取)
名稱 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
「建立防火牆規則」頁面,內含前述欄位
  1. 點選「建立」。

建立服務帳戶

建立 VM 運作所需的服務帳戶。

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「IAM 與管理」>「服務帳戶」。
  2. 點選動作列中的「建立服務帳戶」,建立帳戶。
  3. 使用下列值設定服務帳戶:
屬性 值 (輸入或選取)
服務帳戶名稱 eth-rpc-node-sa
服務帳戶 ID eth-rpc-node-sa
「建立服務帳戶」頁面,內含前述欄位
  1. 點選「建立並繼續」。
  2. 新增下列角色:
屬性 值 (輸入或選取)
角色 Compute OS Login、Service Controller、Logs Writer、Monitoring Metric Writer、Cloud Trace Agent、Compute Network User
「將專案存取權授予這個服務帳戶」頁面,顯示上述角色。
  1. 點選「繼續」。
  2. 點選「完成」。

建立快照排程

在本節中,您將設定快照排程,用於虛擬機器連接的磁碟,其中包含區塊鏈資料。這麼做會備份鏈結資料。

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「Compute Engine」>「快照」。
  2. 點選「建立快照排程」,建立快照排程。
  3. 使用下列值設定快照排程:
屬性 值 (輸入或選取)
名稱 eth-mainnet-rpc-node-disk-snapshot
區域
單一區域
排程選項 排程頻率:Daily,開始時間 (世界標準時間):6:00 PM - 7:00 PM,超過下列時間即自動刪除快照:7
刪除規則 保留快照
  1. 點選「建立」。
「建立快照排程」頁面,內含前述欄位

建立虛擬機器

在本節中,您將設定虛擬機器來部署以太坊。

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「Compute Engine」>「VM 執行個體」。

  2. 點選「建立執行個體」來建立 VM。

  3. 前往「機器設定」頁面。

    將下列值填入對應欄位:

    屬性 值 (輸入或選取)
    名稱 eth-mainnet-rpc-node
    區域
    可用區
    系列 E2
    機型 e2-standard-4
  4. 點選「OS 和儲存空間」。

    點選「變更」並選取下列值:

    屬性 值(輸入或選取)
    作業系統 Ubuntu
    版本 Ubuntu 24.04 LTS (x86/64)
    開機磁碟類型 SSD 永久磁碟
    大小 50 GB

    點選「選取」。

    在「其他磁碟」下方,點選「新增磁碟」

    屬性 值(輸入或選取)
    名稱 eth-mainnet-rpc-node-disk
    磁碟來源類型 空白磁碟
    磁碟類型 SSD 永久磁碟
    大小 200 GB (如為較大型的安裝作業,則為 2,000 GB)

    點選「儲存」。

  5. 點選「資料保護」

    「快照排程」請選取「eth-mainnet-rpc-node-disk-snapshot」

  6. 點選「網路」。

    屬性 值 (輸入或選取)
    網路標記 eth-rpc-node (輸入值後按下 Enter 鍵,此值與防火牆設定一致)
    • 在「網路介面」部分,點選「default」:

    • 「網路介面卡」請選取「gVNIC」

    • 「外部 IPv4 位址」:eth-mainnet-rpc-ip (選取稍早建立的靜態 IP 位址)

      點選「完成」。

  7. 點選「安全性」

    • 在「身分及 API 存取權」下的「服務帳戶」,選取「eth-rpc-node-sa」。

    • 點選「建立」。

點選「Check my progress」,確認目標已達成。

建立虛擬機器的基礎架構

工作 2:在虛擬機器進行設定及安裝

現在,請透過 SSH 連至 VM,並執行指令來安裝軟體。

透過 SSH 登入 VM

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「Compute Engine」>「VM 執行個體」。
  2. 在「eth-mainnet-rpc-node」資料列,點選「SSH」來開啟 SSH 視窗。
  3. 如果出現「允許透過瀏覽器中的 SSH 連線至 VM」提示訊息,請點選「授權」。

在 VM 建立交換檔案

為了提供程序額外的 RAM,請建立交換檔案。這是為了在 VM 需要時,增加可使用的 RAM 容量。

  1. 執行下列指令,建立 40 GB 的交換檔案:
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=40KiB

請注意,第一個指令需要一些時間才能執行完畢。

  1. 更新交換檔案的權限:
sudo chmod 0600 /swapfile
  1. 指定要做為交換分區的檔案:
sudo mkswap /swapfile
  1. 將交換檔案設定新增至 /etc/fstab,以便系統在重新啟動後能辨識掛接的磁碟機:
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
  1. 啟用交換檔案:
sudo swapon -a
  1. 確認系統已辨識交換檔案:
free -g

您應該會看到類似下列的訊息:

輸出內容:

total used free shared buff/cache available Mem: 15 0 0 0 15 15 Swap: 24 0 24

將連接的磁碟掛接至 VM

在設定 VM 時,您建立了連接磁碟。VM 不會自動辨識此磁碟,必須先格式化並「掛接」才能使用。

  1. 查看連接的磁碟。您應該會看到 sdb 項目,大小為 200 GB:
sudo lsblk
  1. 格式化連接的磁碟:
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
  1. 建立資料夾並掛接連接的磁碟:
sudo mkdir -p /mnt/disks/chaindata-disk sudo mount -o discard,defaults /dev/sdb /mnt/disks/chaindata-disk
  1. 更新資料夾權限,供程序讀取/寫入磁碟:
sudo chmod a+w /mnt/disks/chaindata-disk
  1. 擷取已掛接磁碟機的磁碟 ID,確認磁碟機已掛接:
sudo blkid /dev/sdb

您應該會看到類似下方輸出方塊中的訊息:

輸出內容:

/dev/sdb: UUID="7fa9c421-0054-4555-b0ca-b470a97a3d84" TYPE="ext4"
  1. 擷取已掛接磁碟的磁碟 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
  1. 執行 df 指令,確認磁碟已掛接、格式化,且已分配正確的大小:
df -h

您應該會看到類似下方的訊息,其中顯示新掛接的磁碟區和大小:

輸出內容:

/dev/sdb 196G 28K 196G 1% /mnt/disks/chaindata-disk

如需日後調整磁碟大小,請按照操作說明進行。

點選「Check my progress」,確認目標已達成。

在 VM 建立交換檔案,並將連接的磁碟掛接至 VM

在 VM 建立使用者

建立用來執行程序的使用者。

  1. 執行下列指令,建立名為 ethereum (以太坊) 的使用者:
sudo useradd -m ethereum sudo usermod -aG sudo ethereum sudo usermod -aG google-sudoers ethereum
  1. 切換至以太坊使用者:
sudo su ethereum
  1. 啟動 Bash 指令列:
bash
  1. 切換至以太坊使用者的主資料夾:
cd ~

安裝以太坊軟體

  1. 更新作業系統:
sudo apt update -y sudo apt-get update -y
  1. 安裝常用軟體:
sudo apt install -y dstat jq software-properties-common
  1. 安裝 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
  1. 移除下載的指令碼檔案:
rm add-google-cloud-ops-agent-repo.sh
  1. 為 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
  1. 利用套件管理員安裝 Geth:
sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get -y install ethereum
  1. 確認 Geth 可用且為最新版本:
geth version

您應該會看到類似下列的訊息:

輸出內容:

Geth Version: 1.14.11-stable Git Commit: ea9e62ca3db5c33aa7438ebf39c189afd53c6bf8 Architecture: amd64 Go Version: go1.23.1 Operating System: linux GOPATH= GOROOT=
  1. 下載 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"
  1. 解壓縮 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"
  1. 將 Lighthouse 二進位檔移至 /usr/bin 資料夾,並更新權限:
sudo mv lighthouse /usr/bin
  1. 確認 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)
  1. 建立共用 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 執行用戶端。

  1. 首先在 gcloud 進行驗證。請在 SSH 工作階段執行下列指令:
gcloud auth login

當系統顯示「Do you want to continue (Y/n)?」提示訊息時,請按下 Enter 鍵。

  1. 在新分頁前往顯示的連結。

  2. 點選您目前所用帳戶的使用者名稱「」,然後按一下「Allow」。

  3. 當系統顯示「Enter the following verification code in gcloud CLI on the machine you want to log into」提示訊息時,請點選複製按鈕,然後返回 SSH 工作階段,將程式碼貼到「Enter authorization code:」提示訊息中。

  4. 設定外部 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())")
  1. 執行下列指令,將 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 同步模式
  1. 執行下列指令,查看程序 ID:
ps -A | grep geth
  1. 查看記錄,確認程序是否正確啟動:
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!
  1. 輸入 Ctrl+C,退出記錄監控作業。

啟動 Lighthouse

接下來您將啟動 Lighthouse 共識用戶端。

  1. 執行下列指令,以背景程序啟動 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" &
  1. 執行下列指令,查看程序 ID:
ps -A | grep lighthouse
  1. 查看記錄,確認程序是否正確啟動。可能需要幾分鐘才會顯示:
tail -f /mnt/disks/chaindata-disk/ethereum/lighthouse/logs/lighthouse.log

畫面會顯示類似下列的訊息:

輸出內容:

INFO Syncing INFO Synced INFO New block received
  1. 輸入 Ctrl+C,退出記錄監控作業。

  2. 再次查看 Geth 記錄,確認記錄是否正確產生。

tail -f /mnt/disks/chaindata-disk/ethereum/geth/logs/geth.log

您應該會看到類似下方輸出方塊中的訊息:

輸出內容:

Syncing beacon headers

確認節點已與區塊鏈同步

確認節點是否仍在同步。此程序需要一些時間才能完成。請注意,您不必等待節點同步完成,就能完成實驗室。輸出內容應會顯示同步處理狀態 JSON,而非 false。有兩種方法能查看同步狀態:Geth 和 RPC。

  1. 執行下列 Geth 指令,檢查節點同步狀態。如果輸出內容為「false」,表示已與網路完全同步,但在本實驗室期間,節點可能還在同步中。
geth attach /mnt/disks/chaindata-disk/ethereum/geth/chaindata/geth.ipc
  1. 在 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
  1. 輸入 exit,退出 Geth 控制台。
  2. 執行下列 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}
  1. 執行下列 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 具備強大的搜尋功能,可針對特定記錄訊息建立警告。

  1. 更新 Cloud 作業套件設定檔的權限,以便更新該檔案:
sudo chmod 666 /etc/google-cloud-ops-agent/config.yaml
  1. 設定 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
  1. 儲存後,執行下列指令,重新啟動代理並套用變更:
sudo systemctl stop google-cloud-ops-agent sudo systemctl start google-cloud-ops-agent sudo systemctl status google-cloud-ops-agent
  1. 輸入 Ctrl+C,退出狀態畫面。
  2. 如果狀態顯示錯誤,請使用下列指令查看詳情:
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
  1. 查看 Cloud Logging,確認記錄訊息顯示在控制台中。前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「查看所有產品」>「觀測能力」部分的「記錄」。在左選單點選「Logs Explorer」。您會看到類似下方的訊息:
查詢結果頁面,列出多則訊息和預覽。

設定代管型 Prometheus

我們使用 --metrics 旗標啟動了 geth 和 lighthouse 用戶端,因此這兩個用戶端都會在 HTTP 通訊埠輸出指標。這些指標可儲存在 Prometheus 等時間序列資料庫中,用來提供資料給 Grafana 資訊主頁,以便取得洞察資訊。一般來說,您需要在 VM 安裝 Prometheus,但只要在 Cloud Ops Agent 略為設定,就能擷取指標並儲存在 Google Cloud 的代管型 Prometheus 服務中。

  1. 在 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
  1. 在 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 ......
  1. 設定 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
  1. 儲存後,執行下列指令,重新啟動代理並套用變更:
sudo systemctl stop google-cloud-ops-agent sudo systemctl start google-cloud-ops-agent sudo systemctl status google-cloud-ops-agent
  1. 輸入 Ctrl+C,退出狀態畫面。
  2. 如果狀態顯示錯誤,請使用下列指令查看詳情:
sudo journalctl -xe | grep "google_cloud_ops_agent_engine"
  1. 查看 Cloud Logging,確認指標顯示在控制台中。前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「查看所有產品」>「觀測能力」部分的「監控」。在左選單點選「Metrics Explorer」。

  2. 選取「<> PromQL」選項。在查詢方塊中,輸入 Lighthouse 指標 gossipsub_heartbeat_duration_bucket。點選「執行查詢」。您應該會看到類似下方的結果:

PROMQL 查詢結果頁面,列出要求的資料指標和值。

您也能對 Geth 指標執行相同操作 (例如 rpc_duration_eth_blockNumber_success_count),確認系統會顯示 Geth 指標。

查看 Cloud Monitoring

虛擬機器的 Cloud Monitoring 應該已啟用。

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「Compute Engine」>「VM 執行個體」。
  2. 點選 VM「eth-mainnet-rpc-node」。
  3. 點選「觀測能力」分頁標籤。
  4. 所有區段都應顯示 VM 的不同指標圖表。
「觀測能力」分頁,其中包含多個指標圖表,例如網路流量和 CPU 使用率。
  1. 點選不同的子選單和時間範圍,查看直接從 VM 擷取的各種指標。

設定通知管道

設定要接收警告的通知管道:

  1. 前往 Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「查看所有產品」>「觀測能力」部分的「監控」。在左選單點選「警告」。
  2. 點選「編輯通知管道」。
  3. 在「Email」下方,點選「ADD NEW」。
  4. 輸入通知收件者的電子郵件地址和顯示名稱。
  5. 點選「Save」。

設定指標警告

根據 VM 指標設定警告:

  1. 在左選單的「偵測」下方,點選「警告」。
  2. 點選「建立政策」。
  3. 點選「選取指標」。
  4. 依序點選「VM Instance」>「Disk」>「Disk Utilization」,然後點選「套用」。
  5. 新增篩選器:
屬性 值 (輸入或選取)
裝置 /dev/sdb
狀態 已使用
建立政策頁面,內含前述欄位。
  1. 點選「Next」。
  2. 輸入門檻值:90%
「設定警告觸發條件」頁面,內含前述欄位。
  1. 點選「NEXT」,然後選取下列值:
屬性 值
(輸入或選取)
使用通知管道 選取
通知管道 選取先前建立的通知管道
Notify on incident closure 勾選
事件自動關閉期限 2 天
Documentation 檢查 VM 的磁碟空間
名稱 VM - 磁碟空間警告 - 使用率 90%
「Configure notifications and finalize alert」頁面,內含前述欄位。 「documention」和「Name the alert policy」文字欄位,以及「Next」按鈕。
  1. 點選「Next」。
  2. 點選「建立政策」。

設定運作時間檢查

設定 HTTP 端點的運作時間檢查:

  1. 在左選單的「偵測」部分下方,點選「運作時間檢查」。
  2. 點選「建立運作時間檢查」。
  3. 使用下列值設定運作時間檢查:
屬性 值
(輸入或選取)
Protocol HTTP
資源類型 URL
主機名稱 [執行個體的外部IP]
Path /
展開「More target options」
Request Method GET
Port 8545
點選「繼續」 接受預設值
點選「繼續」 接受預設值
選擇「通知管道」 選取先前建立的通知管道
Title eth-mainnet-rpc-node-uptime-check
  1. 點選「TEST」 (應會顯示成功訊息「200 OK」)。
  2. 點選「CREATE」。

點選「Check my progress」,確認目標已達成。

設定 Cloud 作業套件

恭喜!

在本實驗室,您建立了含有永久磁碟的 Compute Engine 執行個體、設定靜態 IP 位址、設定網路防火牆規則、排定備份、部署 Geth 和 Lighthouse 以太坊用戶端、使用以太坊 RPC 測試設定、設定 Cloud Logging 和 Monitoring,以及設定運作時間檢查。

後續步驟/瞭解詳情

歡迎參考下列資源,繼續探索以太坊:

  • 如要進一步瞭解以太坊用戶端 (執行層),請前往 Geth 網站。
  • 如要進一步瞭解以太坊用戶端 (共識層),請參閱 Lighthouse 說明文件。
  • 如要進一步瞭解以太坊的一般資訊,請前往以太坊網站。
  • 如要進一步瞭解 Web3 適用的 Google Cloud,請參閱「Web3 適用的 Google Cloud」。
  • 如要進一步瞭解 Google Cloud 的 Blockchain Node Engine,請參閱 Blockchain Node Engine 頁面。

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2026 年 7 月 27 日

實驗室上次測試日期:2026 年 7 月 27 日

Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Use private browsing

  1. Copy the provided Username and Password for the lab
  2. Click Open console in private mode

Sign in to the Console

  1. Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
  2. Accept the terms, and skip the recovery resource page
  3. Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project

This content is not currently available

We can notify you via email when it becomes available

Great!

We can contact you via email if it becomes available

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Using an Incognito or private browser window is the best way to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.