使用 Stackdriver 在 Kubernetes Engine 上做紀錄

概述

Stackdriver Logging 可以讓你在所有的 GCP 資源,或是其他平台的資源做紀錄,然後針對紀錄以及指標做集中式的儲存。 紀錄被加總,並且可在提供的 Stackdriver Logging UI 內被檢視。 他們也可以被匯出到接收器來支援更多使用情境。 目前, Stackdriver Logging 支援匯出到下面的接收器:

  • Cloud Storage
  • Pub/Sub
  • BigQuery

在這個教程,你將會部署一個簡單的 Kubernetes 應用,這個應用將轉發紀錄事件到 Stackdriver LoggingTerraform 一個強調基礎架構就是程式碼的工具, 可以使用配置檔來自動化部署,是雲端基礎架構的進化。 配置檔同時也會建立一個 Cloud Storage 儲存區,以及 BigQuery 資料組來接受被匯出的紀錄

本教程由 GKE Helmsman 的工程師所建立,為了讓你對 Stackdriver Logging 有更好地理解。 你可以在 Github 上檢視這個範例。 我們也鼓勵以及歡迎任何想對我們專案做出貢獻的開發者!






前言

本篇主要是利用 Google 的 Qwiklab 平台學習的同時,做的一份學習筆記
為避免翻譯誤解,專業術語在本篇將不會被翻譯,保留原文






架構

Terraform 配置將會建立一個 Kubernetes Engine 叢集,這個叢集會產生可被 Stackdriver 處理的紀錄以及指標。 這個腳本也會同時建立紀錄的匯出接收器,有 CloudStorage, BigQuery, 以及 Cloud Pub/Sub。 這一切包含資料流,可參考下面的圖片






設定及要求


Qwiklabs setup

在你按下 Start Lab 按鈕之前

詳讀所有的教學。Labs 是有時間限制的,而且你不可以停止時間倒數。倒數計時器在你按下 Start Lab 按鈕後開始倒數,上面顯示的時間為你還能使用 Cloud 資源的時間。

Quiklabs 的手把手環境,讓你可以在真實環境中來操作進行 Quiclabs 上提供的課程,而不是在一個模擬或是展示的環境。我們透過提供你一個全新的、暫時的帳號密碼,在計時器歸零之前,你可以用來登入並存取 Google Cloud Platform。

你需要什麼?

要完成這個 lab ,你需要:

  • 一個一般的網路瀏覽器(推薦 Chrome)
  • 完成這個 lab 的時間

備註: 如果你已經有你自己的個人 GCP 帳號或專案,請不要使用在這一個 lab

現在你已經開始你的 lab, 你將會登入 Google Cloud Shell 主控台,然後開啟命令列工具

如何開始你的 lab ,然後登入 Console?

  1. 按下 Start Lab 按鈕。如果你需要付費,會有一個彈出視窗來讓你選擇付費的方式。在左方你會看到一個面板,上面有暫時的帳號密碼,你必須使用這些帳號密碼在此次 lab

  1. 複製 username , 然後點擊 Open Google Console。 Lab 會開啟另外一個視窗,顯示選擇帳號的頁面

tip: 開啟一個全新的視窗,然後跟原本的頁面並排

  1. 選擇帳號頁面, 點擊 Use Another Account

  1. 登入頁面開啟,貼上之前複製的 username 以及 password ,然後貼上

重要:必須使用之前於 Connection Details 面板 取得的帳號密碼,不要使用你自己的 Qwiklabs 帳號密碼。 如果你有自己的 GCP 帳號,請不要用在這裡(避免產生費用)

  1. 點擊並通過接下來的頁面:
    • 接受terms以及conditions
    • 不要增加recovery optoinstwo factor authentication (因為這只是一個臨時帳號)
    • 不要註冊免費體驗

稍待一些時候, GCP 控制台將會在這個視窗開啟。

注意:按下左上方位於Google Cloud Platform 隔壁的 Navigation menu ,你可以瀏覽選單,裡面有一系列的 GCP 產品以及服務


啟動 Google Cloud Shell

Google Cloud Shell 是載有開發工具的虛擬機器。它提供了5GB的 home 資料夾,並且運行在 Google Cloud 上。 Google Cloud Shell 讓你可以利用 command-line 存取 GCP 資源

  1. GCP 控制台 ,右上的工具列,點擊 Open Cloud Shell 按鈕

  1. 在打開的對話框裡,按下 START CLOUD SHELL:

你可以立即按下 START CLOUD SHELL 當對話視窗打開。

連結並提供環境會需要一點時間。當你連結成功,這代表你已成功獲得授權,且此專案已被設為你的專案ID,例如:

gcloudGoogle Cloud Platform 的 command-line 工具,他已事先被安裝在 Cloud Shell 並且支援自動補齊

使用這個 command ,你可以列出有效帳戶名稱:

gcloud auth list

輸出:

Credentialed accounts:
- <myaccount>@<mydomain>.com (active)

範例輸出:

Credentialed accounts:
- google1623327_student@qwiklabs.net

你可以使用以下 command 來列出專案 ID

gcloud config list project

輸出:

[core]
project = <project_ID>

範例輸出:

[core]
project = qwiklabs-gcp-44776a13dea667a6

gcloud 的完整文件可以參閱 Google Cloud gcloud Overview


Clone 範例

clone 本教程需要的資源,執行以下指令

git clone https://github.com/GoogleCloudPlatform/gke-logging-sinks-demo

進到專案內

cd gke-logging-sinks-demo

設定你的 region 和 zone

某些 Compute Engine 的資源位於 regions 以及 zones 。 region 是一個特定的地理位置,你只能在這個執行 region 運行你的資源, 每一個 region 有一個或多個 zone

如果你想要了解更多有關 region 以及 zone, 可以參考官方文件

執行以下指令來設定本教程中的 region 以及 zone (你可以使用對你來說最佳的 region 跟 zone)






部署

遵從 程式碼及基本架構 以及 不可改變的基礎架構 , Terraform 支援利用陳述性的描述來決定理想的基礎架構狀態。 當述詞被採用, Terraform 使用 GCP APIs 來提供以及更新資源的狀態已符合述詞。 Terraform 比較想要的狀態以及目前的狀態,所以漸進式增加的變更不需要刪除任何東西,或者重新開始,即可被套用。 例如說,Terraform 可以建立 GCP 專案以及 compute 執行個體等等… 甚至是設定一個 Kubernetes Engine 叢集,並且部署應用到上面。 當要求改變了,敘詞可以被更新,然後 Terraform 將會相對應的更新雲端基礎設施

這個範例將會開始一個 Kubernetes Engine 叢集,然後部署一個簡單的範例應用上去。 預設, GCP Kubernetes Engine 叢集內建一個事先配置好的 Fluented 收集器,他會轉發記錄到 Stackdriver

更新 provider.tf 檔案

在 Terraform 的 provider.tf 腳本中,移除 provider 版本

編輯 provider.tf 腳本

nano ~/gke-logging-sinks-demo/terraform/provider.tf

如果檔案含有 google 提供者的靜態版本字串,像下圖一樣,請移除

....
provider "google" {
project = var.project
version = "~> 2.10.0"
}

儲存檔案

部署叢集

本教程提供的範例檔案中,有三個 Teffaform 的配置檔。 第一個, main.tf ,是一個 Terraform 的起始點。 他描述了會使用到的功能,以及會被操縱到的資源,還有會輸出的結果。 第二個檔案是 provider.tf , 這個檔案顯示 Terraform 指令的目標是哪一個雲端提供者以及其版本,在這個範例中,是 GCP 。 最後一個檔案是 variables.tf ,它含有一個變數清單,用來當作 Terraform 的輸入。 任何沒有在 variables.tf 但有用在 main.tf 的變數都會在執行過程中跳出。

要建立環境,可以執行以下指令

make create

備註: 如果你收到跟 zone 變數相關的廢棄警告,請無視,繼續本教程






驗證

如果在部署過程中沒有顯示任何錯誤,在幾分鐘之後,你應該會在 GCP 主控台看到 Kubernetes Engine 叢集

Navigation menu > Kubernetes Engine 來看同一個被部署的應用

若要驗證這個範例是否正確的部署,執行

make validate

輸出看起來如下:

現在,應用已經被部署到 Kubernetes Engine, 它可以產生紀錄資料,然後可以使用 Stackdriver 或其他工具來檢視它






產生紀錄

這個使用 Terraform 部署的範例應用提供一個簡單網頁的功能。 每次你在瀏覽器打開這個應用,這個應用將會發布紀錄事件到 Stackdriver Logging 。 重整頁面幾次來產生一些紀錄事件。

要取得應用頁面的 URL , 執行以下步驟:

  • 在 GCP 主控台,從 Navigation menu, 移動到 Networking section, 然後點擊 Network services
  • 在預設的 Load balancing 頁面,點擊已經設定好的 TCP load balancer
  • Load balancer detail 頁面,最上面已被下標籤 Fronted
  • 複製 IP:Port URL, 打開一個新的瀏覽器然後貼上,瀏覽器應該會顯示類似以下的畫面:

在 Stackdiver 的紀錄

Stackdriver 提供 UI 介面來檢視紀錄事件。 基本的搜尋以及篩選的功能都有提供,當在 Debug 系統問題時,這非常的有用。 Stackdriver Logging 最適合用來檢視比較近的紀錄事件,若對長期紀錄事件有要求的使用者,應該考慮其他一些工具,下面會介紹到

若要存取 Stackdriver Logging 主控台,執行以下的步驟:

  • 在 GCP 主控台,從 Navigation menu Stackdriver 區塊,選擇 Logging

  • 變更資源篩選器 GKE Container > stackdriver-logging > default ( stackdriver-logging 是叢集,而 default 是命名空間)

在這個頁面上,你可以展開紀錄來檢視紀錄數據更多的細節

在紀錄主控台,你可以執行任何類型的文字搜尋,或是嘗試很多紀錄類型的篩選器,事件等級,時間區間等等






檢視紀錄匯出

Terraform 配置建立了兩個紀錄匯出接收器。 若要檢視接收器,執行以下的步驟:

  • 你應該還在 Stackdriver -> Logging 頁面
  • 在左邊導航選單,點擊 Exports 選單選項
  • 這會導引你到 Exports 頁面,在紀錄匯出的清單,你應該會看到兩個接收器
  • 在接收器右手邊點擊 context 選單 (三個小點), 然後選擇 Edit sink, 你可以編輯/檢視這些接受器
  • 另外,在導航視窗的頂部點擊 Create Export 選項,你可以建立額外的客制匯出接收器






在 Cloud Storage 的紀錄

紀錄事件可以被儲存在 Cloud Storage, 這是一個適合用來儲存歸檔資料的物件儲存系統。 Cloud Storage 儲存區的政策可以被配置,舉例來說,久置的資料可變為過期,然後自動刪除,而新的資料可以依照不同的類別被儲存,類別會影響到價格以及可用性。

Terraform 配置檔建立了一個 Cloud Storage 儲存區,名為 Stackdriver-gke-logging-, 中長期的紀錄都會被匯出,然後儲存在這。 在這個範例中,儲存類別被定義為 Nearline, 因為正式環境中,紀錄中長期的紀錄不會經常性地被儲存(這將有助於管理中長期儲存成本)。 在正式環境中,儲存區也可以包含一個生命週期的政策,他可以將內容移動到 Coldline 儲存區,這樣對長期儲存記錄的成本會更低

要在 Cloud Storage 存取 Stackdriver 紀錄, 執行下面的步驟:

  • 在 GCP 主控台, 從 Navigation menu 點擊 Storage
  • 找到名為 stackdriver-gke-logging-<random-Id> 的儲存區,點擊名稱
  • 你應會看到一系列與跑到叢集中的 pod 相對應的資料夾 (就是, autoscaler, dnsmasq, 等等)

你可以點擊任何一個資料夾來瀏覽特定的紀錄細節,像是 heapster, kubedns, sidecar, 等等…






在 BigQuery 的紀錄

Stackdriver 紀錄事件可以被設定成發佈在 BigQuery, 一個快速的,精細的,供龐大資料查詢的資料儲存工具

Terraform 配置將會建立一個 BigQuery 資料組, 名為 gke_logs_dataset。 這個資料組將會被設定成包含所有與 Kubernetes Engine 相關的距今一個小時的紀錄 (設定預設的資料組表格過期時間)。 Stackdriver 匯出將會被建立且將 Kubernetes Engine 容器紀錄推送到資料組

若想要從 BigQuery 存取 Stackdriver 紀錄,執行下面的步驟:

  • 在 GCP 主控台的 Navigation menu, 在 Big Data 的區塊點擊 BigQuery
  • 在左邊的選單,點擊你的專案名稱。 你應會看到一個名為 gke_logs_dataset 的資料組。 展開這個資料組來檢視存在的表格 ( Note: 這個資料組會立即被建立,但表格會再當紀錄產生了,且新的表格有需要時建立)
  • 點擊其中一個表格來檢視表格細節
  • 檢視表格結構,並且注意到欄位的名稱以及他們的資料類型。 這些資訊在你下一步要對表格做查詢時會用到

  • 點擊右上方 Query Table 來對表格執行客製化查詢
  • 這會在查詢編輯器裡增加一個查詢,你它有一個語法錯誤
  • 編輯這個查詢,在 after 之後增加一個星號 (*) 來從這個表格調出所有的細節。 備註: 一個 Select * 查詢通常是非常昂貴,且不建議的。 在本教程中,資料組被限制上最近一個小時的紀錄,所以整體上資料庫的相對小的。
  • 點擊 Run 來執行查詢,並且從表格得到一些結果

結果視窗應該會顯示一些行和列,你可以捲動回傳的多行資料。如果你想要,執行一些客制的查詢從原本查詢的結果中篩選一些特定的資料






刪除安裝

Qwiklabs 會將所有本教程中使用到的資源關掉,但是這邊可能需要你做的是清理你的環境來節省成果,當一個好雲端公民!

make teardown

因為 Terraform 有對所有建立的資源做追蹤,所以他可以將他們全部清除






正式環境的故障排除

執行 Terraform 時,安裝腳本失敗了,並且回傳 Permission denied
Terraform 使用的帳號沒有提供必須的權限來在選擇的專案中建立資源。 確保列在 gcloud config list 中的專案有必要的權限來建立資源。 如果它有,使用 gcloud auth application-default login 來重新產生應用預設帳號

Cloud Storage 儲存區沒有載入
一旦 Terraform 配置已經完成,那 Cloud Storage 儲存區將會被建立。 但不是每次都會立即地將 Kubernetes Engine 叢集中的紀錄資料立即載入。 給這個程序一點時間,因為他可能會花上最多 2-3 個小時讓第一筆資料出現。 (參考資料)

BigQuery 資料組中沒有表格
一旦 Terraform 配置完成, BigQuery 資料組將自動被建立但表格不會總是在你檢視結果的時候就已經建立。 表格很少立即的載入資訊。 給這個程序一點時間,(最少 5 分鐘), 在你下可能出錯的判斷之前。






恭喜,你已完成本教程

Cloud IAM - 初探 使用 BigQuery 以及 Stackdriver 來分析 BigQuery 用量

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×