Mengonfigurasi waktu yang akurat untuk instance Compute Engine U4

Halaman ini menjelaskan cara mengonfigurasi waktu yang akurat untuk instance Compute Engine U4 dan cara mengonfigurasi pemantauan sehingga Anda dapat melihat akurasi sinkronisasi waktu.

Cara kerjanya

Solusi Latensi Ultra-Rendah (ULL)Google Cloud menggunakan protokol sinkronisasi jam Firefly untuk memberikan sinkronisasi tingkat nanodetik. Firefly secara otomatis melakukan hal berikut:

  • Melakukan sinkronisasi internal untuk menyinkronkan jam antarmuka jaringan (NIC) fisik semua server host instance U4 satu sama lain.
  • Melakukan sinkronisasi eksternal untuk menyinkronkan jam NIC fisik dari semua server host instance U4 ke Waktu Universal Terkoordinasi (UTC).

Karena jam NIC fisik server host yang menjalankan instance U4 otomatis disinkronkan oleh Firefly, Anda dapat mengonfigurasi waktu yang akurat untuk instance dengan menyinkronkan jam sistem instance ke jam NIC fisik server host-nya.

Untuk mengetahui informasi selengkapnya tentang Firefly, lihat Google Cloud Postingan blog berikut: Memahami protokol sinkronisasi jam Firefly.

Sebelum memulai

Sebelum mengonfigurasi waktu yang akurat untuk instance Compute Engine U4, Anda harus memenuhi persyaratan berikut.

Membuat instance U4

Jika Anda belum melakukannya, buat instance Compute Engine U4. Lihat prosedur yang sesuai dengan kasus penggunaan Anda:

Pastikan tidak ada layanan sinkronisasi jam lain yang sedang berjalan

Prosedur di halaman ini menggunakan chrony sebagai klien sinkronisasi waktu yang direkomendasikan. Sebelum memulai, pastikan tidak ada layanan sinkronisasi jam lain yang berjalan di instance Anda, seperti ntpd, systemd-timesyncd, atau phc2sys. Interaksi yang tidak terduga dengan layanan ini dapat menyebabkan error pada konfigurasi chrony Anda.

Di chrony versi 4.7 dan yang lebih baru, Anda dapat memeriksa log peringatan chronyd untuk layanan sinkronisasi jam lainnya dengan menjalankan perintah berikut:

journalctl -u chronyd

Jika layanan sinkronisasi jam lain sedang berjalan, output akan menyertakan pesan peringatan seperti berikut: System clock interference detected (another NTP client?).

Mendapatkan nama antarmuka jaringan

Dapatkan nama antarmuka jaringan virtual (vNIC) instance Anda seperti yang ditetapkan oleh OS tamu. Meskipun Google Cloud menggunakan nama seperti nic0 dan nic1, format penamaan OS tamu berbeda, seperti enp22s0f0 dan ens8f0.

Untuk mencantumkan nama vNIC secara berurutan, jalankan perintah berikut:

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

Konfigurasi chrony agar dimuat hanya setelah driver jaringan stabil

Dalam beberapa kasus, systemd mungkin memuat chrony sebelum driver antarmuka jaringan selesai melakukan inisialisasi, yang dapat menyebabkan chrony gagal dimulai karena tidak dapat melakukan inisialisasi perangkat jam hardware PTP (PHC).

Untuk menghindari masalah sebelumnya, ganti file unit systemd chrony untuk menunggu perangkat PHC siap dengan mengikuti langkah-langkah berikut. Jika Anda menggunakan DPDK pada instance U4C, pilih tab DPDK configuration.

Konfigurasi standar

  1. Jalankan perintah edit:

    systemctl edit chronyd
    
  2. Tambahkan penggantian yang sesuai dengan jenis instance Anda:

    • Untuk instance U4P dan U4C:

      [Unit]
      After=dev-ptp0.device dev-ptp1.device dev-ptp2.device
      Requires=dev-ptp0.device dev-ptp1.device dev-ptp2.device
      
    • Untuk instance U4S:

      [Unit]
      After=dev-ptp0.device
      Requires=dev-ptp0.device
      
  3. Mulai ulang layanan. Meskipun perintah systemctl edit yang Anda jalankan sebelumnya otomatis memuat ulang daemon, sebaiknya jalankan perintah berikut untuk memastikan chrony berjalan setelah perubahan Anda.

    systemctl restart chronyd
    

Konfigurasi DPDK

  1. Jika Anda menggunakan DPDK pada instance U4C, dapatkan nomor indeks perangkat PHC yang terkait dengan nic0.

    Karena DPDK mengikat antarmuka jaringan ULL (nic1 dan nic2) ke ruang pengguna, nic0 adalah satu-satunya antarmuka yang mengekspos perangkat PTP ke kernel.

    Jalankan perintah berikut, lalu catat nilai PTP Hardware Clock:NUMBER untuk digunakan pada langkah berikutnya.

    ethtool -T NIC0
    

    Ganti NIC0 dengan nama antarmuka nic0, seperti enp22s0f0.

  2. Jalankan perintah edit:

    systemctl edit chronyd
    
  3. Tambahkan penggantian berikut:

    [Unit]
    After=dev-ptpNUMBER.device
    Requires=dev-ptpNUMBER.device
    

    Ganti NUMBER dengan nomor indeks perangkat PHC yang Anda peroleh di langkah 1.

  4. Mulai ulang layanan. Meskipun perintah systemctl edit yang Anda jalankan sebelumnya memuat ulang daemon secara otomatis, sebaiknya jalankan perintah berikut untuk memastikan chrony berjalan setelah perubahan Anda.

    systemctl restart chronyd
    

Konfigurasi chrony untuk menggunakan clock NIC fisik yang disinkronkan Firefly

Bagian ini menjelaskan cara mengonfigurasi chrony untuk menyinkronkan jam sistem instance Anda ke jam NIC fisik di server host instance Anda yang sudah disinkronkan oleh Firefly.

Antarmuka jaringan virtual (vNIC) instance U4 Anda seperti yang ditampilkan di OS tamu (seperti enp22s0f0) dipetakan ke NIC fisik di server host instance. vNIC tertentu dapat mengakses jam NIC fisik menggunakan perangkat jam hardware PTP (PHC) yang sesuai:

  • Nama perangkat PHC di Linux memiliki format berikut: /dev/ptpNUMBER, dengan NUMBER ditentukan oleh kernel Linux sesuai dengan urutan inisialisasi perangkat. Misalnya, lihat nama perangkat PHC berikut: /dev/ptp0, /dev/ptp1, /dev/ptp2.

  • Untuk menentukan clock NIC fisik sebagai sumber sinkronisasi, konfigurasi chrony harus menggunakan atau di-resolve ke perangkat PHC yang sesuai.

Setiap bagian berikut memberikan contoh cara mengonfigurasi chrony sesuai dengan persyaratan sebelumnya. Lihat bagian yang sesuai dengan jenis instance dan versi chrony Anda:

Mengonfigurasi chrony 4.7 dan yang lebih baru di instance U4P dan U4C

chrony versi 4.7 dan yang lebih baru mendukung penentuan nama vNIC sebagai sumber jam dan secara otomatis menyelesaikannya ke perangkat jam hardware PTP (PHC) yang sesuai yang mewakili jam NIC fisik.

Konfigurasi standar

Untuk mengonfigurasi chrony versi 4.7 dan yang lebih baru pada instance U4P atau U4C, lakukan hal berikut:

  1. Tambahkan kode berikut ke file konfigurasi chrony, /etc/chrony.conf. File tersebut hanya boleh berisi konfigurasi berikut. Pastikan Anda menghapus atau menimpa konten file yang sudah ada.

    # 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

    Ganti NIC0, NIC1, NIC2 dengan nama yang sesuai yang Anda dapatkan sebelumnya. Jika perlu, lihat Mendapatkan nama antarmuka jaringan.

  2. Untuk menerapkan konfigurasi, mulai ulang chrony dengan menjalankan perintah berikut:

    systemctl restart chronyd
    

chrony mencatat statistik sinkronisasi jam ke /var/log/chrony/tracking.log menggunakan jam hardware PTP NIC1 sebagai sumber waktu.

Konfigurasi DPDK

Untuk mengonfigurasi chrony versi 4.7 dan yang lebih baru pada instance U4C yang menggunakan DPDK, lakukan hal berikut:

  1. Tambahkan kode berikut ke file konfigurasi chrony, /etc/chrony.conf. File hanya boleh berisi konfigurasi berikut. Pastikan Anda menghapus atau menimpa konten file yang sudah ada.

    # 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 the nic0 interface clock for tracking and select it as the source.
    refclock PHC NIC0:nocrossts poll -1
    
    # 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

    Ganti NIC0 dengan nama yang sesuai yang Anda dapatkan sebelumnya. Jika perlu, lihat Mendapatkan nama antarmuka jaringan.

  2. Untuk menerapkan konfigurasi, mulai ulang chrony dengan menjalankan perintah berikut:

    systemctl restart chronyd
    

chrony mencatat statistik sinkronisasi jam ke /var/log/chrony/tracking.log menggunakan jam hardware PTP NIC0 sebagai sumber waktu.

Mengonfigurasi chrony 4.6.1 dan yang lebih lama pada instance U4P dan U4C

chrony versi 4.6.1 dan yang lebih lama mengharuskan Anda menentukan nama perangkat jam hardware PTP (PHC) secara manual dalam file konfigurasi.

Konfigurasi standar

Untuk mengonfigurasi chrony versi 4.6.1 dan yang lebih lama di instance U4P atau U4C, lakukan hal berikut:

  1. Dapatkan nomor indeks perangkat PHC yang terkait dengan vNIC. Contoh berikut menggunakan vNIC pertama.

    ethtool -T NIC0
    

    Ganti NIC0 dengan nama yang sesuai yang Anda dapatkan sebelumnya, seperti enp22s0f0. Jika perlu, lihat Mendapatkan nama antarmuka jaringan.

    1. Tinjau output untuk PTP Hardware Clock:NUMBER

      Contoh output ini menunjukkan PTP Hardware Clock: 1, yang sesuai dengan /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. Tambahkan kode berikut ke file konfigurasi chrony, /etc/chrony.conf. File hanya boleh berisi konfigurasi berikut. Pastikan Anda menghapus atau menimpa konten file yang sudah ada.

    Output ethtool di langkah sebelumnya menunjukkan bahwa enp22s0f0 menggunakan /dev/ptp1. Contoh berikut menyinkronkan jam sistem ke jam NIC fisik yang sesuai untuk enp22s0f0 dengan menentukan: 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. Untuk menerapkan konfigurasi, mulai ulang chrony dengan menjalankan perintah berikut:

    systemctl restart chronyd
    

chrony mencatat statistik sinkronisasi jam ke /var/log/chrony/tracking.log menggunakan jam hardware PTP yang dipilih sebagai sumber waktu.

Konfigurasi DPDK

Untuk mengonfigurasi chrony versi 4.6.1 dan yang lebih lama di instance U4C yang menggunakan DPDK, lakukan hal berikut:

  1. Dapatkan nomor indeks perangkat PHC yang terkait dengan vNIC nic0 Anda.

    ethtool -T NIC0
    

    Ganti NIC0 dengan nama yang sesuai yang Anda dapatkan sebelumnya, seperti enp22s0f0. Jika perlu, lihat Mendapatkan nama antarmuka jaringan.

    1. Tinjau output untuk PTP Hardware Clock:NUMBER

      Contoh output ini menunjukkan PTP Hardware Clock: 0, yang sesuai dengan /dev/ptp0.

      Time stamping parameters for enp22s0f0:
      Capabilities:
            hardware-receive
            software-receive
            software-system-clock
            hardware-raw-clock
      PTP Hardware Clock: 0
      Hardware Transmit Timestamp Modes:
            off
      Hardware Receive Filter Modes:
            none
            all
      
  2. Tambahkan kode berikut ke file konfigurasi chrony, /etc/chrony.conf. File hanya boleh berisi konfigurasi berikut. Pastikan Anda menghapus atau menimpa konten file yang sudah ada.

    Output ethtool di langkah sebelumnya menunjukkan bahwa enp22s0f0 menggunakan /dev/ptp0. Contoh berikut menyinkronkan clock sistem ke clock NIC fisik yang sesuai untuk enp22s0f0 dengan menentukan: refclock PHC /dev/ptp0: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 the nic0 interface clock for tracking and select it as the source.
    # If nic0 uses a PHC index other than 0 (such as /dev/ptp1), replace /dev/ptp0.
    refclock PHC /dev/ptp0:nocrossts poll -1
    
    # 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
  3. Untuk menerapkan konfigurasi, mulai ulang chrony dengan menjalankan perintah berikut:

    systemctl restart chronyd
    

chrony mencatat statistik sinkronisasi jam ke /var/log/chrony/tracking.log menggunakan jam hardware PTP yang dipilih sebagai sumber waktu.

Mengonfigurasi chrony 4.7 dan yang lebih baru di instance U4S

Sebaiknya gunakan chrony versi 4.7 dan yang lebih baru untuk instance U4S. Menggunakan versi sebelumnya dapat menyebabkan sering terjadi error karena perangkat sinkronisasi jam Compute Engine untuk instance virtual machine (VM) (ptp_kvm) dapat menyebabkan perubahan pada nomor indeks perangkat jam hardware PTP (PHC).

Contoh konfigurasi untuk instance U4S ini mirip dengan yang digunakan untuk instance U4P dan U4C, tetapi memiliki perbedaan berikut:

  • Contoh ini mencakup satu vNIC. Instance U4S dapat memiliki beberapa vNIC, tetapi semua vNIC didukung oleh NIC fisik yang sama dan mengakses clock NIC fisik yang sama.
  • Precision Time Measurement (PTM) tidak tersedia.

Untuk mengonfigurasi chrony versi 4.7 dan yang lebih baru di instance U4S, lakukan hal berikut:

  1. Tambahkan kode berikut ke file konfigurasi chrony, /etc/chrony.conf. File tersebut hanya boleh berisi konfigurasi berikut. Pastikan Anda menghapus atau menimpa konten file yang sudah ada.

    # 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

    Ganti NIC0 dengan nama yang sesuai yang Anda dapatkan sebelumnya, seperti enp22s0f0. Jika perlu, lihat Mendapatkan nama antarmuka jaringan.

  2. Untuk menerapkan konfigurasi, mulai ulang chrony dengan menjalankan perintah berikut:

    systemctl restart chronyd
    

    chrony mencatat statistik sinkronisasi jam ke /var/log/chrony/tracking.log menggunakan jam hardware PTP NIC0 sebagai sumber waktu.

Memverifikasi konfigurasi chrony

Untuk memverifikasi bahwa chrony dikonfigurasi dengan benar, jalankan perintah berikut:

chronyc sourcestats

Konfigurasi yang berhasil akan menghasilkan output yang mirip dengan berikut ini:

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

Jika perintah menampilkan output yang tidak diharapkan, lihat Memecahkan masalah.

Mengubah konfigurasi chrony

Jika ingin mengubah NIC fisik yang digunakan untuk menyinkronkan clock sistem instance Anda, Anda dapat memperbarui konfigurasi sebagai berikut:

  1. Hapus noselect dari baris yang menyertakan nama vNIC yang ingin Anda gunakan untuk jam NIC fisik yang sesuai.
  2. Tambahkan noselect ke baris yang menyertakan nama vNIC yang ingin Anda hentikan penggunaan jam NIC fisik yang sesuai.
  3. Terapkan konfigurasi baru dengan memulai ulang chronyd: systemctl restart chronyd.

Memantau sinkronisasi waktu

Bagian ini menjelaskan metrik yang tersedia untuk sinkronisasi waktu dan cara menggunakannya untuk memantau akurasi sinkronisasi waktu.

Metrik yang tersedia untuk sinkronisasi waktu

Anda dapat menggunakan metrik berikut untuk memantau sinkronisasi waktu:

Pengukuran Metrik dan deskripsi yang tersedia
Jam sistem instance ke jam NIC fisik logging.googleapis.com/user/phc-clock-max-error

Metrik ini mengukur akurasi sinkronisasi jam sistem instance dengan jam NIC fisik di server host-nya.

Anda harus mengonfigurasi metrik ini dengan mengumpulkannya dari Agen Operasional dan membuat metrik berbasis log seperti yang dijelaskan dalam Mengonfigurasi metrik kustom untuk jam sistem instance, yang juga membuat dasbor kustom. Selain itu, Anda dapat menggunakan metrik ini dalam prosedur yang dijelaskan di Menggunakan metrik Cloud Monitoring.

Jam NIC fisik ke UTC compute.googleapis.com/instance/time/firefly_utc_traceable_uncertainty

Metrik ini menunjukkan batas error maksimum jam NIC fisik dibandingkan dengan waktu UTC yang sebenarnya. Metrik ini otomatis dilaporkan ke Cloud Monitoring.

Anda dapat melihat metrik ini, menentukan kebijakan pemberitahuan, dan membuat dasbor kustom seperti yang dijelaskan dalam Menggunakan metrik Cloud Monitoring. Metrik ini juga disertakan di dasbor yang dibuat oleh skrip di Mengonfigurasi metrik kustom untuk jam sistem instance.

Status kondisi umum jam NIC fisik compute.googleapis.com/instance/time/firefly_nic_sync_healthy

Metrik boolean ini menunjukkan status kondisi umum jam NIC fisik, termasuk sinkronisasi NIC-ke-NIC dan NIC-ke-UTC. Secara otomatis dilaporkan ke Cloud Monitoring.

Anda dapat melihat metrik ini, menentukan kebijakan pemberitahuan, dan membuat dasbor kustom seperti yang dijelaskan dalam Menggunakan metrik Cloud Monitoring.

Untuk mengetahui informasi tentang jangka waktu Cloud Monitoring menyimpan data metrik, lihat Retensi data di Kuota dan batas Cloud Monitoring. Untuk mengetahui informasi tentang cara mengekspor metrik untuk analisis jangka panjang, lihat Ekspor metrik Cloud Monitoring dalam dokumentasi Cloud Architecture Center.

Mengonfigurasi metrik kustom untuk jam sistem instance

Bagian ini memberikan contoh konfigurasi pemantauan yang melakukan hal berikut:

  • Mengonfigurasi Agen Operasional untuk mengumpulkan log chrony guna akurasi sinkronisasi dari instance Anda
  • Mengonfigurasi Cloud Monitoring untuk menyerap log yang sesuai dari semua instance di project Anda sebagai metrik berbasis log

Mengonfigurasi Agen Operasional Google Cloud di instance Anda

Untuk mengonfigurasi Agen Operasional agar mengumpulkan metrik yang diperlukan untuk pemantauan, lakukan hal berikut:

  1. Instal Agen Operasional di instance Anda, jika Anda belum melakukannya.

  2. Tambahkan konfigurasi berikut ke file /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. Mulai ulang Agen Operasional dengan menjalankan perintah berikut:

    systemctl restart google-cloud-ops-agent
    

Mengonfigurasi metrik dan dasbor berbasis log di project Anda

Untuk mengonfigurasi pemantauan sinkronisasi waktu untuk instance di project Anda, jalankan skrip penyiapan logging dan dasbor berikut. Skrip ini membantu Anda menyelesaikan tugas-tugas berikut:

  • Hal ini menetapkan izin yang sesuai pada akun layanan yang terkait dengan project instance Anda. Skrip ini mengasumsikan bahwa akun layanan yang digunakan untuk instance adalah akun layanan default untuk project. Jika diperlukan, ganti SERVICE_ACCOUNT_EMAIL dengan nilai yang berbeda.
  • Agen ini membuat metrik berbasis log yang mengukur akurasi sinkronisasi waktu antara jam sistem instance dan jam NIC fisik di server host instance.
  • Tindakan ini akan membuat dasbor yang menampilkan akurasi sinkronisasi waktu individual dan gabungan untuk instance Anda berdasarkan metrik berbasis log kustom dan metrik Firefly yang tersedia.

Untuk menyelesaikan tugas sebelumnya, jalankan skrip berikut. Setelah skrip selesai berjalan, gunakan dasbor yang dibuatnya untuk melihat data akurasi clock untuk instance project Anda.

#!/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

Menggunakan metrik Cloud Monitoring

Bagian berikut menjelaskan cara menggunakan metrik Cloud Monitoring. Anda dapat menggunakan setiap metrik yang tersedia untuk sinkronisasi waktu di bagian berikut.

Selain konsol Google Cloud , Anda dapat membuat dasbor kustom, menyiapkan pemberitahuan, dan membuat kueri metrik melalui Monitoring API.

Melihat metrik di Monitoring

Bagian ini menjelaskan cara melihat metrik di Monitoring.

Konsol

Untuk melihat metrik untuk resource yang dimonitor menggunakan Metrics Explorer, lakukan langkah berikut:

  1. Di konsol Google Cloud , buka halaman  Metrics explorer:

    Buka Metrics explorer

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.

  2. Di toolbar konsol Google Cloud , pilih project Google Cloud Anda. Untuk konfigurasi App Hub, pilih project host App Hub atau project pengelolaan folder khusus aplikasi.
  3. Pada elemen Metrik, luaskan menu Pilih metrik, masukkan VM instance di panel filter, lalu gunakan submenu untuk memilih jenis dan metrik resource tertentu:
    1. Di menu Active resources, pilih VM instance.
    2. Untuk memilih metrik, gunakan menu Kategori metrik aktif dan Metrik aktif. Untuk mengetahui daftar metrik yang tersedia, lihat Metrik yang tersedia untuk sinkronisasi waktu.
    3. Klik Terapkan.
  4. Untuk menambahkan filter, yang menghapus deret waktu dari hasil kueri, gunakan elemen Filter.

  5. Konfigurasi cara data dilihat. Secara default, tampilan menggabungkan metrik dari semua instance dan NIC fisik. Untuk menampilkan metrik per NIC, per instance, lakukan hal berikut: di elemen Aggregation, pilih Unaggregated.

    Untuk informasi selengkapnya tentang cara mengonfigurasi diagram, lihat Memilih metrik saat menggunakan Metrics Explorer.

Menentukan kebijakan pemberitahuan

Bagian ini menjelaskan cara menentukan kebijakan pemberitahuan.

Saat mengonfigurasi cara Monitoring mengevaluasi kondisi saat data berhenti masuk, sebaiknya pilih opsi Titik data yang hilang diperlakukan sebagai nilai yang melanggar kondisi kebijakan, yang membantu menangkap kehilangan data tanpa peringatan. Namun, setelan ini menyebabkan pemberitahuan positif palsu saat instance dihapus.

Konsol

Anda dapat membuat kebijakan pemberitahuan untuk memantau nilai metrik dan memberi tahu Anda saat metrik tersebut melanggar ketentuan.

  1. Di konsol Google Cloud , buka halaman  Pemberitahuan:

    Buka Pemberitahuan

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.

  2. Jika Anda belum membuat saluran notifikasi dan ingin menerima notifikasi, klik Edit Saluran Notifikasi dan tambahkan saluran notifikasi Anda. Kembali ke halaman Pemberitahuan setelah menambahkan saluran.
  3. Dari halaman Pemberitahuan, pilih Buat kebijakan.
  4. Untuk memilih metrik, luaskan menu Pilih metrik, lalu lakukan tindakan berikut:
    1. Untuk membatasi menu pada entri yang relevan, masukkan VM Instance ke kolom filter. Jika tidak ada hasil setelah memfilter menu, nonaktifkan tombol Hanya tampilkan resource & metrik aktif.
    2. Untuk Jenis resource, pilih Instance VM.
    3. Untuk Metric category, pilih Instance.
    4. Untuk Metrik, pilih metrik dari daftar di Metrik yang tersedia untuk sinkronisasi waktu.
    5. Pilih Apply.
  5. Klik Berikutnya.
  6. Setelan di halaman Konfigurasi pemicu notifikasi menentukan kapan notifikasi dipicu. Pilih jenis kondisi dan, jika perlu, tentukan batasnya. Untuk mengetahui informasi selengkapnya, lihat Membuat kebijakan pemberitahuan batas metrik.
  7. Klik Berikutnya.
  8. Opsional: Untuk menambahkan notifikasi ke kebijakan pemberitahuan, klik Saluran notifikasi. Di dialog ini, pilih satu atau beberapa saluran notifikasi dari menu, lalu klik Oke.
  9. Opsional: Perbarui Alert autoclose duration. Kolom ini menentukan kapan Monitoring akan menutup pemberitahuan jika data metrik tidak ada.
  10. Opsional: Klik Dokumentasi, lalu tambahkan informasi apa pun yang ingin Anda sertakan dalam pesan notifikasi.
  11. Klik Nama pemberitahuan dan masukkan nama untuk kebijakan pemberitahuan itu.
  12. Klik Buat Kebijakan.
Untuk mengetahui informasi selengkapnya, lihat Ringkasan pemberitahuan.

Membuat dasbor Monitoring kustom

Bagian ini menjelaskan cara membuat dasbor kustom. Untuk contoh spesifik yang menggunakan kueri PromQL, lihat Contoh: Membuat dasbor kustom yang menggabungkan metrik akurasi.

Konsol

  1. Di konsol Google Cloud , buka halaman  Dashboards:

    Buka Dashboards

    Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.

  2. Klik Create dashboard
  3. Opsional: Perbarui judul dasbor dengan nama deskriptif untuk dasbor Anda.
  4. Untuk setiap widget yang ingin Anda tambahkan ke dasbor, klik Add widget, lengkapi dialog, lalu pilih Apply.

    Untuk mengetahui informasi selengkapnya tentang cara menambahkan widget, lihat halaman berikut:

Contoh: Membuat dasbor kustom yang menggabungkan metrik akurasi

Monitoring memungkinkan Anda membuat dasbor kustom. Dasbor dapat menggunakan salah satu metrik yang tersedia untuk sinkronisasi waktu.

Bagian ini berisi contoh kueri PromQL yang dapat Anda tempelkan ke dasbor Monitoring kustom. Untuk mengetahui informasi selengkapnya tentang PromQL, lihat PromQL untuk Cloud Monitoring.

Kueri di bagian ini menghasilkan metrik akurasi total dengan menggabungkan hal berikut:

  • metrik yang mengukur akurasi jam sistem instance terhadap jam NIC fisik (phc-clock-max-error)
  • metrik yang mengukur akurasi clock NIC fisik ke UTC (firefly_utc_traceable_uncertainty)

Konsol

  1. Ikuti langkah-langkah untuk Mengakses editor kode untuk PromQL.

  2. Masukkan kueri berikut di kolom teks:

    (
      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. Klik Run Query.

Untuk mengetahui informasi selengkapnya tentang cara menggunakan editor dan menyimpan diagram, lihat Menggunakan editor kode untuk PromQL.

Memecahkan masalah

Anda mungkin menerima output yang tidak terduga saat memverifikasi konfigurasi chrony, seperti output berikut yang menunjukkan bahwa chrony gagal dimulai:

506 Cannot talk to daemon

Untuk membantu memecahkan masalah, periksa log journald untuk chrony:

journalctl -u chronyd.service

Contoh output berikut menunjukkan error yang terjadi jika Anda menerapkan konfigurasi yang ditujukan untuk chrony 4.7 dan yang lebih baru, sementara versi chrony yang lebih lama diinstal di instance Anda.

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.

Masalah umum

Masalah umum berikut mungkin terjadi saat mengonfigurasi waktu yang akurat untuk instance U4:

  • Metrik akurasi hanya dilaporkan untuk antarmuka jaringan yang trafficnya tidak nol selama masa aktif instance. Untuk mengatasi masalah ini, Anda dapat menggunakan nic0 sebagai sumber clock untuk sinkronisasi guna membantu memastikan telemetri. Atau, pastikan ada traffic di semua antarmuka jaringan.