Panduan Instalasi dan Konfigurasi Grafana & Prometheus untuk...
Panduan Instalasi dan Konfigurasi Grafana & Prometheus untuk Memantau MySQL di EC2 (Ubuntu 24)
Panduan praktis menyiapkan <code>mysqld_exporter</code> dan <code>node_exporter</code> pada EC2 (MySQL), lalu menjalankan <strong>Prometheus</strong> dan <strong>Grafana</strong> pada server monitoring terpisah. Termasuk skrip siap salin-tempel, contoh konfigurasi Prometheus, serta langkah impor dashboard di Grafana.
- Prasyarat
- Arsitektur & Port
- Bagian A — EC2 (MySQL): Pasang Exporter
- Bagian B — Server Monitoring: Prometheus + Grafana
- Grafana Quick-Start (Datasource & Dashboard)
- Verifikasi & Uji Cepat
- Troubleshooting Ringkas
- Catatan Keamanan & Produksi
- Kesimpulan
- Sumber/Referensi
Prasyarat
- EC2 (Ubuntu 24) yang menjalankan MySQL (local/tidak RDS).
- Server monitoring (VM/host terpisah) dengan akses internet (jalankan Prometheus & Grafana di sini).
- Akses SSH root/sudo ke kedua host.
- Firewall/SG: izinkan 9100 dan 9104 di EC2 dari hanya IP server monitoring.
Arsitektur & Port
- EC2 (MySQL) →
node_exporterdi 9100;mysqld_exporterdi 9104. - Server Monitoring → Prometheus (port 9090) dan Grafana (port 3000).
- Prometheus scrape:
http://IP_EC2:9100&http://IP_EC2:9104.
Bagian A — EC2 (MySQL): Pasang Exporter
Kita gunakan Docker agar lintas-arsitektur (ARM/AMD) lebih sederhana.1) Instal Docker & Compose Plugin
Copysudo -i
apt-get update -y
apt-get install -y docker.io docker-compose-plugin
systemctl enable --now docker
2) Buat User MySQL untuk Exporter
Masuk ke MySQL dan jalankan GRANT berikut (password contoh silakan diganti kuat): Copymysql -uroot -p -e "
CREATE USER 'exporter'@'127.0.0.1' IDENTIFIED BY 'GantiPasswordKuat!';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'127.0.0.1';
FLUSH PRIVILEGES;"
3) Docker Compose untuk Exporter
File di/opt/exporters/docker-compose.yml — Node Exporter & MySQLd Exporter berjalan dengan host network agar mudah di-scrape Prometheus.
Copy
mkdir -p /opt/exporters
cat > /opt/exporters/.env <<'ENV'
MYSQL_EXPORTER_PASS=GantiPasswordKuat!
ENV
cat > /opt/exporters/docker-compose.yml <<'YAML'
version: "3.8"
services:
node_exporter:
image: quay.io/prometheus/node-exporter:latest
network_mode: host
pid: host
volumes:
- type: bind
source: /
target: /host
read_only: true
bind:
propagation: rslave
command: ["--path.rootfs=/host"]
restart: unless-stopped
mysqld_exporter:
image: prom/mysqld-exporter:latest
network_mode: host
environment:
- DATA_SOURCE_NAME=exporter:${MYSQL_EXPORTER_PASS}@(127.0.0.1:3306)/
restart: unless-stopped
YAML
docker compose --env-file /opt/exporters/.env -f /opt/exporters/docker-compose.yml up -d
Security Group/Firewall: izinkan port 9100 dan 9104 dari hanya IP publik server monitoring. Hindari “0.0.0.0/0”.
Bagian B — Server Monitoring: Prometheus + Grafana
Kita jalankan keduanya via Docker Compose, dengan file konfigurasi Prometheus yang menarget EC2.1) Instal Docker & Compose Plugin
Copysudo -i
apt-get update -y
apt-get install -y docker.io docker-compose-plugin
systemctl enable --now docker
2) Siapkan Berkas Prometheus & Grafana
GantiIP_EC2 dengan IP publik atau private EC2 (sesuai rute jaringan). Password admin Grafana juga silakan diganti.
Copy
mkdir -p /opt/monitoring/{prometheus,grafana/provisioning/datasources}
cat > /opt/monitoring/prometheus/prometheus.yml <<'YAML'
global:
scrape_interval: 15s
scrape_configs:
- job_name: "self"
static_configs:
- targets: ["prometheus:9090"]
- job_name: "ec2-node"
static_configs:
- targets: ["IP_EC2:9100"]
labels:
instance: "mysql-ec2"
- job_name: "ec2-mysql"
static_configs:
- targets: ["IP_EC2:9104"]
labels:
instance: "mysql-ec2"
YAML
cat > /opt/monitoring/grafana/provisioning/datasources/prometheus.yml <<'YAML'
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
uid: prometheus-ds
access: proxy
url: http://prometheus:9090
isDefault: true
editable: true
YAML
cat > /opt/monitoring/docker-compose.yml <<'YAML'
version: "3.8"
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom_data:/prometheus
ports:
- "9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=GantiPasswordGrafana!
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- graf_data:/var/lib/grafana
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:ro
ports:
- "3000:3000"
depends_on:
- prometheus
restart: unless-stopped
volumes:
prom_data:
graf_data:
YAML
docker compose -f /opt/monitoring/docker-compose.yml up -d
Grafana Quick-Start (Datasource & Dashboard)
- Buka Grafana:
http://IP_MONITORING:3000→ loginadmin / GantiPasswordGrafana! - Datasource “Prometheus” sudah terprovisi (lihat Connections → Data sources).
- Impor dashboard:
- Node Exporter Full (ID populer:
1860) → memantau host EC2. - MySQL (mysqld_exporter) (contoh ID umum:
7362dari Percona) → metrik MySQL.
- Node Exporter Full (ID populer:
# Threads connected
mysql_global_status_threads_connected{instance="mysql-ec2"}
# Queries per second (QPS)
rate(mysql_global_status_queries{instance="mysql-ec2"}[5m])
# InnoDB buffer pool hit ratio (perkiraan)
1 - (rate(mysql_global_status_innodb_buffer_pool_reads{instance="mysql-ec2"}[5m])
/ rate(mysql_global_status_innodb_buffer_pool_read_requests{instance="mysql-ec2"}[5m]))
# Memory host (persentase)
(1 - (node_memory_MemAvailable_bytes{instance="mysql-ec2"}
/ node_memory_MemTotal_bytes{instance="mysql-ec2"})) * 100
Verifikasi & Uji Cepat
Copy# Di EC2:
docker ps
curl -s http://127.0.0.1:9100/metrics | head
curl -s http://127.0.0.1:9104/metrics | head
Copy
# Di server monitoring:
docker ps
curl -s http://127.0.0.1:9090/targets | grep -E "ec2-(node|mysql)" -n
Troubleshooting Ringkas
- Prometheus tidak melihat target → Cek Security Group/Firewall EC2: port
9100/9104hanya dari IP monitoring, namun pastikan memang diizinkan dari IP tersebut. - mysqld_exporter 401/akses ditolak → Pastikan user/grant MySQL benar, host
127.0.0.1, danDATA_SOURCE_NAMEsesuai. - Grafana tidak ada data → Periksa datasource, pastikan menunjuk ke Prometheus internal (
http://prometheus:9090) dan status target di Prometheus “UP”. - Arsitektur ARM (t4g.*) gagal tarik image → Gunakan image resmi multi-arch (sudah disediakan di contoh). Jika masih gagal,
docker manifest inspect <image>dan pilih tag lain yang mendukunglinux/arm64.
Catatan Keamanan & Produksi
- Batasi akses port exporter (9100/9104) hanya dari Prometheus server.
- Ganti semua password contoh. Simpan rahasia di file terproteksi (
chmod 600) atau Secrets Manager. - Harden Grafana (nonaktifkan sign-up, ubah password admin, aktifkan HTTPS via reverse proxy bila publik).
- Backup volume Prometheus/Grafana, dan rencanakan retensi metrik.
Kesimpulan
Dengan pola exporter → Prometheus → Grafana, Anda mendapat visibilitas real-time atas MySQL di EC2 dan kesehatan host. Mulai dari QPS, koneksi, hingga resource host, semuanya tersaji. Tinggal kembangkan alerting dan dashboard sesuai SLO Anda.Sumber/Referensi
Post Terkait
Membangun Frontend Vendor-Agnostic yang Tahan Perubahan
Artikel ini membahas pendekatan arsitektur frontend yang berfokus pada kontrak internal agar aplikasi web tetap stabil,...
Cara Membuat Localhost Jadi Online dengan Cloudflare Tunnel (Pakai Domain Sendiri)
Panduan praktis untuk mempublikasikan aplikasi yang berjalan di localhost (misalnya web app di port 3000/5173/8080) agar...
Perbedaan Cloud File Storage dan Cloud Object Storage: Memahami Dua Paradigma Penyimpanan Data
Artikel ini membahas perbedaan fundamental antara Cloud File Storage dan Cloud Object Storage dengan fokus pada arsitekt...