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:
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.
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
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Bigtable, Bigtable Admin, GKE, Compute Engine, Cloud Build, and Artifact Registry APIs.
Di konsol Google Cloud, buka halaman Welcome.
Catat project ID karena akan digunakan di langkah selanjutnya.
-
Di konsol Google Cloud, 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.
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
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.
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 AndaREGION
: Region tempat repositori Artifact Registry akan dibuatAR_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
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.
Di Cloud Shell, clone repositori GitHub yang berisi kode yang menyertainya:
git clone https://github.com/GoogleCloudPlatform/opentsdb-bigtable.git
Buka direktori kode contoh:
cd opentsdb-bigtable
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
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.
Tetapkan variabel lingkungan untuk gambar pembuatan data deret waktu demonstrasi:
export GEN_IMAGE_NAME=opentsdb-timeseries-generate export GEN_IMAGE_TAG=0.1
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.
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
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 folderbuild
dari repositori panduan.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.
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
menampilkan1 Succeeded
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 bentuk0 row(s) in TIME seconds
.TABLE_NAME
: nama tabel yang dibuat oleh tugasTIME
: 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:
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.
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 folderdeployments
pada repositori panduan.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 folderdeployments
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.
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 folderservices
dari repositori panduan. Layanan ini dibuat di dalam cluster Kubernetes Anda dan dapat dijangkau oleh layanan lain yang berjalan di cluster Anda.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 folderservices
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.
Di Cloud Shell, buat Grafana ConfigMap menggunakan informasi konfigurasi dalam file
grafana.yaml
di folderconfigmaps
repositori panduan:kubectl create -f configmaps/grafana.yaml
Buat deployment Grafana menggunakan informasi konfigurasi dalam file
grafana.yaml
di folderdeployments
dari repositori panduan:kubectl create -f deployments/grafana.yaml
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
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:
Deployment Grafana ini telah disesuaikan untuk panduan ini. File
configmaps/grafana.yaml
dandeployments/grafana.yaml
mengonfigurasi Grafana agar terhubung ke layananopentsdb-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
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
.Untuk menghapus instance Bigtable, lakukan langkah berikut:
Di konsol Google Cloud, buka Bigtable.
Pilih instance yang sebelumnya Anda buat, lalu klik Hapus instance.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Untuk mempelajari cara meningkatkan performa penggunaan OpenTSDB, lihat Desain Skema Bigtable untuk Data Deret Waktu.
- Untuk mempelajari cara melakukan migrasi dari HBase ke Bigtable, lihat Memigrasikan data dari HBase ke Bigtable.
- Video Bigtable in Action, dari Google Cloud Next 17, menjelaskan promosi kolom, yang merupakan peningkatan performa yang penting.
- Untuk mempelajari cakupan default untuk cluster GKE lebih lanjut, lihat cakupan cluster.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.