使用 BigQuery 以及 Stackdriver 來分析 BigQuery 用量

概述

Stackdriver Logging 讓你可以在 Google Cloud Platform 的服務上,針對紀錄作儲存,分析,搜尋,監控,以及警告還有事件,包含 BigQuery 服務。
Stackdriver 也提供匯出特定記錄到接收器的功能,例如 Cloud Pub/Sub, Cloud Storage, 或 BigQuery

在本教程中,你將在 Stackdriver 中檢視 BigQuery 的紀錄,設定接收器來匯出記錄到 BigQuery, 然後使用 SQL 來分析這些紀錄






前言

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






設定及要求


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






打開 BigQuery


打開 Big Query 主控台

在 Google Cloud Console, 選擇 Navigation menu > BigQuery

Welcome to BigQuery in the Cloud Console 訊息視窗彈出。這個訊息視窗提供快速導覽的連結,以及一些更新訊息

點擊 Done

BigQuery 主控台開啟






建立資料組

  • Resources 區塊中,點擊 qwiklabs-gcp- 開頭的資源
  • 點擊 CREATE DATASET
  • 設定 Dataset IDbq_logs
  • 點擊 Create dataset






執行一個查詢

首先,執行一個簡單的查詢,在 Stackdriver 中產生一筆紀錄。 之後,你將使用這個紀錄來簡單設置匯出功能,從 StackdriverBigQuery

  • 複製底下代碼,然後在 BigQuery 的查詢編輯器中貼上

    SELECT current_date
  • 點擊 Run






設定從 Stackdriver 匯出紀錄

在 Stackdriver 檢視紀錄

  • 在 Google Cloud Console 選擇 Navigation menu > Logging > Logs Viewer
  • 在第一個下拉視窗的搜索框中,選擇 BigQuery

應會看到幾筆紀錄出現

尋找含有 “jobcompleted” 字串的紀錄

  • 點擊位於左方,下圖中的三角箭頭來打開數據,然後在右手邊點擊 Expand all

這將以 JSON 格式來顯示數據,往下滑看看不一樣的欄位

  • 回到剛剛的開頭處,點擊 ‘jobcompleted’ 然後選擇 Show Matching Entries

這將會完成正確的搜尋設定

建立匯出

現在你有需要的紀錄了,很簡單的就可以設定匯出

  • 在搜尋框上方,點擊 Create Export
  • 在右手邊,依照下面給的資訊輸入
    • (1) Sink name: JobComplete
    • (2) Sink Service: BigQuery
    • (3) Sink Destination: bq_logs (我們之前設定的資料組)
  • 點擊 Create Sink
  • 點擊 CLOSE

之後任何的紀錄都會被匯出到這一個 bq_logs 資料組






執行範例查詢

為了讓新的表格載入入一些紀錄,我們需要執行一些範例的查詢

移動到 Cloud Shell , 複製下面的代碼,然後貼到 Cloud Shell 上

bq query --location=us --use_legacy_sql=false --use_cache=false '
SELECT fullName, AVG(CL.numberOfYears) avgyears
FROM `bigquery-samples.nested.persons_living`, UNNEST(citiesLived) as CL
GROUP BY fullname'
bq query --location=us --use_legacy_sql=false --use_cache=false '
select month, avg(mean_temp) as avgtemp
from `bigquery-samples.weather_geo.gsod`
where station_number = 947680
and year = 2010
group by month
order by month'
bq query --location=us --use_legacy_sql=false --use_cache=false '
select CONCAT(departure_airport, "-", arrival_airport) as route, count(*) as numberflights
from `bigquery-samples.airline_ontime_data.airline_id_codes` ac,
`bigquery-samples.airline_ontime_data.flights` fl
where ac.code = fl.airline_code
and regexp_contains(ac.airline , r"Alaska")
group by 1
order by 2 desc
LIMIT 10'

你將會看到每筆查詢回應的結果






在 BigQuery 中檢視紀錄

  • 移動到 BigQuery (Navigation menu > BigQuery)
  • 展開 qwiklabs-gcp- 開頭的資源,並且檢查 bq_logs 資料組

你應該可以看到一個表格

名字可能會跟下面的不太一樣,但看起來應該差不多
“cloudaudit_googleapis_com_data_access_2019-06-19”

  • 檢查表格的結構,然後注意到它有很大數量的欄位

如果你試著預覽,並且想知道為什麼它沒有顯示出你最近查詢的紀錄,那是因為紀錄是被串流到表格,這顯示新的資料可以被查詢但不會立即顯示在預覽

為了提高表格可用性,你可以建立 VIEW, 它可以取出子欄位的資料,然後執行一些計算來獲得查詢時間的指標

  • 在 BigQuery 的查詢編輯器,將 替換成你的 project name (在 Qwiklab 視窗左手邊可以很簡單的複製) 後,執行以下的 SQL
CREATE OR REPLACE VIEW
bq_logs.v_querylogs AS
SELECT
resource.labels.project_id,
protopayload_auditlog.authenticationInfo.principalEmail,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobConfiguration.query.query,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobConfiguration.query.statementType,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatus.error.message,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.startTime,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.endTime,
TIMESTAMP_DIFF(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.endTime, protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.startTime, MILLISECOND)/1000 AS run_seconds,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalProcessedBytes,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalSlotMs,
ARRAY(SELECT as STRUCT datasetid, tableId FROM UNNEST(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.referencedTables)) as tables_ref,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalTablesProcessed,
protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.queryOutputRowCount,
severity
FROM
`<YOUR-PROJECT-ID>.bq_logs.cloudaudit_googleapis_com_data_access_*`
ORDER BY
startTime
  • 現在可以查詢 VIEW, 執行以下指令

    SELECT * FROM bq_logs.v_querylogs
  • 檢視結果
    檢視你之前執行的三筆查詢,跟下圖類似

恭喜

你已經完成本教程

使用 Stackdriver 在 Kubernetes Engine 上做紀錄 Stackdriver Logging 的根本應用

留言

Your browser is out-of-date!

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

×