1. 簡介
在本程式碼研究室中,您將學習如何運用記錄與監控工具,所有使用 Cloud Functions 的開發人員均能使用這些工具。這些工具隨附您部署於所有支援語言的所有 Cloud 函式,能讓您在編寫及操作無伺服器程式碼時提高工作效率。
您將使用由 HTTP 觸發的 Cloud 函式,但您涵蓋的所有內容亦適用於其他語言,以及透過其他事件觸發的 Cloud Functions。
2. 設定和需求
自修環境設定
提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID
。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。
執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
Cloud Shell
雖然 Cloud Functions 及其記錄和監控功能可從筆記型電腦遠端使用,但您將使用 Cloud Shell,這是在 Google Cloud 中運作的指令列環境。
這種以 Debian 為基礎的虛擬機器,搭載各種您需要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。換言之,本程式碼研究室只需要在 Chromebook 上運作即可。
- 如要透過 Cloud 控制台啟用 Cloud Shell,只要點選「啟用 Cloud Shell」 圖示
即可 (整個佈建作業只需幾分鐘的時間,操作完畢即可)。
連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為 PROJECT_ID
。
gcloud auth list
指令輸出
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
指令輸出
[core] project = <PROJECT_ID>
如因故未設定專案,請直接發出以下指令:
gcloud config set project <PROJECT_ID>
正在尋找 PROJECT_ID
嗎?查看您在設定步驟中使用的 ID,或在 Cloud 控制台資訊主頁查詢:
根據預設,Cloud Shell 也會設定一些環境變數,方便您之後執行指令。
echo $GOOGLE_CLOUD_PROJECT
指令輸出
<PROJECT_ID>
- 最後,進行預設可用區和專案設定。
gcloud config set compute/zone us-central1-f
您可以選擇各種不同的可用區。詳情請參閱「區域與可用區。
3. 部署簡易的 Cloud 函式
如要監控項目,請建立「Hello, World」Cloud 函式。在 Google Cloud 控制台的左側選單中,依序點選「Cloud Functions」和「建立函式」。
輸入「hello-monitor」做為新 Cloud 函式的名稱。
保留原始碼的所有預設值。(但您也可以選擇其他語言/執行階段)。
最後點選「建立」。
您應該會看到 Cloud 函式旁邊有綠色勾號,表示已準備好叫用。
4. 測試 Cloud 函式,並使用負載產生器傳送流量
現在,Cloud 函式已成功部署,請從指令列進行測試。
首先,透過 Cloud Shell 執行下列指令:
$ gcloud functions describe hello-monitor
系統應會傳回 Cloud 函式的說明,包括 httpsTrigger
的網址,也就是叫用 Cloud 函式的 HTTP(S) 端點。應如下所示:https://<region>-<project-id>.cloudfunctions.net/hello-monitor。
觸發 Cloud 函式現在應和在該網址上使用 curl
指令一樣簡單。
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
現在使用簡易的 HTTP 負載測試工具 Vegeta。如要從 Cloud Shell 安裝這個指令碼,只要輸入以下指令即可:
$ go get -u github.com/tsenart/vegeta
如要將一些流量傳送至 Cloud 函式 (幾分鐘內每秒五項要求),請使用下列指令:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. 瀏覽記錄檔
在 Cloud 函式詳細資料檢視畫面中,按一下「查看記錄檔」。
這樣會引導您前往專案的 Stackdriver Logging 部分,只顯示 Cloud 函式記錄檔。
傳送至 Cloud 函式的所有要求都應該傳回 200 狀態碼。
查看記錄時,您可以執行以下操作:
- 按照記錄層級篩選 (在這個範例中,所有記錄都是
debug
層級)。 - 選取特定時間範圍 (相對或絕對)。
- 啟用記錄串流 (位於畫面上方的「播放」圖示
)。
- 複製記錄項目連結 (供團隊成員共用)。
- 在資源內容中顯示記錄項目。
- 釘選記錄項目 (以視覺提示表示)。
- 將記錄檔匯出至 BigQuery、Cloud Storage 或 Pub/Sub (或直接將記錄檔下載為 JSON 或 CSV 檔案)。
6. 更新函式
使用 Cloud 控制台前往「Function details」(函式詳細資料) 檢視畫面,然後觀察您建立的每秒叫用次數和執行時間,然後觀察您使用負載測試者建立的高峰。
這是一項更詳細的工具,可以觀察延遲情況和遠端程序呼叫 (RPC) 呼叫,不過您必須先對 Cloud Functions 進行幾項變更,才能使用這項工具。請完成下列步驟:
- 將省電的
node-emoji
套件新增為依附元件。 - 更新函式程式碼以使用節點表情符號模組,並造成延遲。
- 新增環境變數,為 Cloud Functions 啟用 Stackdriver Trace。
在「函式詳細資料」中,按一下 [編輯] 修改函式。
編輯 package.json
檔案,為 node-emoji
套件新增依附元件。
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
將 index.js
的內容變更為以下內容,即可編輯實際函式:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
這樣會在暫停 300 毫秒後,將隨機表情符號加入 Cloud 函式傳回的訊息。
最後,新增名為 GOOGLE_CLOUD_TRACE_ENABLED
的 Cloud 函式環境變數,並設為 true
,如下所示:
按一下 [儲存]。
返回 Cloud Shell 並回想這個指令,藉此對新部署的 Cloud 函式產生一些負載:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
現在可以開始觀察在沒有其他設定要求,也沒有特定追蹤程式庫的情況下產生的追蹤記錄清單了!
7. 追蹤更新後的 Cloud 函式
使用左側選單,前往「Trace list」(追蹤記錄清單) (位於「Stackdriver Trace」下方)。
畫面應類似以下螢幕截圖:
如此一來,就顯而易見的是,Cloud 函式導入的延遲時間確實是 300 毫秒。
圖表上的每個圓點都是一個要求,您可以查看詳細資訊,例如時間戳記、HTTP 方法和狀態、其標籤、對應記錄項目的連結,以及 Cloud 函式發出的任何後續遠端程序呼叫 (RPC)。
若要放大,只要在圖表上按一下並拖曳即可。
如要縮小,請按一下頁面頂端的「復原縮放」。
由於您部署了單一 Cloud 函式,圖表只會顯示 hello-monitor
URI 的 GET
要求,但您可以使用 HTTP 狀態 (2XX, 3XX) 或要求篩選器,依 HTTP 方法 (GET、POST、DELETE) 篩選追蹤記錄。
前往左側選單中的「總覽」:
在這個總覽頁面中,您可以查看近期追蹤記錄和其他深入分析資料。
您也可以根據 URI 要求篩選器、HTTP 方法、HTTP 狀態和時間範圍的組合,建立自訂報表。您甚至還能將產生的值與時間基準進行比較。
如果您具備足夠的資料點來設定正確的時間範圍,就能產生報表,瞭解初始 Cloud 函式與新函式之間出現的重要延遲轉變。
這類自訂報表可用來找出發生效能問題的時間,並追蹤服務水準指標 (SLI),例如使用者要求延遲。
8. 使用時間清理資源
本程式碼研究室到此結束!
Cloud Functions 和 Stackdriver 工具是無伺服器的平台,在不使用的情況下不會產生費用,但成為良好的雲端公民並刪除 Cloud 函式。只要在「Cloud Functions」下方的「Overview」(總覽) 中選取 hello-monitor
,然後按一下「Delete」(刪除) 即可。
9. 接下來要做什麼?
以下是後續追蹤:
/