Belajar HAProxy - Observability & Integration
Episode 18 of 23

Belajar HAProxy - Observability & Integration

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Menyediakan Metrik untuk Prometheus

Membuka Endpoint Metrik

Sejak HAProxy 2.x, eksport prometheus tersedia langsung tanpa agent tambahan:

Endpoint metrik Prometheus
listen prometheus
    bind *:8405
    mode http
    http-request use-service prometheus-exporter if { path /metrics }
    no server

Baris http-request use-service prometheus-exporter if { path /metrics } memanggil service internal eksport metrik, dan no server menandakan listen ini tidak memiliki backend biasa.

Memverifikasi Endpoint

Pastikan metrik keluar dengan benar:

Ambil sample metrik
curl -s http://localhost:8405/metrics | head -n 5

curl -s http://localhost:8405/metrics | head -n 5 menampilkan baris pertama metrik, misalnya haproxy_frontend_requests_total. Jika muncul, konfigurasi eksport sudah benar.

Konfigurasi Prometheus

Tambahkan target ini di prometheus.yml:

Scrape target Prometheus
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.

Integrasi Dashboard dan Log

Grafana dengan Dashboard Standar

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.

Mengalirkan Log ke Loki

Loki menarik log dari syslog. Konfigurasikan HAProxy untuk menulis log ke remote syslog:

Kirim 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 global

Direktif 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.

ELK Stack

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.

Tracing dan Correlation ID

Menambahkan Correlation ID

Saat satu request melewati banyak layanan, diperlukan ID yang sama di seluruh jejaknya. HAProxy bisa membuat dan menyebarkannya:

Buat dan sebarkan request ID
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_back

http-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.

Menelusuri Request Lintas Layanan

Dengan X-Request-ID di log semua layanan, kalian bisa menelusuri satu request:

Cari request di seluruh layanan
curl -s -I https://api.example.com/orders/1 -k | grep -i x-request-id

Catat 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.

Menghubungkan ke Tracing Eksternal

Jika kalian sudah memakai OpenTelemetry, correlation ID ini bisa dipakai sebagai traceparent:

Sambungkan ke tracing eksternal
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.

Merancang Observability yang Sehat

Metrik, Log, dan Jejak

Kombinasi yang seimbang:

  • Metrik: request rate, error rate, latensi, koneksi — untuk alert dan kapasitas.
  • Log: detail setiap request — untuk debugging.
  • Jejak: perjalanan satu request lintas layanan — untuk menemukan bottleneck.

Ketiganya saling melengkapi; jangan mengandalkan salah satu saja.

Menjaga Biaya Tetap Wajar

Log lengkap mahal. Terapkan kebijakan sampling dan penyimpanan berjenjang: log lengkap beberapa hari, ringkasan lebih lama. Metrik Prometheus disimpan dengan retensi sesuai kebutuhan alerting.

Penutup

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.
  • Metrik utama: request total, koneksi aktif, health failures, dan latensi.
  • Kirim log ke remote syslog untuk Loki atau Logstash.
  • uuid() dan X-Request-ID membangun correlation ID lintas layanan.
  • Metrik, log, dan jejak adalah tiga pilar yang saling melengkapi.

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.

Belajar HAProxy - Observability & Integration | Belajar HAProxy