Ec2-Promethus-Grafana

πŸ“ˆ Memonitor Kunjungan Website di EC2 Menggunakan Prometheus dan Grafana

πŸ“ˆ 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

  1. Login ke Grafana
  2. Tambahkan data source Prometheus: URL http://prometheus:9090
  3. 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

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *