概述
在本教程中, 你將會使用一個叫做 Deployment Manager 的基礎設施策劃工具來啟動一個服務, 並且使用 Stackdriver 來監控這個服務。 在 Stackdriver, 你將會使用 Stackdriver 主控台來設定基礎的黑盒子監控, 並且建立一個運行時間確認 (Uptime Check) 來觸發事件通知 (alert notification)
更精確的說, 你將會:
- 使用 Deployment Manager 範本來安裝並且設定一個進階的的 deployment
- 啟動 Stackdriver monitoring
- 設定 Stackdriver 運行時間確認以及通知
- 設定 Stackdriver 主控台, 設定兩個圖表, 一個顯示 CPU 使用率, 另一個顯示 ingress 流量
- 實施一個負載測試以及模擬服務斷供
Stackdriver Monitoring 提供性能, 運行時間, 以及雲端執行應用的健康度的資訊。 Stackdriver 從 Google Cloud Platform, Amazon Web Service, 被管理的運行時間探測, 應用儀表, 以及包含 Cassandra, Nginx, Apache Web Server, Elasticsearch, 等等的多樣的常用應用元件搜集指標, 事件, 以及中繼資料。
Stackdriver 攝入這些資料, 進而經由顯示面板, 圖表, 以及警告輸出讓使用者可以更理解的資訊。 Stackdriver 的警告功能讓你更簡單地與 Slack, PagerDuty, HipChat, Campfire, 以及更多的應用做整合。
目標
在本教程中, 你將會學習:
- 從一系列的範本啟動一個雲端服務
- 設定一個應用的基礎黑盒子監控
- 建立一個運行時間確認來發現喪失功能的服務
- 建立一個警告政策來觸發事件回應程序
- 建立以及設定顯示面板, 進而做到動態更新的圖表
- 給予應用負載, 進而測試監控以及警告規則
- 模擬一個服務中斷, 進而測試監控以及警告規則
前言
本篇主要是利用 Google 的 Qwiklab 平台學習的同時,做的一份學習筆記
為避免翻譯誤解,專業術語在本篇將不會被翻譯,保留原文
設定及要求
在你按下 Start Lab 按鈕之前
詳讀所有的教學。 Labs 是有時間限制的, 而且你不可以停止時間倒數。 倒數計時器在你按下 Start Lab 按鈕後開始倒數, 上面顯示的時間為你還能使用 Cloud 資源的時間。
Qwiklabs 的手把手環境, 讓你可以在真實環境中來操作進行 Qwiklabs 上提供的課程, 而不是在一個模擬或是展示的環境。 我們透過提供你一個全新的、暫時的帳號密碼, 在計時器歸零之前, 你可以用來登入並存取 Google Cloud Platform。
你需要什麼?
要完成這個 lab, 你需要:
- 一個一般的網路瀏覽器(推薦 Chrome)
- 完成這個 lab 的時間
備註: 如果你已經有你自己的個人 GCP 帳號或專案,請不要使用在這一個 lab
現在你已經開始你的 lab
, 你將會登入 Google Cloud Shell
主控台, 然後開啟命令列工具
如何開始你的 lab, 然後登入 Console?
- 按下 Start Lab 按鈕。 如果你需要付費, 會有一個彈出視窗來讓你選擇付費的方式。 在左方你會看到一個面板, 上面有暫時的帳號密碼, 你必須使用這些帳號密碼在此次 lab
- 複製
username
, 然後點擊Open Google Console
。 Lab 會開啟另外一個視窗, 顯示選擇帳號
的頁面
tip: 開啟一個全新的視窗,然後跟原本的頁面並排
- 在
選擇帳號
頁面, 點擊Use Another Account
- 登入頁面開啟, 貼上之前複製的
username
以及password
, 然後貼上
重要:必須使用之前於 Connection Details 面板
取得的帳號密碼,不要使用你自己的 Qwiklabs 帳號密碼。 如果你有自己的 GCP 帳號, 請不要用在這裡(避免產生費用)
- 點擊並通過接下來的頁面:
- 接受
terms
以及conditions
- 不要增加
recovery optoins
或two factor authentication
(因為這只是一個臨時帳號) - 不要註冊免費體驗
- 接受
稍待一些時候, GCP 控制台將會在這個視窗開啟。
啟動 Google Cloud Shell
Google Cloud Shell
是載有開發工具的虛擬機器。 它提供了5GB的 home 資料夾, 並且運行在 Google Cloud
上。 Google Cloud Shell
讓你可以利用 command-line 存取 GCP
資源
- 在
GCP 控制台
, 右上的工具列,點擊Open Cloud Shell
按鈕
- 在打開的對話框裡, 按下
START CLOUD SHELL
:
你可以立即按下 START CLOUD SHELL
當對話視窗打開。
連結並提供環境會需要一點時間。 當你連結成功, 這代表你已成功獲得授權, 且此專案已被設為你的專案ID, 例如:
gcloud 是 Google Cloud Platform
的 command-line 工具, 他已事先被安裝在 Cloud Shell
並且支援自動補齊
使用這個 command, 你可以列出有效帳戶名稱:
gcloud auth list |
輸出:
Credentialed accounts: |
範例輸出:
Credentialed accounts: |
你可以使用以下 command 來列出專案 ID
gcloud config list project |
輸出:
[core] |
範例輸出:
[core] |
gcloud
的完整文件可以參閱 Google Cloud gcloud Overview
建立一個虛擬環境
執行以下指令來下載以及安裝套件清單
sudo apt-get update |
Python 虛擬環境被使用來隔離系統內的套件安裝
sudo apt-get install virtualenv |
如果 [Y/n] 彈出視窗, 按下 Enter
virtualenv -p python3 venv |
啟動虛擬環境
source venv/bin/activate |
複製 Deployment Manager 範本
Google 提供一組優秀的 Deployment 範本, 你可以從中學習並且在之上建立
在 Cloud Shell 輸入下面的指令來建立一個置放範本的資料夾, 並且複製範本
mkdir ~/dmsamples |
到資料夾內
cd ~/dmsamples |
複製範本
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git |
範例輸出:
remote: Counting objects: 1917, done. |
探索範例檔案
我們剛下載了一組範本到資料夾內, 讓我們更進一步地探索它們
列出範例範本
執行以下指令來導向並且列出 version2 的範例:
cd ~/dmsamples/deploymentmanager-samples/examples/v2 |
ls |
你應該會看到輸出如下:
access_context_manager cloud_functions common folder_creation iam_custom_role internal_lb_haproxy quick_start ssl vm_with_disks |
不是所有的子資料夾都是獨立的專案。 例如說, 叫做 common 的資料夾含有會被使用在多個專案的範本。 如果你打算之後逐個研究, 使用 README
來當作導引吧。
nodejs
資料夾含有所有你在本教程中會需要的東西。 請注意這裡有 nodejs
資料夾以及 nodejs_17
資料夾, 使用 nodejs
列出並檢視 Nodejs deployment
導向並列出 version2 範例:
cd nodejs/python |
ls |
範例輸出:
frontend.py frontend.py.schema nodejs.py nodejs.py.schema nodejs.yaml |
Deployment Manager 主要的設定檔是 nodejs.yaml
。 它使用了範本來產生基礎設施。 其他的檔案是範本。 範本使用了被定義在 nodejs.yaml
檔案中的變數來產生自訂義的結果。
frontend.py
frontend.py
包含 frontend.py.schema
, 它依據 container_instance_template.y
建立了一個 instance 範本。 這個範本被用來建立一個 managed instance group 以及一個 autoscaler 。 範本也建立了一個含有單一公開 IP 轉發規則的負載平衡器。 它也將建立:
- 一個指向 managed instance group 的 target pool
- 附加在 target pool 的健康檢查
nodejs.py
nodejs.py
包含 nodejs.py.schema
, 他帶來了前端以及後端的範本。
- 注意, 前端的是
frontend.py
- 後端是
/common/python/container_vm.py
- 這是一個運行著 MySQL Docker 容器的 VM, 所以他不需要客制範本
其他檔案
/common/python/container_instance_template.py
/common/python/container_vm.py
/common/python/container_helper.py
客制 Deployment
現在你已經下載了, 也檢視過了 nodejs
Deployment Manager 範本, 讓我們開始來客制 deployment
指定 zone
nodejs.yaml
需要輸入一個 zone, 讓我們加一個
- 輸入以下指令來打開 zone 列表:
gcloud compute zones list
複製 zone 的名字, 在設定檔會用到
- 用
vim
打開nodejs.yaml
, 所以你可以編輯zone
值vim nodejs.yaml
nodejs.yaml
檔案包含
resources: |
- 將
ZONE_TO_RUN
更換成靠近你的地區, 然後退出 vim 並儲存檔案
這個範例顯示 ZONE_TO_RUN
設定成 us-east1-d
resources: |
修改 instance group 中的最大 instance 數量
編輯 nodejs.py
檔案
使用
vim
打開nodejs.py
vim nodejs.py
在
nodejs.py
檔案中, 核對 frontend 的擴充限制{
'name': frontend,
'type': 'frontend.py',
'properties': {
'zone': context.properties['zone'],
'dockerImage': 'gcr.io/deployment-manager-examples/nodejsservice',
'port': application_port,
# Define the variables that are exposed to container as env variables.
'dockerEnv': {
'SEVEN_SERVICE_MYSQL_PORT': mysql_port,
'SEVEN_SERVICE_PROXY_HOST': '$(ref.' + backend
+ '.networkInterfaces[0].networkIP)'
},
# If left out will default to 1
'size': 2,
# If left out will default to 1
'maxSize': 20
}
},
目前的擴充限制是 20 (參考 maxSize)
- 修改
maxSize
然後設成 4:{
'name': frontend,
'type': 'frontend.py',
'properties': {
'zone': context.properties['zone'],
'dockerImage': 'gcr.io/deployment-manager-examples/nodejsservice',
'port': application_port,
# Define the variables that are exposed to container as env variables.
'dockerEnv': {
'SEVEN_SERVICE_MYSQL_PORT': mysql_port,
'SEVEN_SERVICE_PROXY_HOST': '$(ref.' + backend
+ '.networkInterfaces[0].networkIP)'
},
# If left out will default to 1
'size': 2,
# If left out will default to 1
'maxSize': 4
}
},
儲存並離開 vim
執行應用
現在你將使用 Deployment Manager 來部署並使他運行。 這將會建立基礎設施, 但是它不允許流量。 在 Deployment Manager 設定好基礎設施後, 你可以採用服務標籤。
部署應用
輸入以下指令, 使用 nodejs.yaml
設定檔建立一個名為 advanced-configuration
的應用
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml |
輸出:
The fingerprint of the deployment is PiYc6OsIFkWzQpCDklHvaA== |
點擊 Check my progress 來確認目前的進度。如果你已經完成目前的進度,你將獲得一個評價分數。
確認 instance 的最大數量:
- 到 Compute Engine > Instance groups
- 點擊 advanced-configuration-frontend-igm
- 點擊 Detail tab, 然後確認最大 instance 數量
你將看到它已經被設定成 4
確認應用正常運作中
應用會需要幾分鐘啟動。 你可以從 Deployment Manager 的主控台 (Navigation menu > Deployment Manager), 或從 Compute Engine 的主控台看到 instance (Navigation menu > Compute Engine > VM)
要確認應用正在運作中, 你將打開瀏覽器, 存取 port 8080
, 然後檢視服務。 因為當 Deployment Manager 實作全球轉發規則時 (被指定在範本中), IP 會動態的被建立, 所以我們需要取得 IP 來測試應用是否正常
取得實作全球轉發規則的平衡負載 IP
- 在 Cloud Shell 輸入以下指令來取得轉發規則
gcloud compute forwarding-rules list
範例輸出
在輸出中, IP_ADDRESS 就是轉發 IP 。 記得把他複製下來, 在本教程中你會使用它好幾次
http://<your IP address>:8080 |
類似如下圖, 你會看到一個空白頁面
服務要正常運作會需要幾分鐘。 如果你看到一個錯誤, 像是 404, 等兩分鐘再試一次。
- 現在, 從 IP 輸入紀錄訊息
http://<your forwarding IP address>:8080/?msg=<enter_a_message>
將 enter_a_message
更換為任何一段訊息
下面是記錄訊息範例 - 你的 IP 會跟它的不同
http://35.196.56.153:8080/?msg=my dog has spots |
在你輸入紀錄之後, 瀏覽器回返回 added
- 到
http://<your IP address>:8080
來檢視紀錄。 例如:
繼續建立更多的訊息記錄, 然後到 http://<your IP address>:8080
來檢視他們
建立 Stackdriver 工作區
在 Navigation menu, 點擊 Monitoring
當你看到 Stackdriver 顯示面板時, 你的工作區已經準備就緒了。
在 Stackdriver 設定一個運行時間確認以及警告政策
現在 Stackdriver 已經在運行中了, 你經設定警告以及顯示面板
設定運行時間確認
在 Stackdriver 視窗, 點擊 **Uptime Checks > Uptime Checks Overview 。 點擊 Add Uptime Check
指定數值如下:
點擊 Test 來測試這個確認
如果測試失敗, 確認服務正常運作中, 且防火牆規則正確且存在。
- 測試成功後, 點擊 Save
在儲存 Uptime Check 之後, Stackdriver 提供建立一個警告政策的選項
設定警告政策以及通知
點擊 Create Alerting Policy
為政策取名, 點擊 Save
在 Notification 選擇 “email”, 以及加入你的個人 email
在之後的步驟, 你將會觸發事件, 事件會經由 email 來通知你
- 為政策取名
- 點擊 Save
點擊 Check my progress 來確認目前的進度。如果你已經完成目前的進度,你將獲得一個評價分數。
在顯示面板設定幾個有用的圖表
設定顯示面板
- 在 Stackdriver 視窗, 點擊 Dashboards > Create Dashboard
- 點擊 Untitled Dashboard, 然後更名為 DMDash
- 點擊 Auto Refresh 圖案, 所以變更會自動顯示
- 點擊 Add Chart
設定圖表如下:
點擊 Save
點擊 Add Chart, 使用以下屬性, 增加另一個圖表到顯示面板:
點擊 Save, DMDash 看起來應該如下:
建立設有 ApacheBench 的測試 VM
現在, 你已經在指定的地區, 設定一個針對流量的監控, 看看有沒有正常運作。 你將安裝並且使用 ApacheBench 來施加三種等級的負載到你的服務, 然後從你已經設定好的 Stackdriver 顯示面板來檢視
建立一台 VM
在 Cloud Console, 點擊 Compute Engine > VM instances
點擊 Create Instance, 在 Create an instance 對話框, 使用所有的預設設定。
- 點擊 Create
安裝 ApacheBench
- 還是在 VM Instance 視窗, 點擊 instance-1 的 SSH 按鈕來 SSH 連線到你剛剛建立的 VM
- 輸入以下指令來安裝最新版的 ApacheBench:
sudo apt-get update |
sudo apt-get -y install apache2-utils |
點擊 Check my progress 來確認目前的進度。如果你已經完成目前的進度,你將獲得一個評價分數。
施加負載以及監控
現在你將使用 ApacheBench 來施加負載到你的服務。 檢視 Stackdriver 的 DMDash 顯示面板來監控 CPU 使用率以及 Network Inbound Traffic 。 你也將能夠藉由將滑鼠移到線上來追蹤 instance 的數量, 或者到 Cloud 主控台 (Navigation menu > Compute Engine > VM)
- 在 SSH 視窗, 輸入這個指令讓 ApacheBench 來施加負載到服務。 將
Your_IP
替換成你的轉發 IP 。 執行以下的指令兩到三次來創造流量。
ab -n 1000 -c 100 http://<Your_IP>:8080/ |
範例輸出
This is ApacheBench, Version 2.3 <$Revision: 1757674 $> |
等幾分鐘, 然後將負載提升到 5000
- 執行以下的指令兩到三次來創造流量。
ab -n 5000 -c 100 http://<Your_IP>:8080/ |
等幾分鐘, 將負載提升到 10000
- 執行以下的指令兩到三次來創造流量。
ab -n 10000 -c 100 http://<Your_IP>:8080/
現在讓我們來看看, 當我們降低每台 instance 的 CPU 使用率時, 會發生什麼事
- 在 cloud 主控台, 點擊 Navigation menu > Compute Engine > Instance group
- 點擊你的 instance group 名稱, 然後 “Edit Group”
- 將 Target CPU usage 變更為 20
- 點擊 Save
target CPU usage 是在這一個 instance group 當中的每一台 VM 的總使用率。 它控制何時自動擴充啟動。 在正式生產環境中, 通常你至少會設定 60% 。 在這個案例中, 你將會暫時性地將它設定成 20% 來更快地檢視自動擴充行為
- 執行以下的指令兩到三次來創造流量。
ab -n 10000 -c 100 http://<Your_IP>:8080/
可預測的行為: 當負載消耗了超過 20% 的群組累積 CPU, 將觸發自動擴充。 一個新的 instance 會被建立
現在看看當你把自動擴充關閉後, 會發生什麼事
- 到 Compute Engine > Instance groups
- 點擊你的 instance group 名稱, 點擊 Edit Group
- 將 Autoscaling 變更為 Off
- 點擊 Save
等幾分鐘, 然後執行以下指令來創造流量
ab -n 10000 -c 100 http://<Your_IP>:8080/ |
可預測的行為: 當 autoscaling 處於關閉狀態, 新的 instance 不會被建立, 所以累積 CPU 將會上升
結果
Stackdriver 顯示面板大概會有五分鐘的延遲才會看到改變
模擬服務中斷
移除防火牆規則來模擬服務中斷
- 點擊 Navigation menu > VPC Network > Firewall rules
- 勾選防火牆規則 allow-8080 旁邊的方格, 然後在頁面上方點擊 Delete
- 你將會在 15 到 30 分鐘後收到通知 email
測試你的理解
下面有多重選擇的問題來鞏固你對本教程概念的理解,盡你所能的回答吧:
留言