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. Tes koneksi DB2 DBeaver

  • Driver: Db2 for LUW
  • Host: 10.248.34.126 (gunakan ip a atau multipass 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

exporter menampilkan bantuan

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

contoh luaran status service 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

contoh luaran status service grafana

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

contoh aktivasi database db2

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.

contoh matrics luaran ibm_db2_exporter

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

contoh luaran status service exporter

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']

contoh konfigurasi prometheus

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.

halaman targets prometheus

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.

halaman login grafana

Ganti password sesuai kebutuhan. Jika sudah diganti, masuk ke menu Connection > Add new connection pada sidebar.

menu add new connection

Cari dan pilih Prometheus. Tekan tombol Add new data source.

prometheus connection

Ganti Name menjadi db2-prometheus dan Prometheus server URL dengan http:IP:9090, jangan lupa menyesuaikan nilai IP.

prometheus data source configuration

Tekan Save & test dan pastikan koneksi sukses.

prometheus data source configuration test connection

Bukan menu Explore pada sidebar untuk eksplorasi data pada prometheus. grafana query exploration

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.

tiruan dashboard grafana db2 prometheus 1

tiruan dashboard grafana db2 prometheus 2

Tambahan: Memasang Alert

Pada menu sidebar buka Alerting > Contact points.

menu contact point grafana

Tekan tombol + Add contact point.

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.

integrasi contact point

Jika semua normal maka alert akan terkirim di discord.

notifikasi alert discord

pesan alert di discord

Tekan Save contact point untuk menyimpan.

Buka menu sidebar pilih menu Alert rules. Tekan tombol New alert rule.

menu 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.

konfigurasi alert rule 1

Geser ke bagian bawah, pada bagian Threshold ganti IS ABOVE menjadi IS BELOW dengan nilai 1.

konfigurasi alert rule 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”.

konfigurasi alert rule 3

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.

konfigurasi alert rule 4

Buka menu sidebar pilih menu Notification policies. Tekan tombol titik tiga (…) pada bagian paling kanan baris Default policy. Tekan tombol Edit.

konfigurasi notification policies

Ganti nilai Default contact point menjadi “Discord Alert Notification”. Tekan Update default policy.

konfigurasi contact point pada 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.

notifikasi alert discord

isi alert discord

Selesai