Memantau data deret waktu dengan OpenTSDB di Bigtable dan GKE

Last reviewed 2022-01-12 UTC

Panduan ini menjelaskan cara mengumpulkan, merekam, dan memantau data deret waktu di Google Cloud dengan menggunakanOpenTSDB yang berjalan pada Google Kubernetes Engine (GKE) dan Bigtable.

Data deret waktu adalah aset sangat berharga yang dapat Anda gunakan untuk berbagai aplikasi, termasuk tren, pemantauan, dan machine learning. Anda dapat menghasilkan data deret waktu dari infrastruktur server, kode aplikasi, dan sumber lainnya. OpenTSDB dapat mengumpulkan dan menyimpan data deret waktu dalam jumlah besar dengan tingkat perincian yang tinggi.

Panduan ini menunjukkan software engineer dan arsitek cara membuat lapisan koleksi yang skalabel untuk data deret waktu menggunakan GKE. Bagian ini juga menunjukkan cara menangani data yang dikumpulkan menggunakan Bigtable. Panduan ini mengasumsikan bahwa Anda sudah memahami Kubernetes dan Bigtable.

Diagram berikut menunjukkan arsitektur tingkat tinggi dari panduan ini:

Sumber data deret waktu yang disimpan di Bigtable.

Diagram sebelumnya menunjukkan beberapa sumber data deret waktu, seperti peristiwa IoT dan metrik sistem, yang disimpan di Bigtable menggunakan OpenTSDB yang di-deploy di GKE.

Tujuan

  • Bangun image container yang digunakan dalam panduan ini menggunakan Cloud Build.
  • Kelola image container ini menggunakan Artifact Registry.
  • Membuat instance Bigtable.
  • Membuat cluster GKE.
  • Deploy OpenTSDB ke cluster GKE Anda.
  • Mengirim metrik deret waktu ke OpenTSDB.
  • Visualisasikan metrik menggunakan OpenTSDB dan Grafana.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Bigtable, Bigtable Admin, GKE, Compute Engine, Cloud Build, and Artifact Registry APIs.

    Enable the APIs

  4. Di konsol Google Cloud, buka halaman Welcome.

    Buka Halaman sambutan

    Catat project ID karena akan digunakan di langkah selanjutnya.

  5. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

Membuat instance Bigtable

Panduan ini menggunakan Bigtable untuk menyimpan data deret waktu yang Anda kumpulkan, sehingga Anda harus membuat instance Bigtable.

Bigtable adalah penyimpanan kunci/kolom lebar yang berfungsi dengan baik untuk data deret waktu. Bigtable mendukung HBase API, sehingga Anda dapat menggunakan software yang dirancang agar berfungsi dengan Apache HBase, seperti OpenTSDB. Untuk mengetahui informasi selengkapnya tentang skema HBase yang digunakan oleh OpenTSDB, lihat Skema HBase.

Komponen utama OpenTSDB adalah klien AsyncHBase, yang memungkinkan Anda menulis massal ke HBase dengan cara yang sepenuhnya asinkron, tidak memblokir, dan aman untuk thread. Saat Anda menggunakan OpenTSDB dengan Bigtable, AsyncHBase diterapkan sebagai klien AsyncBigtable.

Panduan ini menggunakan instance Bigtable dengan cluster node tunggal. Saat beralih ke lingkungan produksi, pertimbangkan untuk menggunakan instance Bigtable dengan cluster yang lebih besar. Untuk mengetahui informasi selengkapnya tentang memilih ukuran cluster, lihat Memahami performa Bigtable.

  1. Di Cloud Shell, tetapkan variabel lingkungan untuk zona Google Cloud tempat Anda akan membuat cluster Bigtable dan cluster GKE serta ID instance untuk cluster Bigtable Anda:

    export BIGTABLE_INSTANCE_ID=BIGTABLE_INSTANCE_ID
    export ZONE=ZONE
    

    Ganti kode berikut:

    • BIGTABLE_INSTANCE_ID: ID untuk instance Bigtable Anda.
    • ZONE: Zona tempat cluster Bigtable dan cluster GKE akan dibuat.

    Perintah akan terlihat seperti contoh berikut:

    export BIGTABLE_INSTANCE_ID=bt-opentsdb
    export ZONE=us-central1-f
    
  2. Buat instance Bigtable:

    gcloud bigtable instances create ${BIGTABLE_INSTANCE_ID} \
        --cluster-config=id=${BIGTABLE_INSTANCE_ID}-${ZONE},zone=${ZONE},nodes=1 \
        --display-name=OpenTSDB
    

Membuat image yang digunakan untuk men-deploy dan menguji OpenTSDB

Untuk men-deploy dan mendemonstrasikan OpenTSDB dengan backend penyimpanan Bigtable, panduan ini menggunakan serangkaian image container Docker yang di-deploy ke GKE. Anda membangun beberapa image ini menggunakan kode dari repositori GitHub yang menyertainya dengan Cloud Build. Saat men-deploy infrastruktur ke GKE, repositori container digunakan. Dalam panduan ini, Anda akan menggunakan Artifact Registry untuk mengelola image container ini.

  1. Di Cloud Shell, tetapkan variabel lingkungan untuk zona Google Cloud tempat Anda akan membuat repositori Artifact Registry:

    export PROJECT_ID=PROJECT_ID
    export REGION=REGION
    export AR_REPO=AR_REPO
    

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda
    • REGION: Region tempat repositori Artifact Registry akan dibuat
    • AR_REPO: Nama repositori Artifact Registry Anda

    Perintah akan terlihat seperti contoh berikut:

    export PROJECT_ID=bt-opentsdb-project-id
    export REGION=us-central1
    export AR_REPO=opentsdb-bt-repo
    
  2. Buat repositori Artifact Registry:

    gcloud artifacts repositories create ${AR_REPO} \
        --repository-format=docker  \
        --location=${REGION} \
        --description="OpenTSDB on bigtable container images"
    

Membuat dan mengelola image yang digunakan untuk men-deploy dan mendemonstrasikan OpenTSDB

Dua image container Docker digunakan dalam panduan ini. Gambar pertama digunakan untuk dua tujuan: melakukan penyiapan database Bigtable satu kali untuk OpenTSDB, dan men-deploy container layanan baca dan tulis untuk deployment OpenTSDB. Gambar kedua digunakan untuk menghasilkan data metrik sampel guna menunjukkan deployment OpenTSDB Anda.

Saat mengirim tugas build image container ke Cloud Build, Anda memberi tag pada image sehingga disimpan di Artifact Registry setelah dibangun.

  1. Di Cloud Shell, clone repositori GitHub yang berisi kode yang menyertainya:

    git clone https://github.com/GoogleCloudPlatform/opentsdb-bigtable.git
    
  2. Buka direktori kode contoh:

    cd opentsdb-bigtable
    
  3. Setel variabel lingkungan untuk image server OpenTSDB yang menggunakan Bigtable sebagai backend penyimpanan:

    export SERVER_IMAGE_NAME=opentsdb-server-bigtable
    export SERVER_IMAGE_TAG=2.4.1
    
  4. Bangun image menggunakan Cloud Build:

    gcloud builds submit \
        --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO}/${SERVER_IMAGE_NAME}:${SERVER_IMAGE_TAG} \
        build
    

    Karena Anda telah memberi tag pada image dengan tepat, setelah build selesai, image akan dikelola oleh repositori Artifact Registry Anda.

  5. Tetapkan variabel lingkungan untuk gambar pembuatan data deret waktu demonstrasi:

    export GEN_IMAGE_NAME=opentsdb-timeseries-generate
    export GEN_IMAGE_TAG=0.1
    
  6. Bangun image menggunakan Cloud Build:

    cd generate-ts
    ./build-cloud.sh
    cd ..
    

Membuat cluster GKE

GKE menyediakan lingkungan Kubernetes yang terkelola. Setelah membuat cluster GKE, Anda dapat men-deploy Pod Kubernetes ke cluster tersebut. Panduan ini menggunakan Pod GKE dan Kubernetes untuk menjalankan OpenTSDB.

OpenTSDB memisahkan penyimpanannya dari lapisan aplikasinya, sehingga dapat di-deploy secara bersamaan ke beberapa instance. Dengan berjalan secara paralel, OpenTSDB dapat menangani data deret waktu dalam jumlah besar.

  1. Di Cloud Shell, tetapkan variabel lingkungan untuk zona Google Cloud tempat Anda akan membuat cluster Bigtable dan cluster GKE serta nama, jenis node, dan versi untuk cluster GKE Anda:

    export GKE_CLUSTER_NAME=GKE_CLUSTER_NAME
    export GKE_VERSION=1.20
    export GKE_NODE_TYPE=n1-standard-4
    

    Ganti GKE_CLUSTER_NAME dengan nama cluster GKE Anda.

    Perintah akan terlihat seperti contoh berikut:

    export GKE_CLUSTER_NAME=gke-opentsdb
    export GKE_VERSION=1.20
    export GKE_NODE_TYPE=n1-standard-4
    
  2. Membuat cluster GKE:

    gcloud container clusters create ${GKE_CLUSTER_NAME} \
        --zone=${ZONE} \
        --cluster-version=${GKE_VERSION} \
        --machine-type ${GKE_NODE_TYPE} \
        --scopes "https://www.googleapis.com/auth/cloud-platform"
    

    Operasi ini dapat memerlukan waktu hingga beberapa menit untuk selesai. Dengan menambahkan cakupan ke cluster GKE, container OpenTSDB dapat berinteraksi dengan Bigtable dan Container Registry.

    Bagian selanjutnya dari panduan ini menggunakan container yang baru saja Anda bangun dan dikelola oleh Artifact Registry. Skrip Dockerfile dan entrypoint yang digunakan untuk membangun container terletak di folder build dari repositori panduan.

  3. Dapatkan kredensial agar Anda dapat terhubung ke cluster GKE:

    gcloud container clusters get-credentials ${GKE_CLUSTER_NAME} --zone ${ZONE}
    

Membuat ConfigMap dengan detail konfigurasi

Kubernetes menggunakan ConfigMap untuk memisahkan detail konfigurasi dari image container agar aplikasi lebih portabel. Konfigurasi untuk OpenTSDB ditentukan dalam file opentsdb.conf. ConfigMap yang berisi file opentsdb.conf disertakan dengan kode contoh.

Pada langkah ini dan berikutnya, Anda menggunakan utilitas GNU envsubst untuk mengganti placeholder variabel lingkungan dalam file template YAML akan nilai masing-masing untuk deployment Anda.

  • Buat ConfigMap dari file opentsdb-config.yaml yang diupdate:

    envsubst < configmaps/opentsdb-config.yaml.tpl | kubectl create -f -
    

Membuat tabel OpenTSDB di Bigtable

Sebelum dapat membaca atau menulis data menggunakan OpenTSDB, Anda perlu membuat tabel di Bigtable untuk menyimpan data tersebut. Untuk membuat tabel, Anda akan membuat tugas Kubernetes.

  1. Di Cloud Shell, luncurkan tugas:

    envsubst < jobs/opentsdb-init.yaml.tpl | kubectl create -f -
    

    Tugas dapat memerlukan waktu hingga satu menit atau lebih untuk diselesaikan. Verifikasi bahwa pekerjaan telah berhasil diselesaikan:

    kubectl describe jobs
    

    Output menunjukkan bahwa satu tugas telah berhasil saat Pods Statuses menampilkan 1 Succeeded

  2. Periksa log tugas pembuatan tabel:

    OPENTSDB_INIT_POD=$(kubectl get pods --selector=job-name=opentsdb-init \
                        --output=jsonpath={.items..metadata.name})
    kubectl logs $OPENTSDB_INIT_POD
    

    Outputnya mirip dengan hal berikut ini:

    create 'tsdb-uid',
      {NAME => 'id', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'},
      {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}
    0 row(s) in 3.2730 seconds
    
    create 'tsdb',
      {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}
    0 row(s) in 1.8440 seconds
    
    create 'tsdb-tree',
      {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}
    0 row(s) in 1.5420 seconds
    
    create 'tsdb-meta',
      {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}
    0 row(s) in 1.9910 seconds
    

    Output mencantumkan setiap tabel yang dibuat. Tugas ini menjalankan beberapa perintah pembuatan tabel, masing-masing menggunakan format create TABLE_NAME. Tabel berhasil dibuat saat Anda memiliki output dalam bentuk 0 row(s) in TIME seconds.

    • TABLE_NAME: nama tabel yang dibuat oleh tugas
    • TIME: jumlah waktu yang diperlukan untuk membuat tabel

Model data

Tabel yang Anda buat menyimpan titik data dari OpenTSDB. Di langkah selanjutnya, Anda akan menulis data deret waktu ke dalam tabel-tabel ini. Titik data deret waktu diatur dan disimpan sebagai berikut:

Kolom Diperlukan Deskripsi Contoh
metric Diperlukan Item yang sedang diukur—kunci default sys.cpu.user
timestamp Diperlukan Waktu pengukuran Unix epoch 1497561091
tags Harus ada setidaknya satu tag Memenuhi syarat pengukuran untuk tujuan kueri hostname=www cpu=0 env=prod
value Diperlukan Nilai pengukuran 89.3

Metrik, stempel waktu, dan tag (kunci tag dan nilai tag) membentuk row key. Stempel waktu dinormalisasi ke satu jam, untuk memastikan bahwa baris tidak berisi terlalu banyak titik data. Untuk mengetahui informasi selengkapnya, lihat Skema HBase.

Men-deploy OpenTSDB

Diagram berikut menunjukkan arsitektur deployment untuk OpenTSTB dengan layanannya yang berjalan di GKE dan dengan Bigtable sebagai backend penyimpanan:

Dua deployment Kubernetes OpenTSDB.

Panduan ini menggunakan dua deployment Kubernetes OpenTSDB: satu deployment mengirim metrik ke Bigtable dan yang lainnya membaca metrik tersebut. Penggunaan dua deployment akan mencegah operasi baca dan tulis yang berjalan lama saling memblokir. Pod di setiap deployment menggunakan image container yang sama. OpenTSDB menyediakan daemon bernama tsd yang berjalan di setiap container. Satu proses tsd dapat menangani throughput peristiwa yang tinggi per detik. Untuk mendistribusikan beban, setiap deployment dalam panduan ini akan membuat tiga replika Pod baca dan tulis.

  1. Di Cloud Shell, buat deployment untuk menulis metrik:

    envsubst < deployments/opentsdb-write.yaml.tpl | kubectl create -f  -
    

    Informasi konfigurasi untuk deployment tulis terdapat dalam file opentsdb-write.yaml.tpl di folder deployments pada repositori panduan.

  2. Buat deployment untuk metrik pembacaan:

    envsubst < deployments/opentsdb-read.yaml.tpl | kubectl create -f  -
    

    Informasi konfigurasi untuk deployment pembaca ada dalam file opentsdb-read.yaml.tpl di folder deployments pada repositori panduan.

Dalam deployment produksi, Anda dapat meningkatkan jumlah Pod tsd yang berjalan, baik secara manual maupun dengan menggunakan penskalaan otomatis di Kubernetes. Demikian pula, Anda dapat meningkatkan jumlah instance di cluster GKE secara manual atau dengan menggunakan autoscaling cluster.

Membuat layanan OpenTSDB

Untuk menyediakan konektivitas jaringan yang konsisten ke deployment, Anda membuat dua layanan Kubernetes: satu layanan menulis metrik ke OpenTSDB dan yang lainnya membaca.

  1. Di Cloud Shell, buat layanan untuk menulis metrik:

    kubectl create -f services/opentsdb-write.yaml
    

    Informasi konfigurasi untuk layanan penulisan metrik terdapat dalam file opentsdb-write.yaml dalam folder services dari repositori panduan. Layanan ini dibuat di dalam cluster Kubernetes Anda dan dapat dijangkau oleh layanan lain yang berjalan di cluster Anda.

  2. Buat layanan untuk metrik pembacaan:

    kubectl create -f services/opentsdb-read.yaml
    

    Informasi konfigurasi untuk layanan pembacaan metrik dimuat dalam file opentsdb-read.yaml di folder services repositori panduan.

Menulis data deret waktu ke OpenTSDB

Ada beberapa mekanisme untuk menulis data ke dalam OpenTSDB. Setelah menentukan endpoint layanan, Anda dapat mengarahkan proses untuk mulai menulis data ke proses tersebut. Panduan ini men-deploy layanan Python yang memunculkan data deret waktu demonstratif untuk dua metrik: Penggunaan Memori Cluster (memory_usage_gauge) dan Pemakaian CPU Cluster (cpu_node_utilization_gauge).

  • Di Cloud Shell, deploy generator metrik deret waktu ke cluster Anda:

    envsubst < deployments/generate.yaml.tpl | kubectl create -f -
    

Memeriksa contoh data deret waktu dengan OpenTSDB

Anda dapat membuat kueri metrik deret waktu menggunakan endpoint layanan opentsdb-read yang telah Anda deploy sebelumnya dalam panduan ini. Anda dapat menggunakan data dengan berbagai cara. Salah satu opsi umum adalah memvisualisasikannya. OpenTSDB menyertakan antarmuka dasar untuk memvisualisasikan metrik yang dikumpulkannya. Panduan ini menggunakan Grafana, alternatif populer untuk memvisualisasikan metrik yang menyediakan fungsi tambahan.

Menjalankan Grafana di cluster Anda memerlukan proses serupa yang digunakan untuk menyiapkan OpenTSDB. Selain membuat ConfigMap dan deployment, Anda juga perlu mengonfigurasi penerusan port agar dapat mengakses Grafana saat Grafana sedang berjalan di cluster Kubernetes Anda.

  1. Di Cloud Shell, buat Grafana ConfigMap menggunakan informasi konfigurasi dalam file grafana.yaml di folder configmaps repositori panduan:

    kubectl create -f configmaps/grafana.yaml
    
  2. Buat deployment Grafana menggunakan informasi konfigurasi dalam file grafana.yaml di folder deployments dari repositori panduan:

    kubectl create -f deployments/grafana.yaml
    
  3. Dapatkan nama Pod Grafana di cluster dan gunakan untuk menyiapkan penerusan port:

    GRAFANA_PODS=$(kubectl get pods --selector=app=grafana \
                   --output=jsonpath={.items..metadata.name})
    kubectl port-forward $GRAFANA_PODS 8080:3000
    

    Verifikasi bahwa penerusan berhasil. Outputnya mirip dengan hal berikut ini:

    Forwarding from 127.0.0.1:8080 -> 3000
    
  4. Untuk terhubung ke antarmuka web Grafana, di Cloud Shell, klik Web Preview, lalu pilih Preview on port 8080.

    Untuk mengetahui informasi selengkapnya, lihat Menggunakan pratinjau web.

    Tab browser baru akan terbuka dan terhubung ke antarmuka web Grafana. Setelah beberapa saat, browser akan menampilkan grafik seperti berikut:

    Grafik garis yang menunjukkan metrik cluster.

    Deployment Grafana ini telah disesuaikan untuk panduan ini. File configmaps/grafana.yaml dan deployments/grafana.yaml mengonfigurasi Grafana agar terhubung ke layanan opentsdb-read, mengizinkan autentikasi anonim, dan menampilkan beberapa metrik cluster dasar. Untuk deployment Grafana dalam lingkungan produksi, sebaiknya terapkan mekanisme autentikasi yang tepat dan gunakan grafik deret waktu yang lebih beragam.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus resource satu per satu

  1. Hapus cluster Kubernetes untuk menghapus semua artefak yang Anda buat:

    gcloud container clusters delete GKE_CLUSTER_NAME
    

    Untuk menghapus cluster Kubernetes, konfirmasi dengan mengetik Y.

  2. Untuk menghapus instance Bigtable, lakukan langkah berikut:

    1. Di konsol Google Cloud, buka Bigtable.

      Buka Bigtable

    2. Pilih instance yang sebelumnya Anda buat, lalu klik Hapus instance.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya