
Selama saya mengelola monitoring server menggunakan Grafana, saya memutuskan untuk mengubah database backend dari SQLite ke MySQL. Keputusan ini saya ambil bukan tanpa alasan, melainkan berdasarkan masalah yang mengganggu performa sistem monitoring, terutama ketika beban sistem meningkat.
Mengapa Beralih dari SQLite ke MySQL?
Secara default, Grafana menggunakan SQLite sebagai database backend-nya. SQLite sangat sederhana dan cukup bagus untuk penggunaan skala kecil, seperti pengujian atau monitoring ringan. Namun, saat jumlah data dan kebutuhan meningkat, SQLite mulai menunjukkan keterbatasannya. Salah satu masalah utama yang saya hadapi adalah seringnya terjadi error saat mengevaluasi alert rule. Saya kerap mendapatkan pesan error berikut:
![Something went wrong when evaluating this alert rule failed to build query 'A': [sqlstore.max-retries-reached] retry 1: database is locked.](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXpCyI8h3CeCbz9fvjJVcZVH4AlAtsVvZudiMNm2TMZfHbZPd_Ko0URnBHh1kmvvnwCZw8GirWlel47-FTxs1sDTW7E9k3J-x1qolbWM3iKC9ITcJcmNiaP2BtjjLWFqXao84Gynnzr2XmIOD2MHVTruGqoy9WK_hjmUEe7pq6f9iAI5HI6nNWockp4Vk/s1857/queryError.png)
Pesan ini muncul karena SQLite mulai kewalahan ketika harus menangani koneksi yang lebih banyak secara bersamaan. Akibatnya, saya mengalami kejadian "database is locked" berulang kali, menyebabkan rule alerting gagal dievaluasi. Dan itu sangat mengganggu saya, karena kegagalan evaluasi ini memicu notifikasi "no value" yang membanjiri grup Telegram monitoring saya.
Kelebihan MySQL dalam Kasus Ini
SQLite dirancang untuk kesederhanaan dan efisiensi dalam lingkungan dengan beban kerja yang rendah. Namun, MySQL lebih cocok untuk aplikasi monitoring yang harus terus-menerus menjalankan query dan memproses data. MySQL mampu menangani koneksi dan permintaan akses yang lebih banyak secara efisien, mengurangi potensi "database locked" dan memastikan alert rule dapat dievaluasi secara konsisten.
Langkah Migrasi Database
Berikut langkah-langkah yang saya lakukan untuk memigrasikan database Grafana dari SQLite ke MySQL:
Install MySQL Server dan Konfigurasi Awal
Langkah pertama adalah memastikan MySQL terinstal dan berjalan. Gunakan perintah berikut:
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl status mysql

Pastikan MySQL sudah berjalan dengan status active.
Membuat Database dan User untuk Grafana
Selanjutnya, masuk ke MySQL dan membuat database untuk Grafana beserta user-nya:
sudo mysql -u root -p
CREATE DATABASE grafana;
CREATE USER 'grafana'@'localhost' IDENTIFIED BY 'passwordku';
GRANT ALL PRIVILEGES ON grafana.* TO 'grafana'@'localhost';
FLUSH PRIVILEGES;
exit;
Lalu, login menggunakan user grafana untuk memverifikasi apakah user dan database berhasil dibuat:
sudo mysql -u grafana -p
show databases;
exit;

Tips: Jangan lupa catat password yang dibuat, karena akan dibutuhkan untuk konfigurasi Grafana.
Mengedit Konfigurasi Grafana
Berikutnya, saya memperbarui konfigurasi Grafana agar terhubung ke MySQL. File konfigurasi terletak di /etc/grafana/grafana.ini. Saya mengganti konfigurasi database seperti ini:
[database]
type = mysql
host = 127.0.0.1:3306
name = grafana
user = grafana
password = passwordku
Tips: Pastikan hapus tanda komentar ; di depan, supaya konfigurasi ini terbaca oleh Grafana.
Restart Grafana Server
Setelah mengonfigurasi, restart Grafana agar databasenya berhasil dirubah:
sudo systemctl restart grafana-server
sudo systemctl status grafana-server
Setelah itu, cek statusnya dan pastikan Grafana berfungsi dengan normal. Jika ada error, lihat log-nya dengan:
journalctl -u grafana-server -f
Setelah proses restart, tunggu beberapa menit agar Grafana selesai mensinkronisasi database baru. Periksa apakah data telah disinkronisasi ke database baru dengan masuk ke MySQL sebagai user 'grafana' yang dibuat sebelumnya dan pastikan isi tabel dalam database sudah selesai disinkronisasi.
Ekspor Data dari SQLite dan Impor ke MySQL
Untuk memindahkan data dari database lama (SQLite) ke MySQL, saya menggunakan sqlite3. Jika sqlite3 belum terinstal, jalankan perintah berikut untuk menginstalnya:
sudo apt update
sudo apt install sqlite3
Kemudian, ekspor data dari SQLite ke file grafana-dump.sql:
sudo sqlite3 /var/lib/grafana/grafana.db .dump > grafana-dump.sql
Setelah file grafana-dump.sql berhasil dibuat, langkah selanjutnya adalah mengimpornya ke database MySQL. Untuk melakukannya, buka MySQL dengan user 'grafana', lalu jalankan perintah berikut:
mysql -u grafana -p
USE grafana;
SOURCE /path/to/grafana-dump.sql;
SHOW TABLES;
Catatan: Jika tidak yakin di mana file grafana-dump.sql disimpan, cari dengan menggunakan perintah sudo find / -name "grafana-dump.sql". Setelah menemukan lokasi file, gunakan jalur file tersebut dalam perintah SOURCE untuk mengimpor data ke MySQL.
Tips: Jika ada ketidaksesuaian atau data yang hilang, pemeriksa ulang file grafana-dump.sql dan mengimpor ulang jika perlu.
Verifikasi dan Uji Sistem
Ini yang paling seru, memastikan bahwa semua data telah berhasil dimigrasikan dan tidak ada informasi yang hilang:
- Cek apakah semua dashboard, panel, dan konfigurasi lainnya tetap tersedia seperti sebelum migrasi. Buka beberapa dashboard utama dan pastikan visualisasi data tetap akurat.
- Jalankan beberapa query di MySQL untuk memastikan bahwa semua tabel dan data telah ditransfer dengan benar. Gunakan perintah
SHOW TABLESuntuk memverifikasi daftar tabel danSELECT * FROM table_name;untuk memeriksa data dari setiap tabel. - Uji kembali alert rule yang sebelumnya sering gagal, dan pastikan evaluasi alert berjalan tanpa error. Ini penting untuk memastikan bahwa koneksi ke MySQL stabil dan tidak ada masalah query yang menyebabkan notifikasi berlebihan atau error.
Jika semua berjalan lancar dan tidak ada error yang terdeteksi, selamat! kita telah berhasil memigrasikan database Grafana dari SQLite ke MySQL dengan sukses 🥳🥳. Nikmati performa yang lebih baik dalam sistem monitoring Anda!.
Kesimpulan
Setelah migrasi selesai, performa Grafana meningkat secara signifikan. Evaluasi rule alerting berjalan lebih stabil, tanpa error "database locked" yang mengganggu. Alur notifikasi pun menjadi lebih akurat, memberikan notifikasi yang benar-benar dibutuhkan tanpa membanjiri grup Telegram dengan pesan yang tidak berguna.
Dengan MySQL, saya merasa lebih percaya diri bahwa sistem monitoring ini mampu menangani beban yang lebih besar di masa depan. Bagi Anda yang menghadapi masalah serupa atau sedang mempertimbangkan untuk meningkatkan infrastruktur monitoring, saya sangat merekomendasikan beralih ke MySQL.
Trimakasi om
BalasHapustyty
BalasHapus