Proyek ini bertujuan membangun sistem monitoring terpusat untuk memantau kesehatan server (Infrastructure Level) dan performa aplikasi (Application Level). Sistem ini menggunakan pendekatan “Pull-Based Mechanism” di mana server monitoring secara aktif mengambil data metrics dari target.

Komponen Utama:
-
Prometheus: Time-series database untuk pengumpulan metrik.
-
Grafana: Platform visualisasi dashboard.
-
Node Exporter: Agen pengirim metrik hardware (CPU/RAM/Disk).
-
cAdvisor: Agen pengirim metrik container Docker.
-
MySQL Exporter: Agen pengirim metrik internal database (QPS, Slow Query).
Topologi Infrastruktur:
Disini saya menggunakan 2 VPS terpisah untuk mensimulasikan lingkungan produksi yang aman.
-
VPS 1 (Monitoring Node):
-
IP: 43.xx.xx.113
-
Service: Prometheus, Grafana.
-
-
VPS 2 (Target Node / App Server):
-
IP: 43.xx.xx.238
-
Service: Docker (WordPress, MySQL), Node Exporter, cAdvisor, MySQL Exporter.
-
Langkah Implementasi:
Setup Monitoring Node (VPS 1):
Instalasi Prometheus & Grafana
Untuk instalasi Grafana dan Prometheus saya menggunakan scipr bash berikut untuk mempercepat proses instalasi:
#!/bin/bash
# Script Instalasi Prometheus & Grafana
# Jalankan dengan: sudo bash setup_monitoring.sh
echo "=== [1/4] Update System & Dependencies ==="
# Fix potensi error dpkg lock sebelum mulai
killall unattended-upgrades 2>/dev/null
dpkg --configure -a
apt-get update && apt-get install -y wget curl gnupg2 software-properties-common
echo "=== [2/4] Install Prometheus (Versi 2.45.0) ==="
useradd --no-create-home --shell /bin/false prometheus
mkdir -p /etc/prometheus /var/lib/prometheus
# Download Binary
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar -xvf prometheus-2.45.0.linux-amd64.tar.gz
# Pindahkan Binary & Config
cp prometheus-2.45.0.linux-amd64/prometheus /usr/local/bin/
cp prometheus-2.45.0.linux-amd64/promtool /usr/local/bin/
cp -r prometheus-2.45.0.linux-amd64/consoles /etc/prometheus
cp -r prometheus-2.45.0.linux-amd64/console_libraries /etc/prometheus
cp prometheus-2.45.0.linux-amd64/prometheus.yml /etc/prometheus/prometheus.yml
# Set Permission
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
chown prometheus:prometheus /usr/local/bin/prometheus
# Buat Systemd Service
cat <<EOF > /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now prometheus
echo "=== [3/4] Install Grafana OSS ==="
mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list
apt-get update
apt-get install -y grafana
systemctl enable --now grafana-server
echo "=== [4/4] Setup Selesai ==="
MY_IP=$(hostname -I | cut -d' ' -f1)
echo "Akses Prometheus: http://$MY_IP:9090"
echo "Akses Grafana : http://$MY_IP:3000 (User: admin/admin)"
Setup Infrastructure Monitoring (VPS 2):
Instalasi Node Exporter
Agar mempercepat proses instalasi saya menggunakan script bash berikut:
#!/bin/bash # Script Instalasi Node Exporter # Jalankan dengan: sudo bash setup_node_exporter.sh echo "=== Install Node Exporter ===" useradd --no-create-home --shell /bin/false node_exporter # Download cd /tmp wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz # Install Binary mv node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/ chown node_exporter:node_exporter /usr/local/bin/node_exporter # Buat Systemd Service cat <<EOF > /etc/systemd/system/node_exporter.service [Unit] Description=Node Exporter Wants=network-online.target After=network-online.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now node_exporter # Setup Firewall (UFW) ufw allow 9100/tcp # Node Exporter ufw allow 8080/tcp # cAdvisor ufw allow 9104/tcp # MySQL Exporter ufw reload echo "✅ Node Exporter berjalan di Port 9100"
Deployment Aplikasi & Monitoring Stack (Node 2):
Kita akan men-deploy WordPress, MySQL, dan agen monitoring khusus container.
Buat File Konfigurasi Database:
Demi keamanan (Security Best Practice), kita gunakan file config, bukan environment variable. Buat file my.cnf di folder project:
[client] user=root password=root_password_anda # Ganti dengan password yang sama di docker-compose host=db port=3306
Buat Docker Compose:
Buat file docker-compose.yml
version: '3.8'
services:
# --- APLIKASI UTAMA ---
wordpress:
image: wordpress:latest
container_name: wp_app
restart: always
ports: ["80:80"]
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root_password_anda
depends_on:
- db
db:
image: mysql:5.7
container_name: wp_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password_anda
volumes:
- db_data:/var/lib/mysql
# --- MONITORING STACK ---
# 1. cAdvisor (Monitor Container Resource)
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: always
ports: ["8080:8080"]
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
# 2. MySQL Exporter (Monitor Database Query)
mysql-exporter:
image: prom/mysqld-exporter
container_name: mysql_exporter
restart: always
ports: ["9104:9104"]
volumes:
- ./my.cnf:/cfg/my.cnf # Mount file config yg dibuat di langkah A
command:
- '--config.my-cnf=/cfg/my.cnf' # Perintah load config
depends_on:
- db
volumes:
db_data:
Kemudian jalan kan perintah
sudo docker compose up -d
Integrasi dengan Node 1
Edit konfigurasi Prometheus agar mengenali Node 2. File yang baru kita tambahkan: /etc/prometheus/prometheus.yml. Tambahkan di bagian scrape_configs:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# --- TARGET NODE 2 ---
- job_name: "vps_infrastructure"
static_configs:
- targets: ["IP_VPS_NODE_2:9100"]
- job_name: "docker_containers"
static_configs:
- targets: ["IP_VPS_NODE_2:8080"]
- job_name: "mysql_database"
static_configs:
- targets: ["IP_VPS_NODE_2:9104"]
Visualisasi pada Dashboard Grafana
Masuk ke Grafana, tambahkan Data Source Prometheus, lalu Import Dashboard berikut:
-
Node Exporter Full (ID:
1860)-
Fungsi: Monitoring kesehatan Server (CPU/RAM Global).
-
-
MySQL Overview (ID:
7362)-
Fungsi: Monitoring kinerja Database (QPS/Slow Query).
-
Note: Jika panel RAM menunjukan “No Data”, edit query panel tersebut dan ganti variabel dengan total RAM server (contoh:
/ 2147483648).
-
-
CADvisor Exporter (ID:
14282)-
Fungsi: Monitoring penggunaan RAM/CPU per Container Docker.
-
Validasi & Stress Test
Untuk melihat grafik pada dashboard grafana kita bisa melakukan pengujian pada aplikasi WordPress yang sudah kita deploy tersebut dengan menggunakan tool apache2-utils.
Install tool apache2-utils
sudo apt install apache2-utils
Skenarionya kita akan mencoba melakukan tes dengan membanjiri traffic yang berbeda beda untuk melihat perbedaan kenaikan grafik pada dashboard grafana
Percobaan 1 :
Pada percobaan ini berfokus pada traffic keseluruhan di sistem dan juga pada container, dengan pengujian ini otomatis grafik akan naik sesuai dengan beban dan kemampuan dari server dalam menangani traffic yang tinggi.
ab -n 500 -c 10 http://43.xx.xx.238/2025/12/31/test/

Percobaan 2 :
Pada percobaan 2 ini berfokus pada pengujian dari database. Pada saat pengujian menunjukkan kenaikan pada monitoring terkait aktivitas database yang tinggi.
ab -n 500 -c 10 http://43.157.211.238/?s=aaaaaaa

Kesimpulan
Proyek ini berhasil mendemonstrasikan implementasi sistem Full-Stack Observability yang mampu memisahkan dan memvisualisasikan beban kerja pada layer yang berbeda. Melalui serangkaian uji beban (stress testing) menggunakan Apache Bench, sistem monitoring terbukti mampu memberikan data real-time yang akurat untuk kebutuhan Root Cause Analysis.