118 Middleware Resolver untuk Logging dan Monitoring
Middleware telah menjadi tulang punggung dari ekosistem web modern, terutama pada aplikasi dengan arsitektur microservices atau monolith yang kompleks. Salah satu pendekatan powerful dalam dunia Node.js API development adalah penggunaan middleware resolver di dalam pengelolaan logging dan monitoring. Di artikel ini, saya akan membahas secara mendalam penerapan middleware resolver nomor 118, sebuah pola yang saya temukan sangat efektif dalam build logging dan monitoring pipeline. Kita juga akan membahas contoh implementasi, simulasi, dan analisis kinerja berdasarkan pengalaman di dunia nyata.
Apa Itu Middleware Resolver?
Middleware resolver adalah sebuah fungsi atau serangkaian fungsi yang menjalankan proses tertentu (seperti logging, authentication, monitoring, dsb.) sebelum atau sesudah request utama diproses oleh server. Konsep ini sangat sering digunakan di framework seperti Express.js, Koa, bahkan di GraphQL middleware.
Keunggulan middleware resolver adalah kemudahan dalam mengelola cross-cutting concerns seperti logging dan monitoring, tanpa perlu mengotori business logic utama. Kita cukup menempelkan resolver pada route atau endpoint tertentu dan segala logika terkait logging akan berjalan otomatis.
Logging dan Monitoring: Kenapa Penting?
Sebelum kita diving ke middleware-nya, mari kita ingatkan diri sendiri: kenapa kita peduli soal logging dan monitoring?
- Logging: Bantu debug, audit, dan trace request/response flow.
- Monitoring: Deteksi masalah lebih awal, insight performa, dan upaya scaling yang presisi.
Pada kasus nyata, logging yang baik mampu menurunkan waktu downtime dan lebih banyak “insiden kecil” bisa didiagnosis sebelum menjadi krisis besar.
Middleware Resolver #118: Pola yang Praktis
Ketika sampai di angka ratusan resolvers, saya menyadari pattern khusus pada resolver ke-118 yang saya gunakan di beberapa project angular backend dan Node.js. Pola ini:
- Memisahkan logging request/response secara detail.
- Menghitung waktu proses tiap request (performance monitoring).
- Flexible: bisa plug ke berbagai stack (Express, Koa, Fastify, dsb).
- Suport optional telemetry push ke services eksternal seperti Datadog atau Grafana.
Mari lihat diagram flow middleware logging ini.
flowchart LR
A[Incoming Request] --> B[Middleware #118]
B --> C{Logging Mode?}
C --Yes--> D[Log Request]
C --No--> E[Skip Logging]
D --> F[Start Timer]
E --> F
F --> G[Process Handler]
G --> H[Stop Timer & Log Response]
H --> I[Push Metric to Monitoring]
I --> J[Send Response]
Contoh Implementasi di Express.js
Berikut adalah contoh middleware resolver #118 untuk logging dan monitoring. Inti kodenya sederhana namun powerful.
const fs = require('fs');
const path = require('path');
function middleware118(options = {}) {
return function (req, res, next) {
const {
logRequest = true,
logResponse = true,
monitorTime = true,
telemetryPush = false
} = options;
const startTime = Date.now();
if (logRequest) {
console.log(`[REQ] ${req.method} ${req.url} @ ${new Date().toISOString()}`);
}
// Simulasi push ke monitoring eksternal
function pushTelemetry(durationMs) {
if (telemetryPush) {
// Contoh push ke file sebagai dummy
fs.appendFileSync(
path.join(__dirname, "metrics.log"),
`endpoint=${req.url},duration=${durationMs}ms\n`
);
}
}
// Listen response end
res.on('finish', () => {
const duration = Date.now() - startTime;
if (logResponse) {
console.log(
`[RES] ${req.method} ${req.url} -> ${res.statusCode} in ${duration}ms`
);
}
// Monitoring
if (monitorTime) {
pushTelemetry(duration);
}
});
next();
};
}
// Penggunaan pada Express
const express = require('express');
const app = express();
app.use(middleware118({ logRequest: true, telemetryPush: true }));
app.get('/hello', (req, res) => {
setTimeout(() => {
res.json({ message: "World!", time: Date.now() });
}, Math.floor(Math.random() * 150));
});
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
Simulasi dan Analisis
Mari kita lakukan simulasi 3 request ke endpoint /hello.
| Request | Response Time (ms) | Status | Log Request | Log Response | Telemetry Push |
|---|---|---|---|---|---|
| #1 | 52 | 200 | Ya | Ya | Ya |
| #2 | 101 | 200 | Ya | Ya | Ya |
| #3 | 37 | 200 | Ya | Ya | Ya |
Pada setiap request, berikut output yang akan muncul di console:
[REQ] GET /hello @ 2024-06-15T08:00:00.000Z
[RES] GET /hello -> 200 in 52ms
[REQ] GET /hello @ 2024-06-15T08:00:01.000Z
[RES] GET /hello -> 200 in 101ms
[REQ] GET /hello @ 2024-06-15T08:00:02.000Z
[RES] GET /hello -> 200 in 37ms
Dan file metrics.log akan berisi:
endpoint=/hello,duration=52ms
endpoint=/hello,duration=101ms
endpoint=/hello,duration=37ms
Tabel Fitur Middleware #118
| Fitur | Keterangan | Kustomisasi |
|---|---|---|
| Log Request | Mencatat metode, endpoint, dan waktu request masuk | Ya |
| Log Response | Log status dan response time | Ya |
| Performance Timer | Hitung waktu proses tiap endpoint | Ya |
| Telemetry Push | Simpan metric ke file/log/monitoring service | Ya |
| Plug & Play | Cocok untuk Express, Koa, Fastify, GraphQL | Ya |
Kesimpulan
Middleware resolver #118 adalah salah satu pattern yang menurut saya wajib dimiliki di project Node.js modern, terutama ketika kebutuhan observability dan audit semakin meningkat. Dengan pattern ini, implementasi logging dan monitoring menjadi lebih rapi, fleksibel, dan scalable tanpa menambah kerumitan di core API.
Beberapa tips dari penggunaan di proyek nyata:
- Pastikan middleware di-load sebelum route utama untuk comprehensive logging.
- Jangan lupa untuk disabling telemetry push pada environment development.
- Expand middleware dengan traceID untuk distributed tracing (jika butuh).
Jangan ragu melakukan fork dan modifikasi middleware ini untuk kebutuhan tim dan project kamu. Selamat bereksperimen, semoga observability aplikasi kamu naik satu level lagi!