Monitoring Kubernetes dengan InfluxDB v2
InfluxDB merupakan time-series database yang dibangun menggunakan bahasa pemrograman Go, dan dikembangkan oleh InfluxData. InfluxDB dioptimasi agar mampu berjalan dengan cepat dan mendukung konsep high-availability untuk menerima time-series data yang dipakai dalam hal monitoring, application metrics, data Internet of Things, hingga analisa secara real-time.
InfluxDB
InfluxData memiliki beberapa macam produk, salah satunya yang akan kita gunakan adalah InfluxDB OSS (Open Source Software). Selain InfluxDB OSS, sebenarnya terdapat produk lain yang berbayar seperti InfluxDB Cloud dengan model SaaS (Software as a Service) dan InfluxDB Enterprise. Sedangkan untuk versi, saat artikel ini dibuat InfluxDB v2 adalah yang paling baru dan sudah diklaim sebagai versi stabil. InfluxDB Enterprise dapat mendukung high-availability sehingga kita dapat membangunnya menjadi seperti sebuah cluster, sedangkan InfluxDB OSS tidak mendukung fitur tersebut.
TICK Stack
Bagi pemula atau orang awam, perbedaan dari InfluxDB v1 dan InfluxDB v2 adalah dalam hal modulnya. InfluxDB v1 lebih modular, dalam artian masing-masing komponen perlu dipasang untuk dapat berjalan menjadi satu tumpukan teknologi yang dalam sering disebut sebagai TICK Stack. TICK merupakan singkatan dari Telegraf InfluxDB Chronograf Kapacitor, keempat komponen tersebut memiliki tugas masing-masing. Telegraf akan melakukan mengumpulkan data, InfluxDB untuk menampung data yang telah dikumpulkan, Chronograf dipakai untuk visualisasi dan pengelolaan data, lalu Kapacitor digunakan untuk melakukan alerting. Untuk InfluxDB v2 beberapa komponen sebelumnya di-bundle menjadi single-binary yang disebut sebagai InfluxDB saja. Beberapa komponen tersebut adalah InfluxDB, Chronograf, dan Kapacitor. Sedangkan untuk Telegraf masih terpisah, karena Telegraf bisa saja dijalankan di perangkat terpisah dan berfungsi untuk mengumpulkan data yang bisa saja lebih dari satu perangkat.
Planning
Dalam artikel ini InfluxDB akan saya jalankan di atas cluster Kubernetes menggunakan objek StatefulSet sehingga persistent volume diperlukan supaya database tidak akan terhapus ketika pod mengalami restart atau terhapus. Lalu Telegraf akan saya jalankan sebagai objek DaemonSet supaya dapat mengambil data dari semua Nodes yang bergabung pada cluster. Untuk mempermudah proses deploy InfluxDB, sudah ada Helm chart yang disediakan. Namun karena saat artikel ini dibuat, Helm bagi InfluxDB masih belum stable saya lebih memilih menulis dalam bentuk YAML, dan hanya menggunakan Helm untuk men-deploy Telegraf saja.
Deploy InfluxDB
Sebelum lebih lanjut, saya membuat sebuah namespace khusus bernama monitoring
yang akan berisi seluruh objek terkait InfluxDB.
Membuat Namespace
|
|
Deploy InfluxDB
Silahkan sesuaikan script YAML berikut ini dengan environment yang ada.
|
|
Simpan script tersebut, misalnya dengan nama influxdb.yaml
dan jalankan perintah declarative berikut.
|
|
Memeriksa Objek InfluxDB
Silahkan periksa apakah semua objek telah berhasil dibuat.
|
|
Jika StatefulSet telah membuat sebuah Pod, Service, PersistentVolumeClaim, dan Ingress telah terbuat maka kurang lebih akan muncul tampilan seperti berikut.
|
|
InfluxDB Secret
File YAML tersebut juga akan membuat sebuah objek Secret bernama influxdb-auth
untuk menyimpan admin-password
dan admin-token
. Nantinya token akan dipakai oleh agent Telegraf untuk melakukan store data ke InfluxDB, sedangkan password akan kita pakai untuk masuk ke dalam UI InfluxDB. Jalankan perintah berikut untuk menampilkan admin-password
dalam bentuk plain-text.
|
|
Jalankan perintah berikut untuk menampilkan admin-token
dalam bentuk plain-text.
|
|
Deploy Telegraf
Entah saya belum terlalu memahami atau apa, Telegraf membutuhkan dua macam Helm chart supaya dapat berjalan di kubernetes yang akan membuat dua macam objek (DaemonSet dan Deployment).
Add Repo Helm
Karena kita akan men-deploy Telegraf menggunakan Helm chart, mari kita siapkan terlebih repository influxdata terlebih dahulu.
|
|
Values
Kita perlu mempersiapkan value untuk menampung beberapa argumen. Pertama mari membuat file values-ds.yaml
berisi script seperti berikut.
|
|
Kemudian kita buat lagi file lain bernama values-inventory.yaml
berisi script berikut.
|
|
Sesuaikan config pada bagian bucket
, token
, dan organization
seperti yang kita definisikan pada file influxdb.yaml
. Sedangkan untuk urls
dilihat berdasarkan URL dari objek Service yang telah kita buat, gunakan perintah berikut untuk mencari tahu.
|
|
<service-name>.<namespace>.svc.cluster.local:<service-port>
Jika semua file value sudah terbuat, sekarang saatnya kita jalankan Helm chart.
|
|
Memeriksa Objek Telegraf
Kita dapat memeriksa apakah semua objek Telegraf telah berjalan dengan perintah berikut.
|
|
Jika sudah berjalan maka kurang lebih akan muncul tampilan seperti berikut.
|
|
Apabila kurang yakin silahkan periksa log dari kedua Pod Telegraf diatas.
InfluxDB UI
URL dari InfluxDB dapat kita lihat dari objek Ingress.
|
|
Di sini misalnya akan muncul output seperti berikut.
|
|
Kita dapat mengakses http://tick.k8s.local menggunakan web browser dan login menggunakan username dan password yang telah kita definisikan sesuai file influxdb.yaml
sebelumnya.
Template Boards Kubernetes
Tersedia template boards untuk Kubernetes yang bisa kita dapatkan tanpa biaya. Pada InfluxDB UI buka menu Settings > Templates > Browse Community Templates, maka kita akan diarahkan menuju GitHub Repository. Di sana kita dapat mencari sebuah template bernama Kubernetes Dashboards yang dikembangkan oleh bonitoo.io. Ikuti saja alur petunjuk pemasangan template, jika berhasil akan muncul tampilan seperti berikut.
Selanjutnya jika kita buka menu Boards akan muncul dua Dashboard seperti berikut.
Silahkan coba buka kedua Dashboard tersebut, namun jangan lupa untuk merubah Variables dari _monitoring
menjadi demo
seperti nama bucket yang telah kita buat pada file influxdb.yaml
sebelumnya.
Jika sudah benar, seharusnya akan muncul tampilan dari kedua Dashboard seperti berikut.
Uninstall
Jika ingin menghapus objek yang telah kita buat, kita dapat menghapusnya secara bertahap seperti berikut.
|
|
Karena InfluxDB di-deploy sebagai StatefulSet maka PVC tidak akan terhapus secara otomatis, apabila kita ingin menghapusnya kita harus melakukannya secara manual.
|
|
Selanjutnya kita hapus bagian terakhir, yaitu namespace.
|
|
Kesimpulan
InfluxDB dapat kita gunakan sebagai alternatif monitoring dan logging cluster Kubernetes, namun menggunakan versi OSS (Open Source Software) atau Community tidaklah bijak bagi production environment, terutama kita akan kekurangan layanan customer support secara langsung dari InfluxData. Dalam file influxdb.yaml
kita perlu melakukan beberapa penyesuaian, misalnya adalah peningkatan kapasitas storage karena saya hanya menulisnya sebanyak 1Gi
dan retention hanya 12h
. Masih ada banyak hal yang perlu saya explore terkait InfluxDB, terutama dalam melakukan query terhadap data yang ada dalam bucket.
Referensi
- docs.influxdata.com/influxdb/v2.0/install/?t=Kubernetes
- github.com/influxdata/helm-charts
- github.com/influxdata/telegraf/tree/master/plugins/inputs/kube_inventory
- kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumes-typed-hostpath
- github.com/influxdata/community-templates/tree/master/k8s
- kubernetes.github.io/ingress-nginx/deploy
- helm.sh/docs/intro/using_helm
- www.gojek.io/blog/diy-set-up-telegraf-influxdb-grafana-on-kubernetes
- www.influxdata.com/blog/introducing-the-next-generation-influxdb-2-0-platform