使用 Stackdriver 和 OpenCensus 擷取 Cloud Bigtable 追蹤記錄和指標

本教學課程說明如何使用 OpenCensusStackdriver 在您的 Cloud Bigtable 工作負載中導入用戶端追蹤和指標記錄。儘管 Cloud Bigtable 能利用 Stackdriver 呈現許多實用的伺服器端指標,但如果能導入用戶端追蹤、檢測和應用程式定義的指標,就能讓應用程式帶來更多效益。舉例來說,對於向 Cloud Bigtable 端點發出的呼叫所產生的往返延遲,伺服器端的指標並無法提供相關的時間區間資料,而只能透過用戶端的追蹤記錄來顯示。

OpenCensus 是一項開放原始碼程式庫,可讓您在應用程式內提供資訊監控功能。這個程式庫為各廠商通用,且已整合 Prometheus 和 Zipkin 等多種後端。在本教學課程中,您將以 Stackdriver 做為追蹤記錄和指標的後端。

在完成本教學課程中的步驟之前,建議您先熟悉 Linux 指令列的相關概念;這並非先備條件,只不過具備一些有關 Java 程式設計語言的知識,有助於您瞭解範例程式碼。

目標

  • 部署 Cloud Bigtable 執行個體。
  • 部署 Compute Engine 虛擬機器 (VM),以執行使用 OpenCensus 進行檢測的範例 Java 用戶端。
  • 下載、部署和執行檢測的 Java 用戶端應用程式。
  • 在 Stackdriver Trace 中查看 OpenCensus 追蹤記錄。
  • 在 Stackdriver Metrics Explorer 中查看 OpenCensus 指標。

費用

本教學課程使用下列 Google Cloud Platform 計費元件:

您可以使用 Pricing Calculator,根據您的預測使用量來產生預估費用。 初次使用 GCP 的使用者可能符合申請免費試用的資格。

事前準備

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 選取或建立 Google Cloud Platform 專案。

    前往「Manage resources」(管理資源) 頁面

  3. 請確認您已啟用 Google Cloud Platform 專案的計費功能。

    瞭解如何啟用計費功能

  4. 啟用Compute Engine, Cloud Bigtable, and Stackdriver Logging API。

    啟用 API

  5. 安裝並初始化 Cloud SDK

參考架構

為簡單起見,在本教學課程中,您將在 Java 主控台應用程式中導入所有用戶端邏輯。針對資料儲存庫層級,您將使用 Cloud Bigtable。這項服務能讓您著重處理用戶端追蹤記錄和指標的關鍵層面,而不用擔心資料庫部署及相關設定作業的問題。

下方架構圖展示的是 Java 主控台應用程式和資料儲存庫層級。

示範 Java 主控台應用程式和資料儲存庫層級的參考架構。

建立 Cloud BigTable 執行個體

在本節中,您將建立 Cloud Bigtable 執行個體,以供 Java 應用程式稍後於本教學課程中使用。

  • 在 Cloud Shell 中,建立一個 Cloud Bigtable 開發執行個體:

    gcloud bigtable instances create cbt-oc \
      --cluster=cbt-oc \
      --cluster-zone=us-central1-c \
      --display-name=cbt-oc \
      --instance-type=DEVELOPMENT
    

這個指令可能需要幾分鐘才能完成。

建立及設定 Compute Engine VM

  • 在 Cloud Shell 中建立一個具有安全性範圍的 Compute Engine VM,以符合 0Auth 2.0 標準:

    gcloud compute instances create trace-client \
        --zone=us-central1-c \
        --scopes="https://www.googleapis.com/auth/bigtable.admin.table,\
    https://www.googleapis.com/auth/bigtable.data,\
    https://www.googleapis.com/auth/logging.write,\
    https://www.googleapis.com/auth/monitoring.write,\
    https://www.googleapis.com/auth/trace.append"
    

Java 應用程式範例

本節使用會產生交易的範例 Java 應用程式,示範 OpenCensus 和 Stackdriver 的追蹤記錄能力。

應用程式流程

在 Compute Engine VM 上執行的範例 Java 應用程式會執行以下操作:

  1. 在 Cloud Bigtable 執行個體中建立資料表。
  2. 對於一系列 10,000 筆的交易集進行以下操作:
    1. 寫入一小部分的資料列。
    2. 讀取單一資料列。
    3. 對這些資料列執行資料表掃描作業。
  3. 刪除資料表。

部署範例應用程式

在本節中,您將下載內含已檢測程式碼的 Java 應用程式,並且根據您的環境進行修改,然後執行該應用程式。

  1. 前往 GCP Console 的「VM Instances」(VM 執行個體) 頁面:

    前往「VM INSTANCES」(VM 執行個體) 頁面

  2. 按一下 [SSH] 按鈕 (下方螢幕截圖中醒目顯示的部分),使用 SSH 連線至 VM:

    使用 SSH 連線至 VM。

  3. 在 VM 執行個體中,安裝 Git、Java 8 JDK 和 Maven

    sudo apt-get install git openjdk-8-jdk maven -y
    
  4. 在執行個體中複製來源存放區,以供本教學課程使用:

    git clone https://github.com/GoogleCloudPlatform/community.git
    

    您現在可以依據您專案的特定設定來更新 Java 應用程式。

  5. 前往內含 Java 原始碼的資料夾。

    cd community/tutorials/bigtable-oc/java/
    
  6. 將應用程式的程式碼設為使用 cbt-oc Cloud Bigtable 執行個體:

    export INSTANCE_ID=cbt-oc
    
  7. 現在請執行 Maven 指令來建構和執行程式。

    mvn package -DskipTests --quiet
    mvn exec:java -Dexec.mainClass=com.example.bigtable.App --quiet
    

    輸出看起來類似以下內容:

    ...
    2019-05-13 23:31:54 INFO  BigtableSession:89 - Opening connection for projectId your-project, instanceId cbt-oc, on data host bigtable.googleapis.com, admin host bigtableadmin.googleapis.com.
    2019-05-13 23:31:54 INFO  BigtableSession:89 - Bigtable options: {......}
    2019-05-13 23:31:54 INFO  OAuthCredentialsCache:89 - Refreshing the OAuth token
    2019-05-13 23:31:55 INFO  App:170 - Create table Hello-Bigtable
    2019-05-13 23:35:36 INFO  App:209 - Delete the table
    2019-05-13 23:35:36 WARN  BigtableAdmin:116 - Table Hello-Bigtable was disabled in memory only.
    

範例應用程式的重要程式碼

在以下程式碼片段中,系統會將 Cloud Bigtable 執行個體提供給 Java 執行階段,該執行階段會使用您先前設定的環境變數 INSTANCE_ID

private static final String PROJECT_ID = ServiceOptions.getDefaultProjectId();
private static final String INSTANCE_ID = System.getenv( "INSTANCE_ID");

下方程式碼片段顯示如何定義手動加上標籤的追蹤記錄範圍:

try (Scope ss = tracer.spanBuilder("opencensus.Bigtable.Tutorial").startScopedSpan()) {

    // generate unique UUID
    UUID uuid = UUID.randomUUID();
    String randomUUIDString = uuid.toString();

    startRead = System.currentTimeMillis();
    // write to Bigtable
    writeRows(table, randomUUIDString);
    endRead = System.currentTimeMillis();

    startWrite = System.currentTimeMillis();
    // read from Bigtable
    readRows(table, randomUUIDString);
    endWrite = System.currentTimeMillis();

請注意具有 spanBuilder 呼叫的 try 區塊,這個部分示範了程式如何利用 OpenCensus 執行追蹤。在 doBigTableOperations 函式中執行資料表寫入和讀取作業的呼叫鏈將以此方式進行檢測。

這個程式也會將 Stackdriver Trace 設為追蹤後端:

private static void configureOpenCensusExporters(Sampler sampler) throws IOException {
    TraceConfig traceConfig = Tracing.getTraceConfig();

    // For demo purposes, lets always sample.

    traceConfig.updateActiveTraceParams(
      traceConfig.getActiveTraceParams().toBuilder().setSampler(sampler).build());

    // Create the Stackdriver trace exporter
    StackdriverTraceExporter.createAndRegister(
      StackdriverTraceConfiguration.builder()
        .setProjectId(PROJECT_ID)
        .build());

    // [Start Stackdriver Monitoring]
    StackdriverStatsExporter.createAndRegister();

在 Stackdriver Trace UI 中查看追蹤記錄

範例程式會執行 10,000 筆交易集:三次寫入及一次範圍讀取。匯出工具設為每 1,000 筆交易集記錄一次追蹤記錄範例。因此在整個程式執行期間,系統大約會擷取 10 或 11 次追蹤記錄。

等程式執行一小段時間後,請進行以下操作:

  1. 前往 Stackdriver 底下的 Stackdriver Trace 主控台

    Stackdriver Trace 主控台。

  2. 按一下 [Trace List] (追蹤記錄清單)

    畫面右側應會顯示類似下圖的資料表:

    追蹤記錄清單資料表。

    追蹤記錄的取樣率設為每 1,000 筆交易進行一次追蹤記錄。

    「Timeline」(時間軸) 中的追蹤標籤 opencensus.Bigtable.Tutorial 是最外側追蹤範圍的名稱,該名稱會在下列程式碼片段中定義:

    // sample every 1000 transactions
    configureOpenCensusExporters(Samplers.probabilitySampler(1/1000.0));
  3. 選取 opencensus.Bigtable.Tutorial。這會開啟詳細資料檢視,其中顯示更多有關呼叫鏈的資訊以及各種實用資訊,例如在用戶端程式庫中針對不同的 API 呼叫進行檢測的追蹤範圍,還有操作層級的呼叫延遲資料。

    舉例來說,每一連串的寫入和讀取資料列都會包含在較低層級且由使用者定義的 WriteRowsReadRows 追蹤時距內。

    ReadRows 下方,您會看到 get 作業,隨後則有資料表掃描作業。

    Get 作業和資料表掃描作業。

    追蹤記錄清單中包含的其他項目 (例如 Operation.google.bigtable.admin.v2.BigtableTableAdmin.CreateTable) 則顯示於手動定義的追蹤範圍之外。因此,這些項目將視為獨立作業納入清單。

在 Stackdriver Metrics Explorer UI 中查看指標

應用程式的程式碼會顯示如何計算和記錄延遲及交易次數。

指標的部分不會取樣計算,每個記錄到的值都會透過指標呈現。每項指標的定義依據要執行的評估類型而定。在本例中,寫入延遲是以微秒為單位來記錄:

// The write latency in milliseconds
private static final MeasureDouble M_WRITE_LATENCY_MS = MeasureDouble.create("btapp/write_latency", "The latency in milliseconds for write", "ms");

分布範圍將按以下值區進行匯總並儲存:0–5 毫秒、5–10 毫秒、10–25 毫秒,以此類推。

Aggregation latencyDistribution = Distribution.create(BucketBoundaries.create(
        Arrays.asList(
            0.0, 5.0, 10.0, 25.0, 100.0, 200.0, 400.0, 800.0, 10000.0)));
View.create(Name.create("btappmetrics/write_latency"),
            "The distribution of the write latencies",
            M_WRITE_LATENCY_MS,
            latencyDistribution,
            Collections.singletonList(KEY_LATENCY)),

寫入延遲、讀取延遲和交易次數這三個指標,全部都會以對記錄器的單一呼叫來記錄。

// record read, write latency metrics and count
STATS_RECORDER.newMeasureMap()
              .put(M_READ_LATENCY_MS, endRead - startRead)
              .put(M_WRITE_LATENCY_MS, endWrite - startWrite)
              .put(M_TRANSACTION_SETS, 1)
              .record();

您可以查看擷取到的指標:

  1. 在 GCP Console 中,前往「Metrics Explorer」頁面:

    前往「Metrics Explorer」頁面

  2. 在左側導覽窗格中,按一下 [Dashboards] (資訊主頁) / [Create Dashboard] (建立資訊主頁)

  3. 在資訊主頁的標題中,將「Untitled Dashboard」(未命名的資訊主頁) 替換成「Cloud Bigtable Metrics」(Cloud Bigtable 指標)。

  4. 在左側導覽窗格中,按一下 [Resources] (資源) / [Metrics Explorer]

  5. 在 Metrics Explorer 中,使用「Find resource type and metric」(尋找資源類型和指標) 搜尋指標。輸入 opencensus/btappmetrics/write_latency,然後按一下 Enter 鍵。

  6. 在頂端的清單中選取 [Heatmap] (熱視圖)

    分布熱視圖會顯示在右邊窗格中。

  7. 按一下 [Save Chart] (儲存圖表)

  8. 在「Select Dashboard」(選取資訊主頁) 底下,選取 [Cloud Bigtable Metrics] (Cloud Bigtable 指標)

  9. 按一下 [Save] (儲存)

  10. 在左側窗格中的「Metric」(指標) 標籤旁邊,按一下已選取指標旁的 [clear] (清除)

  11. 針對 opencensus/btappmetrics/read_latencyopencensus/btappmetrics/transaction_set_count 指標,請重複操作以上步驟。

  12. 在左側導覽窗格中,選取 [Dashboards] (資訊主頁) / [Cloud Bigtable Metrics] (Cloud Bigtable 指標)

    現在會顯示三個指標的圖表。

  13. 選取一個時間範圍,按一下其中一個圖表,並將游標拖曳到圖表的最右邊,即可將圖表放大。

    如果是熱視圖,只要在各個不同顏色區塊的上方將游標按住不放,即可進一步查看分布資料。

    熱視圖的分布詳細資料。

    Metrics Explorer 會顯示寫入延遲的熱視圖。如圖所示,2108 個指標樣本都落在 5–10 毫秒這個值區。

清除所用資源

  1. 前往 GCP 主控台的「Projects」(專案) 頁面。

    前往「Projects」(專案) 頁面

  2. 在專案清單中,找到您要刪除的專案並按一下「刪除」圖示 delete
  3. 在對話方塊中輸入專案 ID,按一下 [Shut down] (關閉) 即可刪除專案。

後續步驟

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

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

這個網頁
解決方案