Repository ini berisi implementasi centralized logging dan system monitoring menggunakan ELK Stack serta Prometheus & Grafana.
Selain deployment monitoring, proyek ini juga mencakup simulasi skenario keamanan untuk menganalisis indikasi ancaman dan dampaknya terhadap sistem.
flowchart LR
User -->|HTTP Request| FlaskApp
FlaskApp -->|Application Logs| LogFile
LogFile --> Filebeat
Filebeat --> Elasticsearch
Elasticsearch --> Kibana
NodeExporter --> Prometheus
Prometheus --> Grafana
- Docker & Docker Compose
- Elasticsearch 8.11
- Kibana 8.11
- Flask (Python)
- Prometheus
- Node Exporter
- Grafana
devsecops-monitoring/
├── app/
│ └── app.log
│ └── app.py
├── Dockerfile
├── docker-compose.yml
└── prometheus.yml
docker compose up -d- Elasticsearch: http://localhost:9200
- Kibana: http://localhost:5601
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000
Login Grafana:
username: admin
password: admin
File app.py digunakan untuk menghasilkan log aplikasi.
import logging
import os
from flask import Flask
app = Flask(__name__)
LOG_DIR = "/app"
LOG_FILE = "/app/app.log"
# pastikan folder log ada
os.makedirs(LOG_DIR, exist_ok=True)
logging.basicConfig(
filename=LOG_FILE,
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s"
)
@app.route("/")
def home():
app.logger.info("User accessed home page")
return "Hello DevSecOps"
@app.route("/login")
def login():
app.logger.warning("Failed login attempt")
return "Login failed"
@app.route("/error")
def error():
app.logger.error("Application error occurred")
return 1 / 0
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)Log aplikasi Flask disimpan ke file app.log dan dikirim ke Elasticsearch menggunakan Filebeat (standalone).
Gunakan Kibana Discover untuk mencari log:
message : "Failed login attempt"
log.level : "error"
URL:
http://prometheus:9090
Dashboard ID:
1860
Dashboard ini digunakan untuk memantau:
- CPU Usage
- Memory Usage
- Load Average
Trigger error:
Invoke-WebRequest http://localhost:5000/errorHasil:
- Log level ERROR tercatat
- Error terdeteksi di Kibana
Simulasi:
for ($i=1; $i -le 30; $i++) {
Invoke-WebRequest http://localhost:5000/login -UseBasicParsing
}Indikasi:
- Banyak log login gagal dalam waktu singkat
- Pola brute force attack
Simulasi CPU tinggi:
1..8 | ForEach-Object {
Start-Job { while ($true) { } }
}Hentikan simulasi:
Get-Job | Remove-Job -ForceHasil:
- Lonjakan CPU terlihat di Grafana
- Sistem mengalami resource pressure
- Error aplikasi menunjukkan potensi bug atau eksploitasi
- Login gagal berulang mengindikasikan brute force attack
- Lonjakan CPU menunjukkan potensi denial of service
- Penurunan performa aplikasi
- Risiko account takeover
- Potensi downtime akibat resource exhaustion
Implementasi monitoring dengan ELK Stack serta Prometheus dan Grafana memungkinkan deteksi dini terhadap ancaman keamanan. Dengan melakukan simulasi error aplikasi, brute force login, dan beban sistem tinggi, sistem monitoring mampu memberikan visibilitas terhadap indikasi serangan dan dampaknya. Monitoring yang baik menjadi fondasi penting dalam penerapan DevSecOps untuk menjaga keamanan dan ketersediaan sistem.