Beranda

Clouds

Panduan Instalasi dan Konfigurasi Grafan...

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.

Panduan Instalasi dan Konfigurasi Grafana & Prometheus untuk Memantau MySQL di EC2 (Ubuntu 24)
Tujuan panduan ini: dari nol hingga Anda memiliki pemantauan MySQL yang solid. Di sisi EC2, kita memasang exporter (Node & MySQL). Di sisi server monitoring, kita menjalankan Prometheus + Grafana (Docker). Setelah itu, Grafana menampilkan metrik penting seperti koneksi, QPS, penggunaan buffer, sampai kesehatan host. Opini singkat: Observabilitas bukan kemewahan—ini sabuk pengaman ops. Sekali pasang, Anda akan bertanya: “mengapa tidak dari dulu?” Daftar Isi

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_exporter di 9100; mysqld_exporter di 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

Copy
sudo -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): Copy
mysql -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

Copy
sudo -i
apt-get update -y
apt-get install -y docker.io docker-compose-plugin
systemctl enable --now docker

2) Siapkan Berkas Prometheus & Grafana

Ganti IP_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)

  1. Buka Grafana: http://IP_MONITORING:3000 → login admin / GantiPasswordGrafana!
  2. Datasource “Prometheus” sudah terprovisi (lihat Connections → Data sources).
  3. Impor dashboard:
    • Node Exporter Full (ID populer: 1860) → memantau host EC2.
    • MySQL (mysqld_exporter) (contoh ID umum: 7362 dari Percona) → metrik MySQL.
    Masuk menu Dashboards → New → Import, masukkan ID, pilih datasource Prometheus.
Alternatif: buat panel sendiri. Beberapa PromQL contoh: Copy
# 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/9104 hanya 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, dan DATA_SOURCE_NAME sesuai.
  • 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 mendukung linux/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,...

29 Jan 2026

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

14 Jan 2026

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

14 Jan 2026

© 2026 Yowisben. Semua hak dilindungi.

Powered by LONTAR CMS v1.26.1