TrueWatch
Mulai Sekarang

Workshop TrueWatch: Monitor MySQL dengan TrueWatch: Penyiapan End-to-End (Langkah demi Langkah)

27 Agu 2025By Admin

Referensi: Detail lengkap integrasi MySQL dan definisi field tersedia di Dokumentasi Integrasi MySQL TrueWatch.

Yang Akan Anda Capai

Dengan mengikuti panduan langkah demi langkah ini, Anda akan:

  • Menginstal dan mengonfigurasi TrueWatch DataKit untuk terhubung ke MySQL
  • Membuat pengguna monitoring yang aman dengan hak akses minimal (least-privilege)
  • Secara opsional mengaktifkan dan mengumpulkan log general/slow query MySQL
  • Membangun dashboard monitoring MySQL yang praktis di TrueWatch

Untuk siapa: backend engineer, SRE, dan DBA yang ingin monitoring MySQL kelas enterprise dengan cepat.


Prasyarat

  • Instans MySQL 5.7+ / 8.0+ yang dapat dijangkau (RDS cloud juga bisa)
  • Disarankan: MySQL 8.0 untuk cakupan performance_schema yang lengkap
  • Hak akses untuk membuat pengguna dan memberikan izin
  • Kemampuan untuk men-deploy TrueWatch DataKit (Docker atau instalasi pada host)

Gambaran Arsitektur

MySQL  ← (monitoring user, performance_schema)
  ↑
DataKit (container or host) → ships Metrics / Logs / Slow Queries to TrueWatch

Butuh telemetri eBPF/tingkat host? Pilih instalasi pada host. Untuk monitoring database saja, container sudah cukup.


Langkah 1: Verifikasi dan Aktifkan performance_schema

Banyak metrik database bersumber dari performance_schema MySQL. Periksa apakah sudah aktif:

SHOW VARIABLES LIKE 'performance_schema';

Jika Anda melihat Value = OFF, aktifkan sesuai lingkungan Anda:

  • Di my.cnf:
[mysqld]
performance_schema=ON

Restart MySQL dan pastikan nilainya ON.

Layanan terkelola (mis. Aliyun RDS) dapat membatasi beberapa measurement (mis. mysql_user_status) jika performance_schema dinonaktifkan atau dibatasi. Lihat FAQ resmi dan solusinya di Dokumentasi Integrasi MySQL TrueWatch.


Langkah 2: Buat Pengguna Monitoring dengan Hak Akses Minimal

Untuk keamanan dan observabilitas, buat pengguna khusus read-only (sesuaikan user/password):

CREATE USER 'datakit'@'%' IDENTIFIED WITH caching_sha2_password BY 'datakit_password';
GRANT PROCESS ON *.* TO 'datakit'@'%';
GRANT SELECT ON *.* TO 'datakit'@'%';
GRANT SELECT ON performance_schema.* TO 'datakit'@'%';
GRANT SELECT ON mysql.user TO 'datakit'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'datakit'@'%';
FLUSH PRIVILEGES;

Mengapa hak akses ini penting:

  • PROCESS: memeriksa query dan koneksi yang sedang berjalan
  • SELECT (termasuk performance_schema): membaca data performa dan statistik
  • REPLICATION CLIENT: membaca status replikasi (jika berlaku)

Langkah 3: Instal dan Jalankan DataKit (pilih salah satu)

Instal DataKit sebagai container atau pada host (perintah disederhanakan dari panduan resmi):

3A. Docker (mulai cepat)

datakit-install-docker.png

#1) Di TrueWatch Console → DataKit → Docker, pilih DataWay Anda dan salin perintah/token yang dihasilkan. #2) Pada host target, jalankan:

docker run -d --name datakit \
  --hostname "$(hostname)" \
  -p 9529:9529 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd)/conf.d:/usr/local/datakit/conf.d \
  -e ENV_DATAWAY="https://<your-openway-host>?token=<your_token>" \
  -e ENV_HTTP_LISTEN="0.0.0.0:9529" \
  pubrepo.truewatch.com/truewatch/datakit:1.80.1

#3) Letakkan mysql.conf dari langkah berikutnya ke direktori conf.d/ yang di-mount (utamakan conf.d/db/). DataKit akan memuatnya secara otomatis.

Lihat dokumentasi resmi untuk variabel lingkungan lainnya dan opsi lanjutan (proxy, batas resource, logging, dll.): Dokumentasi Instalasi DataKit.

3B. Instalasi pada host (disarankan untuk eBPF/metrik host)

datakit-install-host.png

#1) Di TrueWatch Console → DataKit → Linux, pilih DataWay dan salin perintah yang sudah berisi token.

#2) Pada host target, jalankan (menginstal dan memulai DataKit):

DK_DATAWAY="https://<your-openway-host>?token=<your_token>" bash -c "$(curl -L https://static.truewatch.com/datakit/install.sh)"

#3) Letakkan mysql.conf di conf.d/db/ milik DataKit, lalu restart layanan:

sudo systemctl restart datakit

Untuk opsi tambahan seperti DK_INSTALL_ONLY, proxy, dan upgrade, lihat dokumentasi resmi: Dokumentasi Instalasi DataKit.


Langkah 4: Konfigurasi input MySQL DataKit (inputs.mysql)

Buat atau edit mysql.conf di direktori conf.d/db milik DataKit:

[[inputs.mysql]]
  host = "db"              # or your MySQL address (FQDN/IP)
  user = "datakit"         # monitoring user
  pass = "datakit_password"
  port = 3306
  interval = "10s"
  innodb = true             # collect key InnoDB metrics
  dbm = true                # enable Database Monitoring (query analysis)
  election = true           # single leader collects when multiple DataKits exist

Arti field dan tips tuning: lihat Dokumentasi Integrasi MySQL TrueWatch.

Restart (atau hot-reload) DataKit; metrik akan mulai mengalir.


Langkah 5 (opsional): Kumpulkan log general/slow query MySQL

TrueWatch dapat menerima log general dan slow query MySQL untuk menemukan SQL dengan latensi tinggi.

5A. Aktifkan slow query logging (MySQL)

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_queries_not_using_indexes = 'ON';  -- optional: flag queries without indexes
-- Recommended tuning (persist via my.cnf):
SET GLOBAL long_query_time = 1;                   -- seconds threshold for slow query

Untuk membuatnya permanen, tambahkan ke my.cnf (contoh):

[mysqld]
slow_query_log=ON
long_query_time=1
log_queries_not_using_indexes=ON
log_output=FILE
slow_query_log_file=/var/log/mysql/slow.log

5B. Pengumpulan log DataKit (umumnya dengan instalasi pada host)

Tambahkan ke conf.d/mysql.conf (atau buat bagian baru):

[inputs.mysql.log]
  files = ["/var/log/mysql/*.log"]  # adjust to your absolute paths

Untuk pemetaan field log yang mendetail (normal/slow), lihat Dokumentasi Integrasi MySQL TrueWatch.


Langkah 6: Verifikasi data masuk

#1) Periksa halaman status DataKit (port default 9529) untuk memastikan input sehat #2) Di TrueWatch Explorer, cari measurement seperti mysql, mysql_replication_log #3) Cari field seperti connections, query_time, lock_time, rows_examined, rows_sent

Jika ada measurement yang tidak muncul (mis. mysql_user_status), pastikan performance_schema aktif atau periksa batasan RDS. Lihat FAQ di Dokumentasi Integrasi MySQL TrueWatch.


Langkah 7: Bangun dashboard MySQL yang praktis

A. Gunakan dashboard template (disarankan)

#1) Buka Scenes di kiri → Dashboards di atas → klik Create.

create-dashboard.png

#2) Di bawah System Views, cari mysql dan pilih Mysql Monitor View (atau template MySQL khusus cloud).

mysql-template-dashboard.png

#3) Template ini mencakup chart umum untuk koneksi, latensi query, InnoDB, dan replikasi. Sesuaikan sesuai kebutuhan.

Sumber template dan referensi field: Dokumentasi Integrasi MySQL TrueWatch.

B. Bangun widget sendiri (fleksibel)

Pratinjau dashboard

mysql-view-1.png

mysql-view-2.png

Contoh konfigurasi widget (QPS / TPS)

  • QPS: metrik mysql dengan Questions, terapkan non_negative_derivative untuk mendapatkan query per detik.

QPS.png

  • TPS: gunakan ekspresi A+B untuk menjumlahkan Handler_commit dan Handler_rollback, masing-masing dengan non_negative_derivative, untuk mendapatkan transaksi per detik.

TPS.png

Berikut widget yang teruji di lapangan untuk kebutuhan monitoring database yang umum. Tambahkan ke dashboard TrueWatch menggunakan query Simple/Expression/DQL sesuai kebutuhan.

Contoh field merujuk pada measurement seperti mysql dan mysql_replication_log. Pastikan ketersediaan field di Explorer Anda.

A. Ringkasan

  • Time series (Connections)

    • Sumber: mysql.connections
    • Dimensi: server (host:port)
    • Tujuan: memantau konkurensi dan lonjakan
  • Single value/trend (p95 query time)

    • Sumber: mysql.query_time
    • Agregasi: p95 selama 5m
    • Tujuan: melihat tail latency sekilas
  • Single value/trend (lock wait time)

    • Sumber: mysql.lock_time
    • Agregasi: avg selama 5m (atau p95)
    • Tujuan: mendeteksi lock contention dan blocking
  • Single value (slow query per menit)

    • Sumber: log slow query (inputs.mysql.log)
    • Metode: hitung event yang memiliki db_slow_statement
    • Tujuan: menangkap lonjakan slow query

B. InnoDB & Throughput

  • Time series (Rows Examined / Rows Sent)

    • Sumber: mysql.rows_examined, mysql.rows_sent
    • Agregasi: sum atau rate
    • Tujuan: memahami volume baca vs. baris yang dikembalikan, menyimpulkan efisiensi
  • Tabel (Top hot tables/indexes)

    • Sumber: mysql.index_name, mysql.object_name, mysql.object_schema
    • Agregasi: group by query_signature atau object_name, tampilkan avg query_time dan count
    • Tujuan: menemukan tabel/indeks yang sering diakses dan operasi yang lambat

C. Top-N query bermasalah (log/event)

  • Tabel (Top slow queries berdasarkan rata-rata durasi)

    • Sumber: log slow query atau event mysql
    • Kolom: query_signature, sql_text (atau message yang dinormalisasi)
    • Metrik: avg(query_time), count()
  • Tabel (Top wait events)

    • Sumber: mysql.wait_event, event_name
    • Metrik: sum(event_timer_wait)

D. Replikasi (jika berlaku)

  • Single value/tabel (Ringkasan Master / Executed GTID Set)
    • Sumber: mysql_replication_log.Executed_Gtid_Set, Master_Host, Master_Port
    • Tujuan: memastikan hubungan master dan progres GTID

Tips: jika tersedia, tambahkan Seconds_Behind_Master sebagai single value/time series untuk replication lag.


Praktik terbaik & keamanan

  • Gunakan pengguna monitoring khusus dengan hak akses minimal, terpisah dari akun aplikasi
  • Frekuensi pengumpulan yang lebih tinggi (mis. interval = "10s") tidak masalah di staging; sesuaikan untuk biaya/performa di produksi
  • Sesuaikan long_query_time dan log_queries_not_using_indexes untuk menyeimbangkan noise dan sinyal
  • Pada container, utamakan stdout/log-driver daripada file mount agar tidak membagikan path sensitif
  • Simpan kredensial di secrets/variabel ENV, bukan di-commit ke dalam file

FAQ & pemecahan masalah

T: Saya tidak melihat measurement mysql_user_status.

J: Pastikan performance_schema bernilai ON:

SHOW VARIABLES LIKE 'performance_schema';

Jika OFF, aktifkan sesuai penyedia DB/RDS Anda. Beberapa produk RDS membatasinya. Lihat Dokumentasi Integrasi MySQL TrueWatch.

T: DataKit berjalan tetapi tidak ada data yang masuk.

  • Verifikasi detail koneksi di mysql.conf (host/user/pass/port)
  • Pastikan security group/firewall mengizinkan DataKit menjangkau MySQL
  • Periksa halaman status/log DataKit untuk error koneksi atau izin

T: Slow query tidak muncul.

  • Pastikan slow_query_log aktif
  • Jika mengumpulkan file dari container, pastikan path absolut dapat dibaca (stdout/sidecar sering kali lebih sederhana)
  • Di Explorer, cari penanda di indeks log (mis. [MYSQL_QUERY]) atau field slow log

Referensi

  • Dokumentasi integrasi resmi dan definisi field: Dokumentasi Integrasi MySQL TrueWatch
  • Perjalanan dan alasan integrasi kami (monitoring user, input DataKit, sidecar): demo-project/INTEGRATION_GUIDE.md

Dengan langkah-langkah ini, Anda telah mengintegrasikan MySQL dengan TrueWatch dan membangun dashboard yang dapat ditindaklanjuti. Selanjutnya, tambahkan alert (Monitors), laporan terjadwal, dan korelasi lintas layanan untuk mencapai observabilitas database end-to-end yang siap produksi.

Get in touch background

Melampaui observabilitas bersama TrueWatch hari ini.