為 U4 Compute Engine 執行個體設定準確時間

本頁說明如何為 U4 Compute Engine 執行個體設定準確時間,以及如何設定監控功能,以便查看時間同步的準確度。

運作方式

Google Cloud 超低延遲 (ULL) 解決方案使用 Firefly 時鐘同步通訊協定,提供奈秒級同步功能。Firefly 會自動執行下列動作:

  • 執行內部同步,將所有 U4 執行個體主機伺服器的實體網路介面 (NIC) 時鐘彼此同步。
  • 執行外部同步,將所有 U4 執行個體主機伺服器的實體 NIC 時鐘同步至世界標準時間 (UTC)。

由於執行 U4 執行個體的主機伺服器實體 NIC 時鐘會由 Firefly 自動同步,因此您可以將執行個體的系統時鐘與主機伺服器的實體 NIC 時鐘同步,為執行個體設定準確時間。

如要進一步瞭解 Firefly,請參閱以下 Google Cloud 網誌 文章:瞭解 Firefly 時鐘同步通訊協定。

事前準備

設定 U4 Compute Engine 執行個體的準確時間前,請先符合下列需求。

建立 U4 執行個體

如果尚未建立,請建立 U4 Compute Engine 執行個體。請參閱與您用途相符的程序:

確認沒有其他時鐘同步服務正在執行

本頁的程序會使用 chrony 做為建議的時鐘同步用戶端。開始前,請確認執行個體上沒有其他時鐘同步服務正在執行,例如 ntpd、systemd-timesyncd 或 phc2sys。與這些服務進行非預期的互動,可能會導致 chrony 設定發生錯誤。

在 chrony 4.7 以上版本中,您可以執行下列指令,檢查其他時鐘同步服務的 chronyd 警告記錄:

journalctl -u chronyd

如果正在執行其他時鐘同步服務,輸出內容會包含類似下列內容的警告訊息:System clock interference detected (another NTP client?)。

設定 chrony,確保網路驅動程式穩定後再載入

在某些情況下,systemd 可能會在網路介面驅動程式完成初始化之前載入 chrony,導致 chrony 無法啟動,因為它無法初始化 PTP 硬體時鐘 (PHC) 裝置。

為避免發生上述問題,請覆寫 chrony 的 systemd 單位檔案,等待 PHC 裝置準備就緒:

  1. 執行編輯指令:

    systemctl edit chronyd
    
  2. 加入與執行個體類型對應的覆寫:

    • U4P 和 U4C 執行個體:

      [Unit]
      After=dev-ptp0.device dev-ptp1.device dev-ptp2.device
      Requires=dev-ptp0.device dev-ptp1.device dev-ptp2.device
      
    • U4S 執行個體:

      [Unit]
      After=dev-ptp0.device
      Requires=dev-ptp0.device
      
  3. 重新啟動服務。雖然您先前執行的 systemctl edit 指令會自動重新載入 Daemon,但我們建議您執行下列指令,確保 chrony 在變更後正常運作。

    systemctl restart chronyd
    

取得網路介面名稱

取得訪客 OS 指派的執行個體虛擬網路介面 (vNIC) 名稱。 Google Cloud 使用的名稱包括 nic0 和 nic1,但客體 OS 的命名格式不同,例如 enp22s0f0 和 ens8f0。

如要依序列出 vNIC 名稱,請執行下列指令:

find /sys/class/net -type l -not -lname '*virtual*' -printf '%l %f\n' | sort | awk '{print $2}'

將 chrony 設為使用 Firefly 同步的實體 NIC 時鐘

本節說明如何設定 chrony,將執行個體的系統時鐘與執行個體主機伺服器上的實體 NIC 時鐘同步處理,而該時鐘已由 Firefly 同步處理。

如訪客 OS (例如 enp22s0f0) 所示,U4 執行個體的虛擬網路介面 (vNIC) 會對應至執行個體主機伺服器上的實體 NIC。特定 vNIC 可使用對應的 PTP 硬體時鐘 (PHC) 裝置存取實體 NIC 時鐘:

  • Linux 中的 PHC 裝置名稱格式如下: /dev/ptpNUMBER,其中 NUMBER 是由 Linux 核心根據裝置初始化順序決定。 例如:/dev/ptp0、/dev/ptp1、/dev/ptp2。

  • 如要將實體 NIC 時鐘指定為同步來源,chrony 設定必須使用或解析為對應的 PHC 裝置。

以下各節提供範例,說明如何根據上述規定設定 chrony。請參閱與執行個體類型和 chrony 版本對應的部分:

在 U4P 和 U4C 執行個體上設定 chrony 4.7 以上版本

chrony 4.7 以上版本支援將 vNIC 名稱指定為時鐘來源,並自動解析為代表實體 NIC 時鐘的對應 PTP 硬體時鐘 (PHC) 裝置。

如要在 U4P 或 U4C 執行個體上設定 chrony 4.7 以上版本,請按照下列步驟操作:

  1. 在 chrony 設定檔中新增下列內容:/etc/chrony.conf。 檔案只能包含下列設定。請務必移除或覆寫檔案中的所有現有內容。

    # Record the rate at which the system clock gains/loses time.
    driftfile /var/lib/chrony/drift
    
    # Allow the system clock to be stepped in the first three updates
    # if its offset is larger than 1 micro-second.
    makestep 0.0000001 3
    
    # Specify directory for log files.
    logdir /var/log/chrony
    
    # Select which information is logged.
    log measurements statistics tracking refclocks
    
    # U4 Compute Engine instance clocks are 200ppb accurate
    maxclockerror 0.2
    
    # Configure all clocks for tracking, but select only one of them as source.
    refclock PHC NIC0:nocrossts poll -1 noselect
    refclock PHC NIC1:nocrossts poll -1
    refclock PHC NIC2:nocrossts poll -1 noselect
    
    # The following lines opportunistically enable Precision Time Measurement (PTM) based clock synchronization.
    # Note that PTM can potentially result in a (constant) clock skew of up to 700 nanoseconds
    # which is not accounted for in chrony's accuracy metrics.
    refclock PHC NIC0 poll -1 noselect
    refclock PHC NIC1 poll -1 noselect
    refclock PHC NIC2 poll -1 noselect

    將 NIC0、NIC1、NIC2 替換為先前取得的對應名稱。如有需要,請參閱「取得網路介面名稱」。

  2. 如要套用設定,請執行下列指令來重新啟動 chrony:

    systemctl restart chronyd
    

    chrony 會使用 NIC1 的 PTP 硬體時鐘做為時間來源,將時鐘同步統計資料記錄到 /var/log/chrony/tracking.log。

在 U4P 和 U4C 執行個體上設定 chrony 4.6.1 和更早版本

chrony 4.6.1 版和更早版本需要您在設定檔中手動指定 PTP 硬體時鐘 (PHC) 裝置名稱。

如要在 U4P 或 U4C 執行個體上設定 chrony 4.6.1 以下版本,請按照下列步驟操作:

  1. 取得與 vNIC 相關聯的 PHC 裝置索引編號。下列範例使用第一個 vNIC。

    ethtool -T NIC0
    

    將 NIC0 替換為先前取得的對應名稱,例如 enp22s0f0。如有需要,請參閱「取得網路介面名稱」。

    1. 檢查 PTP Hardware Clock:NUMBER 的輸出內容

      這個範例輸出內容會顯示 PTP Hardware Clock: 1,對應至 /dev/ptp1。

      Time stamping parameters for enp22s0f0:
      Capabilities:
              hardware-receive
              software-receive
              software-system-clock
              hardware-raw-clock
      PTP Hardware Clock: 1
      Hardware Transmit Timestamp Modes:
              off
      Hardware Receive Filter Modes:
              none
              all
      
  2. 在 chrony 設定檔中新增下列內容:/etc/chrony.conf。 檔案只能包含下列設定。請務必移除或覆寫檔案中的所有現有內容。

    上一個步驟中的 ethtool 輸出內容顯示 enp22s0f0 使用 /dev/ptp1。以下範例會指定 refclock PHC /dev/ptp1:nocrossts poll -1,將系統時鐘與對應的實體 NIC 時鐘同步 enp22s0f0:refclock PHC /dev/ptp1:nocrossts poll -1。

    # Record the rate at which the system clock gains/loses time.
    driftfile /var/lib/chrony/drift
    
    # Allow the system clock to be stepped in the first three updates
    # if its offset is larger than 1 micro-second.
    makestep 0.0000001 3
    
    # Enable kernel synchronization of the real-time clock (RTC).
    rtcsync
    
    # Save NTS keys and cookies.
    ntsdumpdir /var/lib/chrony
    
    # Specify directory for log files.
    logdir /var/log/chrony
    
    # Select which information is logged.
    log measurements statistics tracking refclocks
    
    # U4 Compute Engine instance clocks are 200ppb accurate
    maxclockerror 0.2
    
    # Configure all clocks for tracking, but select only one of them as source.
    refclock PHC /dev/ptp0:nocrossts poll -1 noselect
    refclock PHC /dev/ptp1:nocrossts poll -1
    refclock PHC /dev/ptp2:nocrossts poll -1 noselect
    
    # The following lines opportunistically enable Precision Time Measurement (PTM) based clock synchronization.
    # Note that PTM can potentially result in a (constant) clock skew of up to 700 nanoseconds
    # which is not accounted for in chrony's accuracy metrics.
    refclock PHC /dev/ptp0 poll -1 noselect
    refclock PHC /dev/ptp1 poll -1 noselect
    refclock PHC /dev/ptp2 poll -1 noselect
  3. 如要套用設定,請執行下列指令來重新啟動 chrony:

    systemctl restart chronyd
    

    chrony 會使用 enp22s0f0 的 PTP 硬體時鐘做為時間來源,將時鐘同步統計資料記錄到 /var/log/chrony/tracking.log。

在 U4S 執行個體上設定 chrony 4.7 以上版本

建議您為 U4S 執行個體使用 chrony 4.7 以上版本。使用舊版可能會導致頻繁發生錯誤,因為虛擬機器 (VM) 執行個體的 Compute Engine 時鐘同步裝置 (ptp_kvm) 可能會導致 PTP 硬體時鐘 (PHC) 裝置的索引編號發生變化。

這個 U4S 執行個體的設定範例與 U4P 和 U4C 執行個體所用的設定類似,但有下列差異:

  • 這個範例包含單一 vNIC。U4S 執行個體可以有多個 vNIC,但所有 vNIC 都由同一個實體 NIC 支援,並存取相同的實體 NIC 時鐘。
  • 無法使用精確時間測量 (PTM)。

如要在 U4S 執行個體上設定 chrony 4.7 以上版本,請按照下列步驟操作:

  1. 在 chrony 設定檔中新增下列內容:/etc/chrony.conf。 檔案只能包含下列設定。請務必移除或覆寫檔案中的所有現有內容。

    # Record the rate at which the system clock gains/loses time.
    driftfile /var/lib/chrony/drift
    
    # Allow the system clock to be stepped in the first three updates
    # if its offset is larger than 1 micro-second.
    makestep 0.0000001 3
    
    # Specify directory for log files.
    logdir /var/log/chrony
    
    # Select which information is logged.
    log measurements statistics tracking refclocks
    
    # U4 Compute Engine instance clocks are 200ppb accurate
    maxclockerror 0.2
    
    # Configure all clocks for tracking, but select only one of them as source.
    refclock PHC NIC0:nocrossts poll -1

    將 NIC0 替換為先前取得的對應名稱,例如 enp22s0f0。如有需要,請參閱「取得網路介面名稱」。

  2. 如要套用設定,請執行下列指令來重新啟動 chrony:

    systemctl restart chronyd
    

    chrony 會使用 NIC0 的 PTP 硬體時鐘做為時間來源,將時鐘同步統計資料記錄到 /var/log/chrony/tracking.log。

驗證 chrony 設定

如要確認 chrony 設定正確無誤,請執行下列指令:

chronyc sourcestats

設定成功後,輸出內容會與下列內容相似:

Name/IP Address             NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
PHC0                        5   3     2     -0.002      0.014     +9ns     2ns
PHC1                        5   3     2     -0.003      0.007     -0ns     1ns
PHC2                        5   3     2     -0.004      0.016    +33ns     2ns
PHC3                        5   5     2     +0.002      0.078   +135ns    10ns
PHC4                        5   3     2     -0.005      0.077   +130ns     9ns
PHC5                        5   5     2     -0.006      0.131   +123ns    16ns

如果指令傳回非預期的輸出內容,請參閱「疑難排解」。

修改 chrony 設定

如要修改執行個體系統時鐘的同步對象實體 NIC,請按照下列步驟更新設定:

  1. 從包含 vNIC 名稱的行中移除 noselect,您要使用對應的實體 NIC 時鐘。
  2. 在包含要停止使用對應實體 NIC 時脈的 vNIC 名稱的行中,加入 noselect。
  3. 重新啟動 chronyd:systemctl restart chronyd,套用新設定。

監控時間同步

本節說明時間同步可用的指標,以及如何使用這些指標監控時間同步準確度。

時間同步可用的指標

您可以使用下列指標監控時間同步:

評估 可用指標和說明
將執行個體系統時鐘與實體 NIC 時鐘同步 logging.googleapis.com/user/phc-clock-max-error

這項指標會測量執行個體系統時鐘與主機伺服器實體 NIC 時鐘的同步準確度。

您必須從 Ops Agent 收集這項指標,並建立記錄指標,如「設定執行個體系統時鐘的自訂指標」一文所述。這項操作也會建立自訂資訊主頁。此外,您也可以在「使用 Cloud Monitoring 指標」一節所述程序中使用這項指標。

將實體 NIC 時鐘設為 UTC compute.googleapis.com/instance/time/firefly_utc_traceable_uncertainty

這個指標代表實體 NIC 時鐘與實際世界標準時間相比的最大誤差範圍。系統會自動向 Cloud Monitoring 回報。

如要查看這項指標、定義警告政策及建立自訂資訊主頁,請參閱「使用 Cloud Monitoring 指標」。這個指標也會顯示在指令碼建立的資訊主頁上,請參閱「為執行個體系統時鐘設定自訂指標」。

實體 NIC 時鐘的一般健康狀態 compute.googleapis.com/instance/time/firefly_nic_sync_healthy

這項布林指標會指出實體 NIC 時鐘的一般健康狀態,包括 NIC 對 NIC 和 NIC 對 UTC 的同步。系統會自動向 Cloud Monitoring 回報這項指標。

如要查看這項指標、定義警告政策及建立自訂資訊主頁,請參閱「使用 Cloud Monitoring 指標」。

如要瞭解 Cloud Monitoring 保留指標資料的時間長度,請參閱「Cloud Monitoring 配額和限制」一文中的「資料保留」一節。如要瞭解如何匯出指標以進行長期分析,請參閱 Cloud Architecture Center 說明文件中的「Cloud Monitoring 指標匯出作業」。

設定執行個體系統時鐘的自訂指標

本節提供監控設定範例,可執行下列操作:

  • 設定 Ops Agent,從執行個體收集 chrony 的記錄,以瞭解同步準確度
  • 設定 Cloud Monitoring,從專案中的所有執行個體擷取對應的記錄,做為記錄指標

在執行個體上設定 Google Cloud Ops Agent

如要設定 Ops Agent 收集監控所需的指標,請按照下列步驟操作:

  1. 如果尚未在執行個體上安裝 Ops Agent,請先完成安裝。

  2. 在 /etc/google-cloud-ops-agent/config.yaml 檔案中新增下列設定:

    logging:
      receivers:
        chrony_tracking_receiver:
          type: files
          include_paths:
            - /var/log/chrony/tracking.log
      processors:
        chrony_tracking_processor:
          type: parse_regex
          regex: "^.*PHC.*  (?<max_error>[-\d\.eE]+)$"
      service:
        pipelines:
          chrony_tracking_pipeline:
            receivers: [chrony_tracking_receiver]
            processors: [chrony_tracking_processor]
  3. 執行下列指令,重新啟動 Ops Agent:

    systemctl restart google-cloud-ops-agent
    

在專案中設定記錄指標和資訊主頁

如要為專案中的執行個體設定時間同步監控,請執行下列記錄和資訊主頁設定指令碼。這個指令碼可協助您完成下列工作:

  • 並為與執行個體專案相關聯的服務帳戶設定適當權限。指令碼會假設執行個體使用的服務帳戶是專案的預設服務帳戶。視需要將 SERVICE_ACCOUNT_EMAIL 替換成其他值。
  • 這項指標會根據記錄檔建立,用於測量執行個體系統時鐘與執行個體主機伺服器上實體 NIC 時鐘之間的時間同步準確度。
  • 系統會根據自訂記錄檔指標和可用的 Firefly 指標,建立資訊主頁,顯示執行個體的個別和合併時間同步準確度。

如要完成上述工作,請執行下列指令碼。指令碼執行完畢後,請使用指令碼建立的資訊主頁,查看專案例項的時鐘準確度資料。

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: setup_logging.sh <project_id>" >&2
    exit 1
fi

PROJECT_ID="$1"
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID  --format="value(projectNumber)")
SERVICE_ACCOUNT_EMAIL=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

# Grant permissions:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role="roles/compute.instanceAdmin"

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role="roles/monitoring.metricWriter"

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role="roles/logging.logWriter"

# Configure log-based metric
METRIC_CONF='
{
  "name": "phc-clock-max-error",
  "description": "Maximum error of the VM clock from the host clock exposed by ptp_kvm",
  "filter": "logName=~\".*/logs/chrony_tracking_receiver\"",
  "metricDescriptor": {
    "metricKind": "DELTA",
    "valueType": "DISTRIBUTION",
    "unit": "s",
    "labels": [ { "key": "instance_id", "valueType": "STRING",
          "description": "Instance ID for the source instance" } ]
  },
  "valueExtractor": "REGEXP_EXTRACT(jsonPayload.max_error, \"(.*)\")",
  "bucketOptions": {
    "explicitBuckets": {
      "bounds": [
        0.0, 1.0E-6, 5.0E-6, 1.0E-5, 1.0E-4, 0.001, 0.01, 0.1, 1.0
      ]
    }
  },
  "labelExtractors": {
    "instance_id": "REGEXP_EXTRACT(resource.labels.instance_id, \"(.*)\")"
  }
}
'
echo "$METRIC_CONF" > /tmp/clock-error-metric.json
gcloud logging metrics create --project=${PROJECT_ID} phc-clock-max-error --config-from-file=/tmp/clock-error-metric.json

# Create a dashboard plotting the clock accuracy

DASHBOARD_CONF='
{
  "displayName": "Clock Accuracy",
  "dashboardFilters": [],
  "description": "",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "height": 19,
        "width": 48,
        "widget": {
          "title": "Combined Accuracy With Threshold",
          "id": "",
          "xyChart": {
            "chartOptions": {
              "displayHorizontal": false,
              "mode": "COLOR",
              "showLegend": false
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "",
                "measures": [],
                "plotType": "LINE",
                "sort": [],
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "outputFullDuration": false,
                  "prometheusQuery": "(\n  histogram_quantile(\n    1, \n    sum by (le, instance_id) (\n      increase({\"__name__\"=\"logging.googleapis.com/user/phc-clock-max-error_bucket\", monitored_resource=\"gce_instance\"}[${__interval}])\n    )\n  ) * 1e9\n) \n+ on(instance_id) \nmax by (instance_id) (\n  max_over_time({\"__name__\"=\"compute.googleapis.com/instance/time/firefly_utc_traceable_uncertainty\", monitored_resource=\"gce_instance\"}[${__interval}])\n)",
                  "unitOverride": "ns"
                }
              }
            ],
            "thresholds": [
              {
                "color": "COLOR_UNSPECIFIED",
                "direction": "DIRECTION_UNSPECIFIED",
                "label": "",
                "targetAxis": "Y1",
                "value": 30000
              }
            ],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      },
      {
        "yPos": 19,
        "height": 16,
        "width": 24,
        "widget": {
          "title": "NIC-UTC sync accuracy",
          "id": "",
          "xyChart": {
            "chartOptions": {
              "displayHorizontal": false,
              "mode": "COLOR",
              "showLegend": false
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "",
                "measures": [],
                "minAlignmentPeriod": "60s",
                "plotType": "LINE",
                "sort": [],
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "outputFullDuration": false,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"instance_name\"",
                        "metric.label.\"nic_id\"",
                        "resource.label.\"instance_id\""
                      ],
                      "perSeriesAligner": "ALIGN_MEAN"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/time/firefly_utc_traceable_uncertainty\" resource.type=\"gce_instance\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      },
      {
        "yPos": 19,
        "xPos": 24,
        "height": 16,
        "width": 24,
        "widget": {
          "title": "VM-NIC sync Accuracy",
          "id": "",
          "xyChart": {
            "chartOptions": {
              "displayHorizontal": false,
              "mode": "COLOR",
              "showLegend": false
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "",
                "measures": [],
                "minAlignmentPeriod": "60s",
                "plotType": "LINE",
                "sort": [],
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "outputFullDuration": false,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_PERCENTILE_99",
                      "groupByFields": [
                        "metric.label.\"instance_id\""
                      ],
                      "perSeriesAligner": "ALIGN_DELTA"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/phc-clock-max-error\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      }
    ]
  }
}
'

echo "$DASHBOARD_CONF" > /tmp/metrics-dashboard.json

gcloud monitoring dashboards create --project=${PROJECT_ID} --config-from-file=/tmp/metrics-dashboard.json

使用 Cloud Monitoring 指標

以下章節說明如何使用 Cloud Monitoring 指標。您可以在下列各節中使用可用的時間同步指標。

除了 Google Cloud 控制台,您也可以透過 Monitoring API 建立自訂資訊主頁、設定快訊及查詢指標。

在 Monitoring 中查看指標

本節說明如何在「監控」中查看指標。

控制台

如要使用 Metrics Explorer 查看受監控資源的指標,請執行下列操作:

  1. 前往 Google Cloud 控制台的 「指標探索器」頁面:

    前往 Metrics Explorer

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。 如要進行 App Hub 設定,請選取 App Hub 主專案或已啟用應用程式的資料夾管理專案。
  3. 在「指標」元素中,展開「選取指標」選單, 在篩選列中輸入 VM instance, 然後使用子選單選取特定資源類型和指標:
    1. 在「Active resources」(有效資源) 選單中,選取「VM instance」(VM 執行個體)。
    2. 如要選取指標,請使用「使用中的指標類別」和「使用中的指標」選單。 如需可用指標的清單,請參閱「時間同步的可用指標」。
    3. 按一下「套用」。
  4. 如要新增篩選器,從查詢結果中移除時間序列,請使用「Filter」元素。

  5. 設定資料的查看方式。 根據預設,顯示畫面會匯總所有執行個體和實體 NIC 的指標。 如要顯示每個 NIC、每個執行個體的指標,請在「Aggregation」(匯總) 元素中選取「Unaggregated」(未匯總)。

    如要進一步瞭解如何設定圖表,請參閱「使用 Metrics Explorer 時選取指標」。

定義快訊政策

本節說明如何定義警告政策。

設定監控功能在資料停止傳送時評估條件的方式時,建議選取「缺少資料點會視為違反政策條件的值」選項,有助於擷取無聲資料遺失。不過,如果刪除執行個體,這項設定會導致誤判快訊。

控制台

您可以建立警告政策來監控指標值,並在指標違反條件時收到通知。

  1. 前往 Google Cloud 控制台的 「Alerting」(警告) 頁面:

    前往「Alerting」(警告)

    如果是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

  2. 如果尚未建立通知管道,但想收到通知,請按一下「Edit Notification Channels」(編輯通知管道),新增通知管道。新增管道後,請返回「Alerting」(警告) 頁面。
  3. 在「Alerting」(警告) 頁面,選取「Create policy」(建立政策)。
  4. 如要選取指標,請展開「Select a metric」(選取指標) 選單,執行下列步驟:
    1. 如要限制選單只顯示相關項目,請在篩選列輸入 VM Instance。如果選單篩選後沒有任何結果,請停用「Show only active resources & metrics」(僅顯示使用中的資源和指標) 切換鈕。
    2. 在「資源類型」部分,選取「VM 執行個體」。
    3. 在「指標類別」部分,選取「執行個體」。
    4. 在「指標」部分,從「可用的時間同步指標」清單中選取指標。
    5. 選取 [Apply] (套用)。
  5. 點選「下一步」。
  6. 「Configure alert trigger」(設定警告觸發條件) 頁面中的設定會決定警告觸發時機。選取條件類型,視需要指定門檻。詳情請參閱「建立指標門檻警告政策」。
  7. 點選「Next」(下一步)。
  8. 選用:如要新增警告政策的通知,請按一下「Notification channels」(通知管道)。在對話方塊中,從選單選取一或多個通知管道,然後按一下「OK」(確定)。
  9. 選用:更新「Alert autoclose duration」(快訊自動關閉期限)。這個欄位會決定在缺少指標資料時,監控服務何時會關閉快訊。
  10. 選用:按一下「Documentation」(說明文件),新增要納入通知訊息的資訊。
  11. 按一下「Alert name」(警告名稱),輸入警告政策的名稱。
  12. 點按「建立政策」。
詳情請參閱「快訊總覽」。

建立自訂監控資訊主頁

本節說明如何建立自訂資訊主頁。如需使用 PromQL 查詢的具體範例,請參閱「範例:建立結合準確率指標的自訂資訊主頁」。

控制台

  1. 在 Google Cloud 控制台中,前往「Dashboards」(資訊主頁) 頁面:

    前往「Dashboards」(資訊主頁)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果。

  2. 按一下「建立資訊主頁」。
  3. 選用:更新資訊主頁標題,為資訊主頁加上描述性名稱。
  4. 針對要新增至資訊主頁的每個小工具,按一下「新增小工具」, 完成對話方塊,然後選取「套用」。

    如要進一步瞭解如何新增小工具,請參閱下列頁面:

範例:建立結合準確度指標的自訂資訊主頁

Monitoring 可助您建立自訂資訊主頁。資訊主頁可使用時間同步處理的任何可用指標。

這個部分包含 PromQL 查詢範例,您可以將其貼到自訂 Monitoring 資訊主頁。如要進一步瞭解 PromQL,請參閱「Cloud Monitoring 的 PromQL」。

本節中的查詢會結合下列項目,產生總準確度指標:

  • 用來測量執行個體系統時鐘與實體 NIC 時鐘準確度的指標 (phc-clock-max-error)
  • 用來測量實體 NIC 時鐘與世界標準時間 (UTC) 準確度的指標 (firefly_utc_traceable_uncertainty)

控制台

  1. 按照步驟存取 PromQL 的程式碼編輯器。

  2. 在文字欄位中輸入下列查詢:

    (
      histogram_quantile(
       1,
       sum by (le, instance_id) (
         increase({"__name__"="logging.googleapis.com/user/phc-clock-max-error_bucket", monitored_resource="gce_instance"}[${__interval}])
       )
      ) * 1e9
    )
    + on(instance_id)
    max by (instance_id) (
     max_over_time({"__name__"="compute.googleapis.com/instance/time/firefly_utc_traceable_uncertainty", monitored_resource="gce_instance"}[${__interval}])
    )
    
  3. 按一下 [Run Query] (執行查詢)。

如要進一步瞭解如何使用編輯器及儲存圖表,請參閱「使用 PromQL 的程式碼編輯器」。

疑難排解

驗證 chrony 設定時,您可能會收到非預期的輸出內容,例如以下輸出內容表示 chrony 無法啟動:

506 Cannot talk to daemon

如要進一步排解問題,請檢查 journald 的 chrony 記錄檔:

journalctl -u chronyd.service

以下範例輸出內容顯示錯誤。如果您在執行個體上安裝較舊版本的 chrony,但套用適用於 chrony 4.7 以上版本的設定,就會發生這個錯誤。

Feb 19 06:19:42 host-name systemd[1]: Starting chronyd.service - NTP client/server...
Feb 19 06:19:42 host-name chronyd[35160]: chronyd version 4.6.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG)
Feb 19 06:19:42 host-name chronyd[35160]: Setting filter length for PHC0 to 1
Feb 19 06:19:42 host-name chronyd[35160]: Could not open eth0 : No such file or directory
Feb 19 06:19:42 host-name chronyd[35160]: Fatal error : Could not open PHC
Feb 19 06:19:42 host-name chronyd[35157]: Could not open PHC
Feb 19 06:19:42 host-name systemd[1]: chronyd.service: Control process exited, code=exited, status=1/FAILURE
Feb 19 06:19:42 host-name systemd[1]: chronyd.service: Failed with result 'exit-code'.
Feb 19 06:19:42 host-name systemd[1]: Failed to start chronyd.service - NTP client/server.

已知問題

為 U4 執行個體設定準確時間時,可能會發生下列已知問題:

  • 只有在執行個體生命週期內觀察到非零流量的網路介面,才會回報準確度指標。如要解決這個問題,您可以將 nic0 設為同步處理的時鐘來源,確保遙測功能正常運作。或者,請確保所有網路介面都有流量。