Logging
Bangk-Shield mencatat event ke Workers Analytics Engine secara best-effort. Penulisan
dilakukan lewat ctx.waitUntil(), sehingga kegagalan logging tidak menahan atau menggagalkan
response ke klien.
Binding
Section titled “Binding”[[analytics_engine_datasets]]binding = "BANGK_ANALYTICS"dataset = "bangk_shield_events"Jika binding tidak ada, logEventBestEffort() langsung return. Tidak ada fallback ke
console.log atau penyimpanan lain. Tanpa binding ini, tidak ada event yang tersimpan.
Event yang dikirim
Section titled “Event yang dikirim”Event (vector) |
Kapan | score |
|---|---|---|
sqli, rce, ssrf, lfi, xss, recon |
Honeypot terpicu | Skor aktual |
circuit_breaker_block |
IP diblokir circuit breaker | 0 |
salt_fallback |
Salt tidak berasal dari KV | 0 |
engine_error |
Exception di alur utama | Tidak diisi |
Skema data point
Section titled “Skema data point”env.BANGK_ANALYTICS.writeDataPoint({ blobs: [event.ip || '', event.path || '', event.vector || '', String(Boolean(dropped))], doubles: [typeof event.score === 'number' ? event.score : 0], indexes: [event.vector || 'unknown'],});| Field | Isi |
|---|---|
blob1 |
IP klien |
blob2 |
Path request |
blob3 |
Vektor / jenis event |
blob4 |
Flag dropped |
double1 |
Skor |
index1 |
Vektor (dipakai sebagai index) |
Sampling
Section titled “Sampling”const SAMPLING_SCORE_THRESHOLD = 30;const SAMPLING_RATE = 0.2;Aturannya:
- Event dengan
score < 30hanya ditulis dengan probabilitas 20%. - Event dengan
score >= 30selalu ditulis. - Event tanpa
score(misalnyaengine_error) selalu ditulis.
Karena threshold deteksi default adalah 50, serangan yang benar-benar memicu honeypot selalu tercatat. Yang ter-sampling adalah event ber skor rendah.
Query contoh
Section titled “Query contoh”SELECT blob3 AS vector, count() AS events, avg(double1) AS avg_scoreFROM bangk_shield_eventsWHERE timestamp > NOW() - INTERVAL '24' HOURGROUP BY vectorORDER BY events DESCTop path yang paling sering diserang:
SELECT blob2 AS path, count() AS hitsFROM bangk_shield_eventsWHERE timestamp > NOW() - INTERVAL '24' HOURGROUP BY pathORDER BY hits DESCLIMIT 20Top IP:
SELECT blob1 AS ip, count() AS hitsFROM bangk_shield_eventsWHERE timestamp > NOW() - INTERVAL '24' HOURGROUP BY ipORDER BY hits DESCLIMIT 20Best-effort dan kuota
Section titled “Best-effort dan kuota”writeDataPoint() bersifat fire-and-forget. Jika kuota harian habis atau terjadi insiden,
error ditangkap dan dicetak ke console, tetapi tidak dilempar ke pemanggil.
try { env.BANGK_ANALYTICS.writeDataPoint({ /* ... */ });} catch (err) { console.error('[BANGK-SHIELD LOGGER] Analytics write failed:', err);}PRD menyebut adanya counter in-memory untuk metrik dropped events. Counter itu belum diimplementasikan.
Melihat log mentah
Section titled “Melihat log mentah”npm run tailPerintah ini menampilkan console.log, console.error, dan error runtime dari Worker.