Compute Engine 的活動記錄功能可讓您追蹤影響專案的部分事件,例如 API 呼叫和系統事件。具體來說,活動記錄會提供以下項目的相關資訊:
- Compute Engine API 呼叫 -
GCE_API_CALL
事件是會變更資源狀態的 API 呼叫。舉例來說,系統會把可建立磁碟、更新執行個體中繼資料、建立執行個體群組、變更機器類型的 API 呼叫記錄在活動記錄中。不會更新資源的 API 呼叫 (例如get
和list
要求) 則不會記錄於活動記錄中。 - 作業記錄 - 當 API 呼叫變更完資源狀態時,Compute Engine 會傳回記錄在您活動記錄中的已完成作業事件,這時系統就會記錄
GCE_OPERATION_DONE
事件。 - 系統記錄 - 當 Compute Engine 執行系統事件時,系統就會把
GCE_SYSTEM_EVENT
活動記錄於活動記錄中。比方說,系統會把資訊公開的維護事件記錄為系統事件。
舉例來說,在 API 事件中,活動記錄會提供詳細資料,例如 API 請求的開始和結束時間、請求內文的細節、發出 API 請求的授權使用者,以及請求的端點。您可以下載活動記錄來搜尋特定的 API 請求,也可以檢閱由 Compute Engine 發起的系統事件。
活動記錄不會提供有關專案的帳單或使用情形資訊,例如虛擬機器執行個體執行了多久時間或花費多少成本。如要瞭解帳單記錄,請見匯出帳單功能。如要瞭解使用情形記錄,請參閱查看使用報告。
Compute Engine 活動記錄與稽核記錄也不相同。
您可以透過 Stackdriver Logging 服務使用活動記錄功能。如要進一步瞭解 Stackdriver Logging 的一般資訊,請參閱 Stackdriver Logging 說明文件。
事前準備
- 如要使用本指南中的指令列範例,請完成下列事項:
- 安裝或更新至最新版 gcloud 指令列工具。
- 設定預設地區和區域。
- 熟悉 Stackdriver Logging 的各項功能。
這個工作需要的權限
如要執行這項工作,您必須具備以下權限。
- 專案中的
logging.logServiceIndexes.list
權限 - 專案中的
logging.logServices.list
權限
查看記錄
所有 Compute Engine 專案依預設都會啟用活動記錄功能。
您可以在 Google Cloud Platform 主控台中透過記錄檢視器查看專案的活動記錄,步驟如下:
- 前往 GCP 主控台的記錄頁面。
- 在記錄檢視器中,選取並篩選第一個下拉式選單中的資源類型。
- 從 [All logs] (所有記錄) 下拉式選單中選取 [compute.googleapis.com/activity_log] 即可查看 Compute Engine 活動記錄。
匯出記錄
如要瞭解如何匯出活動記錄,請參閱 Stackdriver 說明文件中的設定記錄匯出項目。
識別記錄檔
當您將記錄匯出至 Google Cloud Storage 時,系統會把記錄檔儲存在記錄項目物件說明文件所述的結構中。
系統會使用下列目錄結構來儲存 Compute Engine 記錄檔:
<bucket>/compute.googleapis.com/activity_log/<year>/<month>/<day>
以下是儲存在名為「my-bucket」的 Google Cloud Storage 值區中的記錄檔名稱範例:
my-bucket/compute.googleapis.com/activity_log/2014/10/31/20:00:00_20:59:59_S0.json
在 BigQuery 中,活動記錄會儲存在一組資料表中,其中每個記錄類型和日子都有一個資料表,且系統會使用以下格式為資料表命名:
<dataset>.compute_googleapis_com_activity_log_YYYYMMDD
如要瞭解如何在 BigQuery 中查詢活動記錄,請參閱 Google BigQuery 中的記錄項目。
閱讀活動記錄
活動記錄的結構在 LogEntry 類型說明文件中提供相關說明,歡迎參閱。
Compute Engine 活動記錄有:
compute.googleapis.com/activity_log
作為log
欄位的值metadata
,描述時間戳記等項目的一般資訊structPayload
,其中包含記錄項目的特定內容
您可以查看 LogEntry 說明,進一步瞭解每個記錄項目提供的常用欄位,但活動記錄項目的酬載內容則是專屬於 Compute Engine;請見以下說明。
酬載內容
記錄項目的內容是以 JSON 物件格式提供,並且會儲存在 structPayload
欄位中。structPayload
欄位包含以下資訊:
欄位 | 類型 | 說明 |
---|---|---|
actor |
字串 | 執行作業的使用者電子郵件地址或服務帳戶,這個內容與 user_id 相同。 |
error |
字串 | 如果在此事件期間發生錯誤,則提供任何錯誤詳細資料。 如果沒有任何錯誤,則會省略。發生錯誤時,通常會導致要求無法順利完成。您可以使用此欄位為失敗的要求進行偵錯。 |
event_subtype |
字串 | 將特定子類型描述為 API 方法。
舉例來說,插入新執行個體的要求會顯示為 如需 API 方法的完整清單,請見 API 參考資料。 |
event_timestamp_us |
時間戳記 | 記錄事件的時間戳記,以標準紀元後微秒為單位。
這與 metadata.timestamp 相同。 |
event_type |
字串 | 說明一般事件類型。
這可能是以下其中一個項目:
|
info |
字串 | 包含額外資訊的選用欄位 (如果適用)。如果沒有可顯示的額外資訊,則會省略此欄位。 |
operation |
字串 | 當發出需要更新或更改任何資源的 API 請求時,系統將會建立相應的作業物件以追蹤完成請求。這個屬性描述此事件的作業物件,並提供作業名稱、作業的區域或地區及作業 ID 等資訊。 |
request |
JSON | 包含原始 API 請求的內文。 |
resource |
JSON | 描述此事件正在修改的特定資源。
比方說,一個虛擬機器執行個體會被視為一個資源;虛擬機器的資源屬性範例如下:
"resource": { "type": "instance", "name": "example-instance", "id": "0", "zone": "us-central1-f" } 在 API 參考資料中詳述資源類型的清單,歡迎參閱。 附註:如果一個動作會影響多個資源,則可能有多個記錄項目具有相同的 |
trace_id |
字串 | 系統提供的追蹤項目 ID 可用於將由單一動作觸發的相關記錄進行分組。例如:
trace_id: "operation-1442436581415-51fe3700bd85a-7fd317e3-f1a3555e" |
user_agent |
字串 | 描述執行此要求的用戶端。例如,若您使用 Java 用戶端程式庫發出要求,使用者代理程式即為 Google-API-Java-Client 。 |
version |
字串 | 目前的記錄格式版本會指示 Compute Engine 記錄結構定義。目前的版本為 1.2 版。
注意:Compute Engine API 版本設定與記錄格式版本設定並無關聯。 |
warning |
字串 | 如果在此事件期間發生任何警告,則會提供相關警告的詳情。警告與錯誤不同;警告會提供資訊,而且不會影響要求。 |
記錄項目樣本
舉例來說,說明建立虛擬機器的 API 要求的記錄項目範例會如下所示:
{ "log": "compute.googleapis.com/activity_log", "insertId": "2015-09-16|13:49:42.532185-07|10.106.9.208|335899593", "metadata": { "severity": "INFO", "projectId": "835469197146", "serviceName": "compute.googleapis.com", "zone": "us-central1-f", "labels":{ "compute.googleapis.com/resource_id":"0", "compute.googleapis.com/resource_name":"example-instance", "compute.googleapis.com/resource_type":"instance", "compute.googleapis.com/resource_zone":"us-central1-f" }, "timestamp": "2015-09-16T20:49:42.423637Z" }, "structPayload": { "version": "1.2", "trace_id": "operation-1442436581415-51fe3700bd85a-7fd317e3-f1a3555e", "event_timestamp_us": "1442436582423637", "event_type": "GCE_API_CALL", "event_subtype": "compute.instances.insert", "resource": { "type": "instance", "name": "example-instance", "id": "0", "zone": "us-central1-f" }, "actor": { "user": "user@example.com" }, "ip_address": "", "user_agent": "apitools-client/1.0", "request": { "url": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances", "body": "{ \"canIpForward\":false, \"description\":\"\", \"disks\":[{ \"autoDelete\":true, \"boot\":true, \"deviceName\":\"example-instance\", \"initializeParams\":{ \"diskSizeGb\":\"10\", \"diskType\":\"https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/diskTypes/pd-standard\", \"sourceImage\":\"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-8-jessie-v20150818\" }, \"mode\":\"READ_WRITE\", \"type\":\"PERSISTENT\" }], \"machineType\":\"https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/machineTypes/n1-standard-1\", \"metadata\":{ \"items\":[] }, \"name\":\"example-instance\", \"networkInterfaces\":[{ \"accessConfigs\":[{ \"name\":\"External NAT\", \"type\":\"ONE_TO_ONE_NAT\" }], \"network\":\"https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default\" }], \"scheduling\":{ \"automaticRestart\":true, \"onHostMaintenance\":\"MIGRATE\", \"preemptible\":false }, \"serviceAccounts\":[{ \"email\":\"default\", \"scopes\":[ \"https://www.googleapis.com/auth/devstorage.read_only\", \"https://www.googleapis.com/auth/logging.write\" ] }], \"tags\":{ \"items\":[] }, \"zone\":\"https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f\" }" }, "operation": { "type": "operation", "name": "operation-1442436581415-51fe3700bd85a-7fd317e3-f1a3555e", "id": "291347737657178184", "zone": "us-central1-f" } } }