使用匯出的記錄

本頁面說明您可以如何在 Cloud Storage、BigQuery 與 Cloud Pub/Sub 中尋找及使用匯出的記錄項目。

如需匯出記錄的總覽,請參閱記錄匯出總覽一文。

如要瞭解如何匯出記錄,請參閱以下頁面:

Cloud Storage

如要在 Cloud Storage 中查看匯出的記錄,請執行下列操作:

  1. 前往 GCP 主控台的 Cloud Storage 瀏覽器:

    Cloud Storage 瀏覽器

    1. 選取您用於記錄匯出的值區。

如要瞭解記錄在值區中的組織方式,請參閱 Cloud Storage 機構一文。

匯出記錄的可用性

如果您看不到任何匯出的記錄,請檢查匯出系統指標。匯出系統指標會告知您已匯出的記錄項目數量,以及因錯誤而捨棄不匯出的項目數量。如果匯出系統指標指出沒有任何匯出的記錄項目,請檢查匯出篩選器,確認最近是否曾將符合匯出篩選器的記錄項目傳送至 Stackdriver Logging。

前往記錄匯出頁面

系統會以小時為單位,將記錄項目分批儲存至 Cloud Storage 值區。第一批項目可能需要 2 到 3 個小時才會開始顯示出來。

已匯出記錄的機構

將記錄匯出至 Cloud Storage 值區時,Stackdriver Logging 會將一組檔案寫入值區。這些檔案會在目錄階層中按照記錄類型與日期組織。記錄類型可以是簡單的名稱,例如 syslog,也可以是複合式名稱,例如 appengine.googleapis.com/request_log。如果這些記錄儲存在名為 my-gcs-bucket 的值區中,系統會如下列範例所示命名目錄:

my-gcs-bucket/syslog/YYYY/MM/DD/
my-gcs-bucket/appengine.googleapis.com/request_log/YYYY/MM/DD/

單一值區可以包含來自多個資源類型的記錄。

Stackdriver Logging 並不保證會簡化包含相同或重疊篩選器之接收器中的記錄項目;系統可能會將來自這些接收器的記錄項目多次寫入 Cloud Storage 值區。

分葉目錄 (DD/) 包含多個檔案,每個檔案都會將匯出的記錄項目依檔案名稱所指定保留一段時間。檔案「已進行資料分割」,且名稱結尾是一個資料分割編號 SnAn (n=0、1、2、...)。例如,以下是兩個可能儲存在 my-gcs-bucket/syslog/2015/01/13/ 目錄中的檔案:

08:00:00_08:59:59_S0.json
08:00:00_08:59:59_S1.json

這兩個檔案一起在從世界標準時間 0800 開始的一小時內,包含所有執行個體的 syslog 記錄項目。記錄項目時間戳記以世界標準時間表示。

如要取得所有記錄項目,您必須讀取每個時期的所有資料分割,在本例中,為檔案資料分割 0 與 1。根據記錄項目的數量,每個時期寫入的檔案資料分割數可能會發生改變。

在個別資料分割檔案內,系統會將記錄項目儲存為 LogEntry 物件的清單。如需 syslog 項目的範例,請參閱本頁的 LogEntry 類型說明。

請注意,檔案內記錄項目的排序順序並不統一,或以其他方式得到保證。

BigQuery

如要在 BigQuery 中查看匯出的記錄,請執行下列操作:

  1. 前往 GCP 主控台的 BigQuery UI:

    前往 BigQuery UI

  2. 選取做為接受器目標位置使用的資料集。

  3. 選取其中一個資料集的資料表。您可以在「Details」(詳細資料) 分頁中看到記錄項目,也可以查詢資料表以傳回資料。

詳情請參閱資料表機構一節,瞭解資料表的組織方式;請參閱匯出記錄與 BigQuery 結構定義的說明,瞭解匯出記錄項目欄位的命名方式。

BigQuery 可用性

如果您看不到任何匯出的記錄,請檢查匯出系統指標。匯出系統指標會告知您已匯出的記錄項目數量,以及因錯誤而捨棄不匯出的項目數量。如果匯出系統指標指出沒有任何匯出的記錄項目,請檢查匯出篩選器,確認最近是否曾將符合匯出篩選器的記錄項目傳送至 Stackdriver Logging。

前往記錄匯出頁面

系統會將記錄項目分批儲存至 BigQuery。第一批項目可能需要幾分鐘時間才會開始顯示出來。

表格機構

將記錄匯出至 BigQuery 資料集時,Stackdriver Logging 會建立有日期的表格,以保留匯出的記錄項目。系統會將記錄項目放在表格中,這些表格的名稱以項目的記錄名稱與時間戳記為基礎1。下表顯示記錄名稱與時間戳記對應至表格名稱的方式:

記錄名稱 記錄項目時間戳記1 BigQuery 表格名稱
syslog 2017-05-23T18:19:22.135Z syslog_20170523
apache-access 2017-01-01T00:00:00.000Z apache_access_20170101
compute.googleapis.com/activity_log 2017-12-31T23:59:59.999Z compute_googleapis_com_activity_log_20171231

1:記錄項目時間戳記以世界標準時間表示。

結構定義與欄位

已匯出記錄的 BigQuery 表格結構定義以 LogEntry 類型的結構和記錄酬載的內容為基礎。您可以在 BigQuery 網頁版 UI 中選取具有已匯出記錄項目的表格,來查看表格結構定義。

用來表示複雜記錄項目酬載的 BigQuery 表格結構定義可能會令人產生混淆,若為匯出的稽核記錄,系統會使用一些特殊的命名規則。詳情請參閱已匯出記錄的 BigQuery 結構定義一文。

查詢

如果查詢涉及在 BigQuery 中匯出的稽核記錄,而您需要這些查詢的範例,請參閱 BigQuery 稽核記錄查詢一文。

如要進一步瞭解 BigQuery 查詢,請參閱查詢參考資料一文。資料表萬用字元函式Flatten 運算子特別實用,前者可讓您跨多個資料表進行查詢,後者允許顯示來自重複欄位的資料。

範例 Compute Engine 記錄項目

下列 BigQuery 查詢會擷取多天與多種記錄類型的記錄項目:

  • 查詢會搜尋前三天的記錄 syslogapache-access。查詢日期為 2015 年 2 月 23 日,涵蓋 2 月 21 日與 2 月 22 日收到的所有記錄項目,以及在 2 月 23 日發出查詢之前收到的記錄項目。

  • 查詢會針對單一 Compute Engine 執行個體 1554300700000000000 擷取結果。

  • 查詢會忽略 Stackdriver Monitoring 端點健康狀態檢查工具 Stackdriver_terminus_bot 的流量。

SELECT
  timestamp AS Time,
  logName as Log,
  textPayload AS Message
FROM
  (TABLE_DATE_RANGE(my_bq_dataset.syslog_,
    DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), CURRENT_TIMESTAMP())),
  (TABLE_DATE_RANGE(my_bq_dataset.apache_access_,
    DATE_ADD(CURRENT_TIMESTAMP(), -2, 'DAY'), CURRENT_TIMESTAMP()))
WHERE
  resource.type == 'gce_instance'
  AND resource.labels.instance_id == '1554300700000000000'
  AND NOT (textPayload CONTAINS 'Stackdriver_terminus_bot')
ORDER BY time;

下面是一些範例輸出列:

Row | Time                    | Log                                         | Message
--- | ----------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------
 5  | 2015-02-21 03:40:14 UTC | projects/project-id/logs/syslog             | Feb 21 03:40:14 my-gce-instance collectd[24281]: uc_update: Value too old: name = 15543007601548826368/df-tmpfs/df_complex-used; value time = 1424490014.269; last cache update = 1424490014.269;
 6  | 2015-02-21 04:17:01 UTC | projects/project-id/logs/syslog             | Feb 21 04:17:01 my-gce-instance /USR/SBIN/CRON[8082]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
 7  | 2015-02-21 04:49:58 UTC | projects/project-id/logs/apache-access      | 128.61.240.66 - - [21/Feb/2015:04:49:58 +0000] "GET / HTTP/1.0" 200 536 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
 8  | 2015-02-21 05:17:01 UTC | projects/project-id/logs/syslog             | Feb 21 05:17:01 my-gce-instance /USR/SBIN/CRON[9104]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
 9  | 2015-02-21 05:30:50 UTC | projects/project-id/log/syslogapache-access | 92.254.50.61 - - [21/Feb/2015:05:30:50 +0000] "GET /tmUnblock.cgi HTTP/1.1" 400 541 "-" "-"

範例 App Engine 記錄項目

下列 BigQuery 查詢會擷取上個月失敗的 App Engine 要求:

SELECT
  timestamp AS Time,
  protoPayload.host AS Host,
  protoPayload.status AS Status,
  protoPayload.resource AS Path
FROM
  (TABLE_DATE_RANGE(my_bq_dataset.appengine_googleapis_com_request_log_,
    DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), CURRENT_TIMESTAMP()))
WHERE
  protoPayload.status != 200
ORDER BY time

以下是部分結果:

Row | Time                    | Host                                  | Status | Path
--- | ----------------------- | ------------------------------------- | ------ | ------
 6  | 2015-02-12 19:35:02 UTC | default.my-gcp-project-id.appspot.com |    404 | /foo?thud=3
 7  | 2015-02-12 19:35:21 UTC | default.my-gcp-project-id.appspot.com |    404 | /foo
 8  | 2015-02-16 20:17:19 UTC | my-gcp-project-id.appspot.com         |    404 | /favicon.ico
 9  | 2015-02-16 20:17:34 UTC | my-gcp-project-id.appspot.com         |    404 | /foo?thud=%22what???%22

Cloud Pub/Sub

如要查看串流經過 Cloud Pub/Sub 的匯出記錄,請執行下列操作:

  1. 前往 GCP 主控台的 Cloud Pub/Sub 頁面:

    前往 Cloud Pub/Sub

  2. 針對用於記錄匯出的主題尋找或建立訂閱項目,然後從中提取記錄項目。您可能必須等待新記錄項目發佈完成。

如要瞭解記錄的組織方式,請參閱已匯出記錄的機構一文。

匯出記錄的可用性

如果您看不到任何匯出的記錄,請檢查匯出系統指標。匯出系統指標會告知您已匯出的記錄項目數量,以及因錯誤而捨棄不匯出的項目數量。如果匯出系統指標指出沒有任何匯出的記錄項目,請檢查匯出篩選器,確認最近是否曾將符合匯出篩選器的記錄項目傳送至 Stackdriver Logging。

前往記錄匯出頁面

在您將記錄匯出至 Cloud Pub/Sub 主題後,Stackdriver Logging 會在收到每個記錄項目時,將該記錄項目發佈為 Cloud Pub/Sub 訊息。

已匯出記錄的機構

每則訊息的 data 欄位都是採用 base64 編碼的 LogEntry 物件。舉例來說,Cloud Pub/Sub 訂閱者可能會從接收記錄項目的主題提取下列物件。顯示的物件包含擁有一則訊息的清單,但如果可以使用多個記錄項目,Cloud Pub/Sub 可能會傳回多則訊息。data 值 (約 600 個字元) 與 ackId 值 (約 200 個字元) 已縮短,讓您更容易閱讀範例:

{
 "receivedMessages": [
  {
   "ackId": "dR1JHlAbEGEIBERNK0EPKVgUWQYyODM...QlVWBwY9HFELH3cOAjYYFlcGICIjIg",
   "message": {
    "data": "eyJtZXRhZGF0YSI6eyJzZXZ0eSI6Il...Dk0OTU2G9nIjoiaGVsbG93b3JsZC5sb2cifQ==",
    "attributes": {
     "compute.googleapis.com/resource_type": "instance",
     "compute.googleapis.com/resource_id": "123456"
    },
    "messageId": "43913662360"
   }
  }
 ]
}

如果您將 data 欄位解碼並設定格式,會得到下列 LogEntry 物件:

{
  "log": "helloworld.log",
  "insertId": "2015-04-15|11:41:00.577447-07|10.52.166.198|-1694494956",
  "textPayload": "Wed Apr 15 20:40:51 CEST 2015 Hello, world!",
  "timestamp": "2015-04-15T18:40:56Z",
  "labels": {
    "compute.googleapis.com\/resource_type": "instance",
    "compute.googleapis.com\/resource_id": "123456"
  },
  "severity": "WARNING"
  }
}

記錄項目物件

Stackdriver Logging 記錄項目是 LogEntry 類型的物件。記錄項目最重要的欄位顯示在下表中:

按照慣例,擁有特定 [LOG_ID] 的所有記錄項目都會擁有相同格式。每種記錄類型都說明其酬載欄位的內容。如需範例,請參閱 Stackdriver Logging 記錄索引一文。下面是一些範例記錄項目:

syslog

Compute Engine 的 syslog 是記錄代理程式 google-fluentd 產生的自訂記錄類型,會在虛擬機器執行個體上執行:

{
  logName: "projects/my-gcp-project-id/logs/syslog",
  timestamp: "2015-01-13T19:17:01Z",
  resource: {
    type: "gce_instance",
    labels: {
      instance_id: "12345",
      zone: "us-central1-a",
      project_id: "my-gcp-project-id"
    }
  },
  insertId: "abcde12345",
  textPayload: "Jan 13 19:17:01 my-gce-instance /USR/SBIN/CRON[29980]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)"
}

request_log

App Engine 的 request_log 擁有包含 protoPayload 欄位的記錄項目,這些欄位可保留 RequestLog 類型的物件:

{
  logName: "projects/my-gcp-project-id/logs/appengine.googleapis.com%2Frequest_log",
  timestamp: "2015-01-13T19:00:39.796169Z",
  resource: {
    type: "gae_app",
    labels: {
      module_id: "default",
      zone: "us6",
      project_id: "my-gcp-project-id",
      version_id: "20150925t173233"
    }
  }
  httpRequest: {
    status: 200
  }
  insertId: "abcde12345",
  operation: {
    id: "abc123",
    producer: "appengine.googleapis.com/request_id",
    first: true,
    last: true
  }
  protoPayload: {
    @type: "type.googleapis.com/google.appengine.logging.v1.RequestLog"
    versionId: "20150925t173233",
    status: 200,
    startTime: "2017-01-13T19:00:39.796169Z",
    # ...
    appId: "s~my-gcp-project-id",
    appEngineRelease: "1.9.17",
  }
}

activity

activity 記錄是管理員活動稽核記錄,該記錄的酬載是 AuditLog 類型的 JSON 表示法:

{
 logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity"
 timestamp: "2017-04-22T13:41:32.245Z"
 severity: "NOTICE"
 resource: {
  type: "gce_instance"
  labels: {
   instance_id: "2403273232180765234"
   zone: "us-central1-b"
   project_id: "my-gcp-project-id"
  }
 }
 insertId: "54DC1882F4B49.A4996C2.6A02F4C1"
 operation: {
  id: "operation-1492868454262-54dc185e9a4f0-249fe233-f73d472a"
  producer: "compute.googleapis.com"
  last: true
 }
 protoPayload: {
  @type: "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail: "649517127304@cloudservices.gserviceaccount.com"
  }
  requestMetadata: {…}
  serviceName: "compute.googleapis.com"
  methodName: "v1.compute.instances.delete"
  resourceName: "projects/my-gcp-project-id/zones/us-central1-b/instances/abc123"
 }
}

遲到的記錄項目

系統會將匯出的記錄項目以小時為單位,批次儲存至 Cloud Storage 值區。第一批項目可能需要 2 到 3 個小時才會開始出現。後置字串為 An (「附加」) 的匯出記錄檔資料分割會保留遲到的記錄項目。

另外,App Engine 會針對造成記錄活動的要求,合併 google.appengine.logging.v1.LogLine 類型 (又稱為 AppLog 或 AppLogLine) 的多個子項目 (位於 google.appengine.logging.v1.RequestLog 類型的主要記錄項目下)。每個記錄行都擁有一個「要求 ID」,用以識別主要項目。記錄檢視器顯示具有要求記錄項目的記錄行。Stackdriver Logging 會嘗試將所有記錄行都放到具有原始要求的批次中,即使時間戳記會將其置於下一個批次也是如此。若無法實現此目的,要求記錄項目可能會遺失部分記錄行,且可能成為在下一個批次中沒有要求的「孤立」記錄行。如果您認為這種可能性對您來說很重要,請準備好在處理記錄時,重新連線各要求部分。

與 Cloud Pub/Sub 進行第三方整合

Stackdriver Logging 支援與第三方進行記錄整合。如需目前的整合清單,請參閱 Stackdriver 整合一文。

您可以透過 Cloud Pub/Sub 主題匯出記錄,且第三方可透過訂閱相同主題來接收記錄。

如要執行整合,預期會執行如下操作:

  1. 從第三方取得藉由其 GCP 專案建立的 Google Cloud Platform (GCP) 服務帳戶名稱,例如 12345-xyz@developer.gserviceaccount.com。您可以使用這個名稱,為第三方提供接收記錄的權限。

  2. 在包含記錄的專案中,

    啟用 API

  3. 建立 Pub/Sub 主題。您可以在設定記錄接收器時,或按照下列步驟,達成此目的:

    1. 前往 Pub/Sub 主題清單
    2. 選取 [Create topic] (建立主題),然後輸入主題名稱,例如 projects/my-project-id/topics/my-pubsub-topic。您會將記錄匯出至這個主題。
    3. 選取 [Create] (建立)
    4. 授權 Stackdriver Logging,將記錄匯出至主題。請參閱為 Cloud Pub/Sub 設定權限
  4. 授權第三方訂閱您的主題:

    1. 針對 GCP 主控台中的專案,留在 Pub/Sub 主題清單中。
    2. 選取新主題。
    3. 選取 [權限]
    4. 輸入第三方的服務帳戶名稱。
    5. 在 [請選取角色] 選單中,選取 [發佈/訂閱訂閱者]
    6. 選取 [新增]
  5. 為第三方提供 Cloud Pub/Sub 主題的名稱,例如 projects/my-project-number/topics/my-pubsub-topic。第三方應先訂閱主題,然後您再開始匯出。

  6. 在您的第三方訂閱主題之後開始匯出記錄:

    1. 如果您的專案包含您要匯出的記錄,請按一下搜尋篩選器方塊上方的 [Create Export] (建立匯出作業)。這會開啟「Edit Export」(編輯匯出作業) 面板:

      編輯匯出作業面板

    2. 輸入「Sink Name」(接收器名稱)

    3. 在「Sink Service」(接收器服務) 選單中,選取 [Cloud Pub/Sub]

    4. 在「Sink Destination」(接收器目標位置) 選單中,選取第三方訂閱的 Cloud Pub/Sub 主題。

    5. 選取 [Create Sink] (建立接收器),開始匯出。

    6. 「Sink created」(已建立接收器) 對話方塊會出現。這表示已成功建立匯出接收器,且接收器有權將日後相符的記錄寫入您選取的目標位置。

您的第三方應該會立即開始接收記錄項目。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Logging
需要協助嗎?請前往我們的支援網頁