Episode ini menghubungkan HAProxy ke ekosistem observability: mengekspos metrik ke Prometheus, membangun dashboard di Grafana, mengalirkan log ke Loki dan ELK, serta menerapkan pola correlation ID untuk menelusuri request lintas layanan.

Metrik di halaman stats bagus untuk manusia, tapi tidak untuk otomasi. Episode 18 membawa HAProxy ke dunia observability modern: metrik yang bisa ditarik Prometheus, log yang mengalir ke Loki dan ELK, serta korelasi request yang membuat debugging lintas layanan menjadi mungkin.
Kalian akan membangun pipeline observability yang nyata — bukan sekadar teori — mulai dari endpoint metrik sampai pola correlation ID.
Sejak HAProxy 2.x, eksport prometheus tersedia langsung tanpa agent tambahan:
listen prometheus
bind *:8405
mode http
http-request use-service prometheus-exporter if { path /metrics }
no serverBaris http-request use-service prometheus-exporter if { path /metrics } memanggil service internal eksport metrik, dan no server menandakan listen ini tidak memiliki backend biasa.
Pastikan metrik keluar dengan benar:
curl -s http://localhost:8405/metrics | head -n 5curl -s http://localhost:8405/metrics | head -n 5 menampilkan baris pertama metrik, misalnya haproxy_frontend_requests_total. Jika muncul, konfigurasi eksport sudah benar.
Tambahkan target ini di prometheus.yml:
scrape_configs:
- job_name: haproxy
static_configs:
- targets: ["haproxy1:8405", "haproxy2:8405"]Target haproxy1:8405 memberitahu Prometheus endpoint mana yang di-scrape. Pastikan jaringan antara Prometheus dan HAProxy terbuka untuk port 8405.
Metrik Prometheus bisa langsung dipetakan di Grafana. Metrik yang paling penting:
haproxy_frontend_http_requests_total: total request per frontend.haproxy_server_current_sessions: koneksi aktif per server.haproxy_server_health_failures_total: jumlah kegagalan health check.haproxy_frontend_http_response_time_average: rata-rata waktu respons.Buat dashboard dengan panel rate: rate(haproxy_frontend_http_requests_total[5m]) untuk melihat request rate per 5 menit.
Loki menarik log dari syslog. Konfigurasikan HAProxy untuk menulis log ke remote syslog:
global
log 10.0.0.50:1514 local0
log 10.0.0.50:1514 local1 notice
defaults
mode http
option httplog
log globalDirektif log 10.0.0.50:1514 local0 mengirim log ke server syslog di 10.0.0.50. Loki dengan syslog receiver lalu memprosesnya, dan Grafana bisa menampilkan log berdampingan dengan metrik.
Untuk ELK, pola yang sama berlaku: log dikirim ke syslog, dikumpulkan oleh Logstash lewat input syslog atau filebeat, disimpan di Elasticsearch, dan divisualkan di Kibana. Filter utama di Logstash biasanya mengekstrak timestamp, frontend, backend, dan kode status dari baris log HTTP.
Saat satu request melewati banyak layanan, diperlukan ID yang sama di seluruh jejaknya. HAProxy bisa membuat dan menyebarkannya:
frontend api_front
bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem
mode http
option httplog
http-request set-var(txn.request_id) \
%[uuid(),lower]
http-request set-header X-Request-ID %[var(txn.request_id)]
log-format "%ci %[var(txn.request_id)] %ST %B %tr"
default_backend api_backhttp-request set-var(txn.request_id) %[uuid(),lower] membangkitkan UUID, lalu set-header X-Request-ID meneruskannya ke backend. Direktif log-format menyertakan ID ini di setiap baris log.
Dengan X-Request-ID di log semua layanan, kalian bisa menelusuri satu request:
curl -s -I https://api.example.com/orders/1 -k | grep -i x-request-idCatat nilai X-Request-ID dari curl -s -I ... | grep -i x-request-id, lalu gunakan nilai itu untuk mencari baris log HAProxy dan log aplikasi. Ini pola dasarnya distributed tracing tanpa library tambahan.
Jika kalian sudah memakai OpenTelemetry, correlation ID ini bisa dipakai sebagai traceparent:
http-request set-header traceparent \
"00-%[var(txn.request_id)]-0000000000000000-01"Baris di atas membentuk header traceparent sederhana dari UUID yang sama. Backend yang memakai OpenTelemetry akan langsung terhubung ke jejak yang sama.
Kombinasi yang seimbang:
Ketiganya saling melengkapi; jangan mengandalkan salah satu saja.
Log lengkap mahal. Terapkan kebijakan sampling dan penyimpanan berjenjang: log lengkap beberapa hari, ringkasan lebih lama. Metrik Prometheus disimpan dengan retensi sesuai kebutuhan alerting.
Episode 18 menjadikan HAProxy bagian dari ekosistem observability: metrik untuk Prometheus dan Grafana, log untuk Loki dan ELK, serta correlation ID untuk menelusuri request lintas layanan.
Inti yang harus dibawa pulang:
prometheus-exporter membuka endpoint metrik tanpa agent tambahan.uuid() dan X-Request-ID membangun correlation ID lintas layanan.Di episode 19 selanjutnya kita akan membahas HAProxy on Kubernetes & container environments — pola deployment DaemonSet, Deployment, dan sidecar, perbandingan ingress controller versus HAProxy standalone, serta manajemen konfigurasi dengan ConfigMaps dan Secrets.