Homelab: Monitoring IBM DB2 dengan Prometheus dan Grafana
Menyiapkan Server DB2
Seperti biasanya kita akan menggunakan multipass untuk menyiapkan virtual machine ubuntu. Gunakan perintah berikut untuk membuat virtual machine ubuntu jammy dengan jumlah core 2, memory 4G, dan disk 10G.
multipass launch jammy --name db2-instance -c 2 -m 4G -d 10G
Masuk ke virtual machine.
multipass shell db2-instance
Lakukan upgrade package.
sudo apt update && sudo apt upgrade -y
IBM menyediakan DB2 community edition yang dapat dipasang dengan mudah menggunakan docker. Pasang docker dengan perintah berikut.
sudo apt install docker.io docker-compose
Sebelum menggunakan docker, daftarkan user kedalam group docker agar bisa menggunakan docker tanpa sudo.
sudo groupadd docker
sudo usermod -aG docker $USER
Logout dulu dari shell agar group tereload.
exit
multipass shell db2-instance
Nyalakan service docker saat startup.
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Saya telah menyediakan template docker-compose yang dapat digunakan untuk menjalankan DB2. Gunakan perintah berikut untuk clone repository template saya.
git clone https://github.com/rochimfn/compose-collection.git
Buat dahulu network yang dibutuhkan.
docker network create database
Jalankan DB2.
cd compose-collection/db2
docker-compose up -d
Gunakan database client pilihan untuk mencoba koneksi ke db2. Berikut contoh koneksi db2 menggunakan dbeaver.
- Driver: Db2 for LUW
- Host: 10.248.34.126 (gunakan
ip a
ataumultipass list
untuk mendapatkan ip) - Database: testdb
- Username: db2inst1
- Password: password
Menyiapkan DB2 Exporter
Exporter berfungsi untuk mengambil data metrics dari DB2 dan mengeksposenya dalam bentuk http API yang dapat discrap oleh prometheus. Gunakan perintah berikut untuk membuat virtual machine ubuntu jammy ukuran standar (1 core, 1G memory, 5G disk).
multipass launch jammy --name db2-exporter
Masuk ke virtual machine.
multipass shell db2-exporter
Lakukan upgrade package.
sudo apt update && sudo apt upgrade -y
Pasang package build-essential
untuk mempermudah proses build exporter.
sudo apt install build-essential -y
Pasang golang dengan mengikuti dokumentasi.
sudo su
wget -c https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
exit
Restart shell untuk memastikan golang terpasang dengan benar.
exit
multipass shell db2-exporter
Cek versi golang pastikan tidak ada error dan golang menampilkan versi go version go1.22.0 linux/amd64
.
go version
Selanjutnya pasang driver IBM DB2 versi golang.
. /etc/profile
go install github.com/ibmdb/go_ibm_db/installer@v0.4.5
cd go/pkg/mod/github.com/ibmdb/go_ibm_db@v0.4.5/installer/
go run setup.go
export CGO_LDFLAGS=-L/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/lib
export CGO_CFLAGS=-I/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/include
export IBM_DB_HOME=/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver
export LD_LIBRARY_PATH=/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/lib:
export PATH=$PATH:/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/bin
cd
Ikuti petunjuk dihalaman berikut jika terjadi kegagalan pemasangan.
Kita akan menggunakan DB2 prometheus exporter dari grafana. Gunakan perintah berikut untuk proses build
git clone https://github.com/grafana/ibm-db2-prometheus-exporter.git
cd ibm-db2-prometheus-exporter
make exporter
Pastikan exporter sukses terbuild.
bin/ibm_db2_exporter -h
Menyiapkan Prometheus
Gunakan perintah berikut untuk membuat virtual machine ubuntu jammy.
multipass launch jammy --name db2-prometheus
Masuk ke virtual machine.
multipass shell db2-prometheus
Lakukan upgrade package.
sudo apt update && sudo apt upgrade -y
Prometheus sudah tersedia di repository ubuntu. Gunakan perintah berikut untuk memasang.
sudo apt install prometheus -y
Gunakan perintah berikut untuk memeriksa service prometheus (gunakan q untuk keluar).
sudo systemctl status prometheus
Menyiapkan Grafana
Gunakan perintah berikut untuk membuat virtual machine ubuntu jammy.
multipass launch jammy --name db2-grafana
Masuk ke virtual machine.
multipass shell db2-grafana
Lakukan upgrade package.
sudo apt update && sudo apt upgrade -y
Grafana menyediakan repository khusus untuk pemasangan grafana di ubuntu. Anda dapat membacanya di link berikut https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/. Secara garis besar, berikut adalah perintah-perintah yang harus dijalankan untuk memasang grafana versi oss.
sudo apt install -y apt-transport-https software-properties-common wget
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install grafana -y
Gunakan perintah berikut untuk mengaktifkan dan menjalankan service grafana.
sudo systemctl enable --now grafana-server.service
Periksa status service grafana.
sudo systemctl status grafana-server
Menyambungkan Seluruh Komponen
Mengaktifkan database
Database DB2 yang akan dimonitor harus diaktifkan secara manual sesuai arahan pada dokumentasi ibm-db2-prometheus-exporter.
Masuk pada virtual machine server DB2.
multipass shell db2-instance
Masuk ke container server DB2.
docker exec -it db2server /bin/bash
Berpindah ke user db2inst1.
su - db2inst1
Jalankan perintah berikut secara berurutan.
db2
activate database testdb
quit
Mengonfigurasi eksporter
Setelah sukses aktivasi database mari berpindah ke konfigurasi eksporter. Pertama masuk dulu ke virtual machine server eksporter.
multipass shell db2-exporter
Konfigurasi koneksi lewat environment variables.
export IBM_DB2_EXPORTER_DSN="DATABASE=testdb;HOSTNAME=10.248.34.126;PORT=50000;UID=db2inst1;PWD=password;"
export IBM_DB2_EXPORTER_DB="testdb"
export CGO_LDFLAGS=-L/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/lib
export CGO_CFLAGS=-I/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/include
export IBM_DB_HOME=/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver
export LD_LIBRARY_PATH=/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/lib:
export PATH=$PATH:/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/bin
Jalankan exporter secara manual.
ibm-db2-prometheus-exporter/bin/ibm_db2_exporter
Jika tidak ada error, kunjungi IP:9953/metrics di browser untuk melihat matrics yang di expose oleh eksporter. Ganti IP dengan nilai IP dari virtual machine exporter yang bisa didapatkan melalui perintah ip a
atau multipass list
.
Mari membuat systemd user service agar proses nyala, mati, dan restart exporter lebih mudah dilakukan. Pertama buat direktori systemd service.
mkdir -p ~/.config/systemd/user
Buat file service.
vim ~/.config/systemd/user/ibm-db2-exporter.service
Tempelkan definisi service berikut. Simpan.
[Unit]
Description=Service to manage ibm_db2_exporter
[Service]
Type=simple
StandardOutput=journal
Environment="IBM_DB2_EXPORTER_DSN="DATABASE=testdb;HOSTNAME=10.248.34.126;PORT=50000;UID=db2inst1;"PWD=password;"
Environment="IBM_DB2_EXPORTER_DB="testdb""
Environment="CGO_LDFLAGS=-L/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/lib"
Environment="CGO_CFLAGS=-I/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/include"
Environment="IBM_DB_HOME=/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver"
Environment="LD_LIBRARY_PATH=/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/lib:"
Environment="PATH=$PATH:/home/ubuntu/go/pkg/mod/github.com/ibmdb/clidriver/bin"
ExecStart=/home/ubuntu/ibm-db2-prometheus-exporter/bin/ibm_db2_exporter
[Install]
WantedBy=default.target
Validasi file service dengan perintah berikut.
systemd-analyze --user verify .config/systemd/user/ibm-db2-exporter.service
Perbaiki jika ada error. Jika tidak ada, jalankan service dengan perintah berikut.
systemctl --user start ibm-db2-exporter.service
Gunakan perintah berikut untuk memeriksa status service.
systemctl --user status ibm-db2-exporter.service
Periksa juga luaran IP:9953/metrics di browser.
Terakhir jalankan perintah berikut agar service langsung berjalan saat OS dijalankan.
sudo loginctl enable-linger $USER
systemctl --user enable ibm-db2-exporter.service
Mengonfigurasi prometheus
Masuk ke virtual machine prometheus dengan perintah berikut.
multipass shell db2-prometheus
Buka file konfigurasi prometheus dengan teks editor pilihan.
sudo vim /etc/prometheus/prometheus.yml
Tambahkan konfigurasi berikut dibagian paling bawah file. Jangan lupa menyesuaikan nilai ip 10.248.34.88.
- job_name: 'db2-testdb'
scrape_interval: 5s
scrape_timeout: 5s
static_configs:
- targets: ['10.248.34.88:9953']
Nyalakan ulang prometheus untuk menerapkan konfigurasi.
sudo systemctl restart prometheus
Kunjungi IP:9090/classic/targets di browser untuk melihat status scrape prometheus. Jangan lupa menyesuaikan nilai IP.
db2-testdb akan muncul sebagai salah satu target. Pastikan nilai State-nya UP.
Mengonfigurasi grafana
Masuk ke dashboard grafana di IP:3000 melalui browser. Gunakan username admin
dan password admin
.
Ganti password sesuai kebutuhan. Jika sudah diganti, masuk ke menu Connection > Add new connection pada sidebar.
Cari dan pilih Prometheus. Tekan tombol Add new data source.
Ganti Name menjadi db2-prometheus dan Prometheus server URL dengan http:IP:9090, jangan lupa menyesuaikan nilai IP.
Tekan Save & test dan pastikan koneksi sukses.
Bukan menu Explore pada sidebar untuk eksplorasi data pada prometheus.
Tambahan: Dashboard grafana
Sayang sekali tidak ada dashboard DB2 Prometheus siap pakai di galery grafana. Beruntung pada laman ini terdapat contoh dashboard yang dapat ditiru dengan mudah. Berikut hasil tiruan yang saya buat.
Tambahan: Memasang Alert
Pada menu sidebar buka Alerting > Contact points.
Tekan tombol + Add contact point.
Kita akan menggunakan Discord sebagai tempat notifikasi. Alert grafana menggunakan fitur webhooks untuk mengirim notifikasi. Ikuti petunjuk pada halaman ini untuk mengonfigurasi webhook.
Isi kolom Name dengan “Discord Alert Notification” (nama bebas). Pilih “Discord” pada bagian Integration. Tempelkan webhook ke kolom “Webhook URL”. Tekan Test lalu Send test notification.
Jika semua normal maka alert akan terkirim di discord.
Tekan Save contact point untuk menyimpan.
Buka menu sidebar pilih menu Alert rules. Tekan tombol New alert rule.
Isi section 1. Enter alert rule name kolom Name dengan “DB2 is down” (nama bebas). Isi section 2. Define query and alert condition kolom Metric dengan metric ibm_db2_up.
Geser ke bagian bawah, pada bagian Threshold ganti IS ABOVE menjadi IS BELOW dengan nilai 1.
Geser ke bagian bawah, pada section 3. Set evaluation behavior buat New Folder dengan isi bebas. Pada bagian Evaluation order buat baru dengan Evaluation group name bebas dan Evaluation interval “10s”. Pada kolom Pending period isi dengan “15s”.
Geser ke bagian bawah, pada section 4. Add annotations isi Summary (optional) dengan pesan DB2 is down. Hapus labels pada section 5. Labels and notifications. Tekan Save rule and exit.
Buka menu sidebar pilih menu Notification policies. Tekan tombol titik tiga (…) pada bagian paling kanan baris Default policy. Tekan tombol Edit.
Ganti nilai Default contact point menjadi “Discord Alert Notification”. Tekan Update default policy.
Terakhir coba matikan virtual machine server DB2 untuk menguji alert.
multipass stop db2-instance
Setelah beberapa saat alert DB2 is down akan dikirimkan.
Selesai