Mengonfigurasi waktu yang akurat untuk VM Compute Engine

Banyak sistem software yang bergantung pada pengurutan peristiwa yang cermat mengandalkan jam sistem yang stabil dan konsisten, menggunakan log sistem dengan stempel waktu untuk memastikan sinkronisasi waktu dan men-debug masalah saat terjadi. Untuk membantu menjaga agar jam sistem tetap sinkron, instance virtual machine (VM) Compute Engine telah dikonfigurasi untuk menggunakan protokol waktu jaringan (NTP), solusi gabungan dari hardware dan software sinkronisasi waktu. Jika memastikan sinkronisasi waktu yang akurat dan memantau akurasi sinkronisasi waktu penting untuk tujuan Anda, Anda dapat mengonfigurasi waktu akurat, bukan NTP, untuk menyinkronkan jam VM dengan jam host menggunakan chrony dan ptp_kvm. Konfigurasi ini dirancang untuk mencapai akurasi dalam waktu 1 mdtk untuk penyiapan yang didukung.

Jenis mesin yang didukung

Jenis mesin berikut mendukung waktu yang akurat:

Sistem operasi yang didukung

Sistem operasi (OS) berikut mendukung waktu yang akurat:

OS Versi Gambar
CentOS Stream 9 centos-stream-9
Container-Optimized OS COS 105 LTS, COS 109 LTS, COS 113 LTS, COS 117 LTS cos-105-lts, cos-109-lts, cos-113-lts, cos-117-lts
Debian 11 (Bullseye), 12 (Bookworm) debian-11, debian-12
Fedora Cloud 39 fedora-cloud-39
RHEL 8, 9 rhel-8-4-sap-ha, rhel-8-6-sap-ha, rhel-8-8-sap-ha, rhel-8-10-sap-ha, rhel-9, rhel-9-0-sap-ha, rhel-9-2-sap-ha, rhel-9-4-sap-ha
Rocky Linux 8, 9 rocky-linux-8, rocky-linux-8-optimized-gcp, rocky-linux-9-optimized-gcp, rocky-linux-9-optimized-gcp
SLES 15 sles-15, sles-15-sp2-byos, sles-15-sp2-sap, sles-15-sp3-byos, sles-15-sp3-sap, sles-15-sp4-byos, sles-15-sp4-sap, sles-15-sp5-byos, sles-15-sp5-sap
Ubuntu 22.04 LTS (Jammy Jellyfish), 24.04 LTS (Noble Numbat) ubuntu-2204-lts, ubuntu-2404-lts-amd64
Ubuntu Pro 2004 ubuntu-pro-2004-lts, ubuntu-pro-2004-lts-amd64

Zona yang didukung

Zona berikut mendukung waktu yang akurat:

Zona Lokasi
europe-west1-b St. Ghislain, Belgia, Eropa
europe-west1-c St. Ghislain, Belgia, Eropa
europe-west2-b London, Inggris, Eropa
europe-west3-a Frankfurt, Jerman, Eropa
us-central1-a Council Bluffs, Iowa, Amerika Utara
us-central1-b Council Bluffs, Iowa, Amerika Utara
us-central1-c Council Bluffs, Iowa, Amerika Utara
us-central1-f Council Bluffs, Iowa, Amerika Utara
us-east1-b Moncks Corner, South Carolina, Amerika Utara
us-east1-c Moncks Corner, South Carolina, Amerika Utara
us-east4-c Ashburn, Virginia, Amerika Utara
us-east5-a Columbus, Ohio, Amerika Utara
us-south1-a Dallas, Texas, Amerika Utara
us-west1-b The Dalles, Oregon, Amerika Utara
us-west2-a Los Angeles, California, Amerika Utara
us-west3-a Salt Lake City, Utah, Amerika Utara

Mengonfigurasi sinkronisasi waktu yang akurat

Untuk mengonfigurasi sinkronisasi waktu yang akurat untuk VM project Anda, selesaikan tugas berikut untuk setiap VM:

  • Konfigurasikan chrony untuk menggunakan ptp-kvm sebagai sumber waktunya.
  • Konfigurasi Google Cloud Agen Operasional untuk pengumpulan dan analisis data.

Setelah Anda menyelesaikan kedua tugas, sinkronisasi waktu yang akurat akan disiapkan untuk VM di project Anda.

Untuk contoh skrip yang membuat VM dan menyelesaikan kedua tugas untuk mengonfigurasi sinkronisasi waktu yang akurat, lihat skrip pembuatan VM di GitHub.

Mengonfigurasi chrony untuk menggunakan ptp-kvm

Untuk mengonfigurasi chrony agar menggunakan ptp-kvm sebagai sumber waktunya, jalankan skrip berikut di dalam setiap VM project Google Cloud :

#!/bin/bash

# Install chrony as needed
if ! command -v chronyc &>/dev/null; then
    # Detect the package manager and install chrony
    if command -v apt &>/dev/null; then
        # Debian, Ubuntu, and derivatives
        echo "Detected apt. Installing chrony..."
        apt-get update
        apt-get install -y chrony
    elif command -v dnf &>/dev/null; then
        # Fedora, RHEL 8+, CentOS 8+
        echo "Detected dnf. Installing chrony..."
        dnf install -y chrony
    elif command -v yum &>/dev/null; then
        # RHEL 7, CentOS 7
        echo "Detected yum. Installing chrony..."
        yum install -y chrony
    elif command -v zypper &>/dev/null; then
        # openSUSE, SLES
        echo "Detected zypper. Installing chrony..."
        zypper install -y chrony
    else
        echo "Please install chrony manually."
        exit 1
    fi
fi

# Different distros place chrony config in
# different locations, detect this.
if [ -f "/etc/chrony/chrony.conf" ]; then
    CHRONY_CONF="/etc/chrony/chrony.conf"
else
    CHRONY_CONF="/etc/chrony.conf"
fi

# Load PTP-KVM clock for high-accuracy clock synchronization
# PTP-KVM allows the VM to read a cross time-stamp of a platform
# provided clock and the VM CPU Clock (CycleCounter), providing
# resiliency from network and virtualization variability when
# synchronizing the realtime/wall clock
/sbin/modprobe ptp_kvm
echo "ptp_kvm" >/etc/modules-load.d/ptp_kvm.conf

# NTP servers might indicate the wrong time due to chrony
# greatly reducing the polling frequency, resulting in
# overall negative impact to the clock synchronization
# achieved, especially after live migration events.
#
# We disable NTP servers to prevent these issues.
#
# Customers interested in monitoring the clock accuracy compared to NTP sources
# should run a second instance of chrony in a no-change mode to do so.

# Disable NTP servers:
sed -i '/^server /d' $CHRONY_CONF
sed -i '/^pool /d' $CHRONY_CONF
sed -i '/^include /d' $CHRONY_CONF

#Disable DHCP based NTP config:
sed -i 's/^NETCONFIG_NTP_POLICY="auto"/NETCONFIG_NTP_POLICY=""/' /etc/sysconfig/network/config
truncate -s 0 /var/run/netconfig/chrony.servers
echo PEERNTP=no | sudo tee -a /etc/sysconfig/network
service NetworkManager restart
systemctl disable systemd-timesyncd.service
timedatectl set-ntp false

# Configure PTP-KVM based HW refclock, with leap second smearing
# Google's clocks are doing leap second smearing, and therefor chrony shouldn't attempt to adjust
# the time received from PTP-KVM to adjust for leap seconds.
sed "s/^leapsectz/#leapsectz/" -i $CHRONY_CONF
echo "refclock PHC /dev/ptp_kvm poll -1" >>$CHRONY_CONF
# For extra debugging logging, uncomment the following line
#echo "log measurements statistics tracking" >> $CHRONY_CONF
# Enable chrony's clock accuracy tracking log,
# for monitoring and auditing.
echo "log tracking" >>$CHRONY_CONF

# Restart chrony (Ubuntu named it differently)
systemctl restart chronyd
systemctl restart chrony

Mengonfigurasi Google Cloud Agen Operasional di VM Anda

Untuk mengonfigurasi Google Cloud Agen Operasional untuk pengumpulan dan analisis data, jalankan skrip berikut di dalam setiap VM project Google Cloud Anda:

#!/bin/bash

# From https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
bash add-google-cloud-ops-agent-repo.sh --also-install

OPS_AGENT_CONF="
logging:
    receivers:
        chrony_tracking_receiver:
            type: files
            include_paths:
                - /var/log/chrony/tracking.log
    processors:
        chrony_tracking_processor:
            type: parse_regex
            regex: \"^.*PHC0.*  (?<max_error>[-\d\.eE]+)$\"
    service:
        pipelines:
            chrony_tracking_pipeline:
                receivers: [chrony_tracking_receiver]
                processors: [chrony_tracking_processor]
"

OPS_AGENT_CONF_PATH="/etc/google-cloud-ops-agent/config.yaml"
echo "$OPS_AGENT_CONF" >"$OPS_AGENT_CONF_PATH"
systemctl restart google-cloud-ops-agent

Mengonfigurasi pemantauan sinkronisasi waktu

Untuk mengonfigurasi pemantauan sinkronisasi waktu untuk VM project Google Cloud Anda, jalankan skrip penyiapan dasbor dan logging untuk projectGoogle Cloud Anda. Skrip ini membantu Anda menyelesaikan tugas berikut untuk project Google Cloud Anda:

  • Hal ini menetapkan izin yang sesuai pada akun layanan yang terkait dengan project VM Anda. Google Cloud
  • Metrik ini membuat metrik berbasis log yang digunakan chrony untuk memastikan akurasi antara clock di VM dan server host-nya.
  • Dasbor ini membuat pengukuran ketertelusuran clock VM ke UTC dengan menggabungkan metrik berikut:

Untuk menyelesaikan tugas sebelumnya, jalankan skrip berikut:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: time-sync-logging-dashboard.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

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"

cp clock-error-metric.json /tmp/clock-error-metric.json
sed -i "s/PROJECT_ID/${PROJECT_ID}/" /tmp/clock-error-metric.json

gcloud logging metrics create --project "${PROJECT_ID}" phc-clock-max-error-gce --config-from-file=/tmp/clock-error-metric.json
gcloud monitoring dashboards create --project "${PROJECT_ID}" --config-from-file=metric-dashboard.json

Setelah skrip selesai berjalan, gunakan dasbor yang dibuatnya untuk melihat data akurasi clock untuk VM project Anda.

Langkah berikutnya