π Memonitor Kunjungan Website di EC2 Menggunakan Prometheus dan Grafana
Jika kamu menjalankan website di EC2 dan ingin mengetahui berapa banyak pengunjung yang mengaksesnya, kamu bisa menggunakan kombinasi Nginx Log Exporter + Prometheus + Grafana. Dalam artikel ini saya akan menjelaskan langkah demi langkah setup monitoring dari server eksternal untuk scraping metric kunjungan.
π§ Arsitektur Monitoring
[EC2 (nginxlog-exporter)] β Log Akses Nginx
β
Scraping via HTTP (port 4040)
β
[Monitoring Server (Prometheus + Grafana)]
π οΈ Persiapan
1. EC2 Instance dengan Nginx
- Pastikan website kamu berjalan di Nginx.
- Log akses aktif di
/var/log/nginx/access.log
.
2. Pastikan Format Log Nginx adalah combined
Buka file konfigurasi Nginx di EC2, misalnya:
/etc/nginx/nginx.conf
Pastikan bagian log_format
seperti ini:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
Lalu pastikan access log menggunakan format combined
:
access_log /var/log/nginx/access.log combined;
Setelah itu, restart nginx:
sudo systemctl restart nginx
π§ Langkah 1: Install nginxlog-exporter
di EC2
nginxlog-exporter
akan membaca log akses Nginx dan mengekspornya dalam format yang bisa dibaca oleh Prometheus. Ada dua metode untuk instalasinya:
π¦ Opsi A: Install Langsung (Tanpa Docker)
1. Unduh dan Install Binary
wget https://github.com/martin-helmich/prometheus-nginxlog-exporter/releases/download/v1.9.2/prometheus-nginxlog-exporter_1.9.2_linux_amd64.de
apt install ./prometheus-nginxlog-exporter_1.9.2_linux_amd64.deb
2. Buat File Konfigurasi
Simpan sebagai /etc/nginxlog-exporter.yml
:
listen:
port: 4040
address: 0.0.0.0
namespaces:
default:
source_files:
- /var/log/nginx/access.log
format: combined
3. Jalankan nginxlog-exporter
prometheus-nginxlog-exporter -config-file /etc/nginxlog-exporter.yml
Catatan: Gunakan tmux
, screen
, atau systemd service agar tetap berjalan di background.
4. Jalankan menggunakan sysmtemd (optional)
a. Membuat user khusus tanpa shell login
sudo useradd -rs /bin/false prometheus_nginxlog_exporter
b. Membuat file systemd service
cat <<EOF | sudo tee /etc/systemd/system/prometheus_nginxlog_exporter.service
[Unit]
Description=Prometheus Nginxlog Exporter
After=network.target
[Service]
User=prometheus_nginxlog_exporter
ExecStart=/usr/sbin/prometheus-nginxlog-exporter
[Install]
WantedBy=default.target
EOF
c. Menjalankan systemd
sudo systemctl daemon-reexec # atau daemon-reload
sudo systemctl enable prometheus_nginxlog_exporter
sudo systemctl start prometheus_nginxlog_exporter
sudo systemctl status prometheus_nginxlog_exporter
π³ Opsi B: Install Menggunakan Docker
1. Buat File Konfigurasi
Buat file config.yml
di direktori kerja:
listen:
port: 4040
address: 0.0.0.0
namespaces:
default:
source_files:
- /var/log/nginx/access.log
format: combined
2. Jalankan Container
docker run -d \
--name nginxlog-exporter \
-p 4040:4040 \
-v /var/log/nginx:/var/log/nginx:ro \
-v $(pwd)/config.yml:/etc/nginxlog-exporter/config.yml \
martinhelmich/prometheus-nginxlog-exporter
β Verifikasi
Buka di browser atau curl:
curl http://<IP_EC2>:4040/metrics
Jika berhasil, akan muncul metrik seperti nginx_http_response_count_total
.
π Buka Akses Port 4040
- Masuk ke AWS EC2 Console β Security Groups
- Edit inbound rules: Tambahkan rule TCP port 4040 dari IP Prometheus server
π¦ Langkah 2: Setup Prometheus + Grafana di Server Monitoring
Struktur direktori:
monitoring-server/
βββ docker-compose.yml
βββ prometheus/
β βββ prometheus.yml
a. File docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-storage:/var/lib/grafana
volumes:
grafana-storage:
b. File prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'nginxlog-ec2'
static_configs:
- targets:
- <EC2_PUBLIC_IP>:4040
Ganti <EC2_PUBLIC_IP> dengan IP publik EC2 kamu.
c. Jalankan stack
docker compose up -d
π Akses Dashboard
Tool | URL | Username | Password |
---|---|---|---|
Prometheus | http://<server-ip>:9090 | – | – |
Grafana | http://<server-ip>:3000 | admin | admin |
π Visualisasi di Grafana
- Login ke Grafana
- Tambahkan data source Prometheus: URL
http://prometheus:9090
- Buat dashboard baru, gunakan query seperti:
rate(nginx_http_response_count_total[1m])
sum(rate(nginx_http_response_count_total[1m])) by (status)
π Tips Keamanan
- Jangan expose port 4040 ke publik β batasi hanya dari IP Prometheus
- Gunakan VPC Peering, SSH tunnel, atau VPN jika perlu
- Untuk produksi, gunakan HTTPS dan basic auth
π§© Kesimpulan
Dengan kombinasi nginxlog-exporter, Prometheus, dan Grafana, kamu bisa:
- Memantau total kunjungan web dari log
- Mengetahui distribusi status response (200, 404, dll)
- Menganalisis traffic secara real-time dari server eksternal
Jika kamu tertarik untuk menambahkan:
- Alert jika trafik melonjak
- Auto discovery untuk banyak EC2
- Monitoring multi-metric lainnya (CPU, RAM, Disk)
…tunggu artikel lanjutan saya atau tinggalkan komentar!
βοΈ Ditulis oleh: Setyo Agung Nugroho
π Website: https://cembeliq.com
π§ Stack: AWS Β· Docker Β· Prometheus Β· Grafana Β· Nginx