diskusi.tech (beta) Community

loading...
DeepTechID

Bereksperimen dengan Prometheus dan Grafana untuk Memantau Berbagai Layanan

mimindeeptech profile image Mimin Deep Tech ・6 min read

Penulis: Ariya Hidayat.

Halo teman-teman sesama penggandrung teknologi!
Buat yang suka membuat dan mengoperasikan berbagai layanan jaringan, dari server seperti Apache dan Nginx, ataupun aplikasi PHP buatan sendiri, aspek pemantauan layanan tersebut terkadang dinomorduakan (malah kadang nomor tiga atau entah nomor berapa). Padahal ini penting sekali, jangan sampai misalnya layanan tersebut mati gara-gara CPU terlalu banyak beban atau kapasitas penyimpanan sudah minim sekali, padahal indikator tentang masalah tersebut sudah bisa diketahui dan harusnya juga diantisipasi secara dini.

Untunglah, sekarang banyak aplikasi yang bisa dipasang dan digunakan untuk berperan sebagai si pemantau yang setia. Yang belakangan sangat populer adalah Prometheus (begini pengucapannya). Biasanya juga, Prometheus ini dipasangkan dengan Grafana yang mampu menampilkan beragam jenis grafik yang bermanfaat dan juga memikat.

Kalau mau mulai mengoprek Prometheus dan Grafana, langkah-langkahnya relatif mudah dan gampang diikuti. Untuk ilustrasi berikut, saya asumsikan mesin berbasis Linux, misalnya Ubuntu atau Debian. Buat yang lebih favorit ke alirannya Fedora atau CentOS, prinsipnya sama, jadi tinggal disesuaikan sedikit saja.

Kurang lebih yang akan kita kerjakan diringkaskan di diagram berikut ini:
PT 2

Koneksi dari browser akan tersambung pertama-tama ke HAProxy yang bertindak sebagai load balancer untuk mendistribusikan beban transaksinya ke dua buah server, websvr1 dan websvr2. Berbagai macam statistik operasional dari HAProxy, misalnya jumlah koneksi, transfer, dan lain sebagainya, akan dipindahkan oleh haproxy-exporter menuju ke Prometheus. Akhirnya Grafana disambungkan untuk mengambil data dari Prometheus supaya bisa dimanfaatkan untuk membuat dashboard yang cantik.

Karena ini hanya untuk demo, kita tidak mengoperasikan server yang serius seperti Apache ataupun aplikasi berbasis Node.js, Rails, atau Django. Untuk ilustrasi, kita pakai server minimalis dari Python. Mula-mula, buatlah berkas sederhana untuk eksperimen ini, index.html:

<html><body><p>Halo semua! Selamat datang!</p></body></html>

Jalankan server pertama (dengan Python 2, silakan disesuaikan kalau Anda pecinta Python 3):

$ python -m SimpleHTTPServer 4000

Lalu satu lagi sebagai server kedua:

$ python -m SimpleHTTPServer 4001

Periksa dengan meluncurkan browser kesayangan dan langsung menuju ke TKP, localhost:4000 dan localhost:4001. Harusnya browser tersebut akan menampilkan pesan yang cukup populer.

Sekarang, marilah kita mengatur konfigurasi HAProxy. Kalau belumlah terpasang, instalasinya (di Ubuntu atau Debian) cukup gampang:

$ sudo apt install -y haproxy

Berkas konfigurasinya adalah /etc/haproxy/haproxy.cfg. Ubah sedikit, tambahkan beberapa baris berikut ini:

listen  http-incoming
    mode http
    bind *:9000
    balance roundrobin
    server websvr1 127.0.0.1:4000 check
    server websvr2 127.0.0.1:4001 check
Enter fullscreen mode Exit fullscreen mode
listen stats
    mode http
    bind *:9001
    stats enable
    stats uri /stats
Enter fullscreen mode Exit fullscreen mode

Inti dari konfigurasi di atas adalah sebagai berikut. Pertama, port 9000 akan digunakan untuk menerima koneksi HTTP (misalnya dari browser) untuk didistribusikan (secara Round Robin) ke dua back-end, masing-masing di port 4000 dan 4001. Kedua, statistik operasional HAProxy sendiri bisa diakses di port 9001.

Untuk memastikan tidak ada salah ketik, cek dulu konfigurasi di atas dengan perintah ini:

$ haproxy -c -f /etc/haproxy/haproxy.cfg

Bila tidak ada keluhan dari HAProxy, berarti berkas konfigurasinya siap dipakai. Jika masih ada kesalahan, periksa lagi dengan seksama.

Sekarang HAProxy perlu dijalankan ulang:

$ sudo service haproxy restart

PT 2

Apa yang terjadi sekarang? Anda bisa menggunakan browser untuk membuka localhost:9000. Seharusnya yang akan ditampilkan adalah halaman web yang persis sama seperti yang disuplai oleh back-end-nya, localhost:4000 (dan just localhost:4001).

Sementara itu, statistik operasional HAProxy bisa nampak di alamat localhost:9001/stats, seperti ditunjukkan di bawah ini:

PT 2

Nah, sekarang kita perlu siapkan haproxy_exporter yang akan mengubah format statistik operasional yang ditampilkan di atas ke format yang dapat dikonsumsi oleh Prometheus. Hingga ini, cara termudah untuk menggunakan haproxy_exporter adalah melakukan kompilasi dari kode sumbernya. Karena dikembangkan dengan bahasa pemrograman Go, maka kita harus pastikan dahulu kalau sistemnya dilengkapi dengan Go:

$ sudo apt install -y golang

Jika belum, atur juga agar GOPATH sudah didefinisikan dengan benar, misalnya:

$ mkdir -p $HOME/go
$ export GOPATH=$HOME/go

Setelah itu, kita perlu kloning kode sumbernya dari GitHub lalu memulai proses kompilasinya:

$ mkdir -p $GOPATH/src/github.com/prometheus
$ cd $GOPATH/src/github.com/prometheus
$ git clone https://github.com/prometheus/haproxy_exporter.git
$ cd haproxy_exporter/
$ make build

Proses kompilasinya cepat karena aplikasi ini memang ringan. Dalam beberapa saat, hasilnya bisa kita cek dulu:

./haproxy_exporter - version
haproxy_exporter, version 0.9.0 (branch: master, revision: eaf02eebace468ad2d0c5a875def5465f25c2f22)
build user: ariya@ubuntu
build date: 20181006–19:27:35
go version: go1.10.1
Enter fullscreen mode Exit fullscreen mode

Bagaimana mengaktifkannya? Begini:

$ ./haproxy_exporter — haproxy.scrape-uri=”http://localhost:9001/stats;csv"

Parameter scrape-uri di atas harus merujuk ke HAProxy yang kita konfigurasi sebelumnya. Perhatikan penggunaan port 9001 dan juga akhiran csv di URI-nya).

Untuk memastikan bahwa haproxy_exporter bekerja dengan baik, bukalah localhost:9101 dan seharusnya ada pesan pendek. Kalau link yang ada di pesan tersebut diklik, browser akan menuju localhost:9101/metrics dan di sinilah kita bisa lihat paparan data-data yang nantinya bisa dipahami oleh Prometheus.

Perlu dicatat, Prometheus bisa digunakan untuk memantau lusinan jenis layanan lain, tidak hanya HAProxy. Lihat saja daftar lengkapnya, di sana tercatat berbagai program-program yang sudah lumrah di telinga anggota tim DevOps, dari Kubernetes, MongoDB, Redis, Kafka, Jenkins, dan lain sebagainya.

Nah, ngomong-ngomong soal Prometheus, ini juga perlu kita instal lho! Untuk distro seperti Ubuntu 18.04, sudah tersedia paketnya dan lumayan relatif mutakhir. Jadi, hanya dengan:

$ sudo apt install -y prometheus

dan menunggu sesaat (atau lama, tergantung kecepatan sambungan Internet yang digunakan), Prometheus siap dicoba. Kita bisa periksa:

prometheus - version
prometheus, version 2.1.0+ds (branch: debian/sid, revision: 2.1.0+ds-1)
build user: pkg-go-maintainers@lists.alioth.debian.org
build date: 20180121–21:30:42
go version: go1.9.2
Enter fullscreen mode Exit fullscreen mode

Sayang Debian 9 (stretch) masih mengemas Prometheus versi 1.5 yang agak kadaluwarsa. Solusinya mudah saja, comotlah Prometheus baru versi 2.3 dari stretch-backports dengan mengikut petunjuk di https://backports.debian.org/Instructions/.

Seandainya mau menginstalasi Prometheus dengan cara kompilasi manual, caranya juga tidak sulit. Untuk awalnya, karena Prometheus dikembangkan dengan bahasa pemrograman Go, lagi-lagi Go sudah harus terpasang dengan baik. Selanjutnya, prosesnya mirip dengan haproxy-exporter di atas:

$ mkdir -p $GOPATH/src/github.com/prometheus
$ cd $GOPATH/src/github.com/prometheus
$ git clone https://github.com/prometheus/prometheus.git
$ cd prometheus
$ make build

Langkah di atas akan menghasilkan Prometheus dari versi master di GitHub-nya. Ini agak beresiko memang. Kalau mau cari aman, ganti dengan versi stabil, misalnya dengan mengubah langkah terakhir menjadi:

$ git checkout release-2.4 && make build
$ cd prometheus
$ make build

Sekarang, waktunya kita bermain-main dengan Prometheus. Tahap pertama adalah konfigurasi. Gunakan editor untuk mengubah berkas /etc/prometheus/prometheus.yml sehingga isinya seperti berikut ini:

scrape_configs:
- job_name: haproxy
    static_configs:
    - targets: ['localhost:9101']
Enter fullscreen mode Exit fullscreen mode

Konfigurasi sederhana ini hampir tidak perlu penjalasan. Pada intinya, Prometheus diminta mencomot informasi yang akan ditampilkan dari localhost:9101, yakni yang disediakan oleh haproxy-exporter yang sudah dibahas di atas.

Setelah menjalankan Prometheus:

$ prometheus

bukalah localhost:9090/graph untuk melihat tampilan antarmuka web Prometheus. Di sini kita bisa melihat nilai sebuah metrik dengan cepat. Di kotak Expression, silakan masukkan haproxy_frontend_http_requests_total, klik tombol Execute, lalu pilih tab Graph. Maka yang akan ditunjukkan adalah jumlah HTTP request yang diterima oleh HAProxy.

Tentu saja, selain itu, masih banyak nilai lain yang bisa ditampilkan. Beruntunglah bahwa Prometheus bisa otomatis melengkapi masukan kita (auto-complete) sehingga Anda cukup mengetikkan haproxy dan semua metrik yang ada akan langsung ditampilkan sehingga bisa dipilih. Prometheus juga mendukung ekspresi yang kompleks, misalnya rate(haproxy_frontend_connections_total{frontend=”http-incoming”}[1m]) akan menunjukkan laju (rate) dari koneksi yang diterima (http-incoming, lihat konfigurasi HAProxy) dengan hitungan per menit.

PT2

Walaupun sudah dapat menampilkan data yang kita inginkan, grafik dan diagram dari Prometheus lebih bersifat ke fungsional saja. Untuk dashboard yang lebih cocok dipantau tim DevOps dalam aktivitas harian mereka, Grafana adalah kuncinya.

Instalasi Grafana sendiri agak sedikit rumit. Pertama, buka berkas /etc/apt/sources.list dan tambahkan baris berikut ini:

deb https://packagecloud.io/grafana/stable/debian/ stretch main
Enter fullscreen mode Exit fullscreen mode

Kemudian, kita lanjutkan dengan:

$ curl https://packagecloud.io/gpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -y grafana

Dan akhirnya Grafana pun siap dioprek:

$ sudo service grafana-server start

Gunakan browser untuk membuka localhost:3000 dan login ke Grafana sebagai admin (password-nya juga admin, nanti bisa diganti). Pilih menu Configuration, Data Sources dan klik tombol Add data source. Lalu tambahkan Prometheus di alamat localhost:9090. Buat dashboard baru (tanda +, Create Dashboard) dan sisipkan panel bertipe Graph. Tekan tombol e untuk mengubah ekspresinya, masukkan rate(haproxy_frontend_connections_total{frontend=”http-incoming”}[1m]) seperti contoh sebelumnya.

Nah, ini hanya contoh untuk satu panel. Bergantung keperluan tim DevOps, dashboard yang dibuat bisa dilengkapi dengan lusinan panel yang beraneka-ragam yang sanggup memberikan gambaran dari situasi sistemnya (dalam contoh ini, HAProxy).

PT 2

Memantau layanan yang kita operasikan adalah kewajiban yang penting. Kombinasi Prometheus dan Grafana bisa menjadi solusi yang tidak sulit dioperasikan tetapi juga hasil dashboardnya lumayan cantik dan bisa berfaedah. Selamat bereksperimen dan tetap semangat!

Ada yang mau temen-temen tanyain soal artikel ini? Yuk, komen dan diskusi :)

Discussion

pic
Editor guide