HAProxy 簡介
HAProxy(High Availability Proxy)是一款廣泛使用的高性能負載均衡器,支持 TCP 和 HTTP 協議,提供高可用性、負載均衡和代理服務。它特別適用于負載較大的 Web 站點,能夠支持數以萬計的并發連接,并且可以簡單安全地整合到現有架構中。可觀測性可以幫助快速定位和解決 HAProxy 及其后端服務的問題。HAProxy 2.0 及以上版本提供了完善的指標暴露體系,可以把指標暴露到指定端口,然后由 Prometheus 進行采集。
觀測云
觀測云是一款專為 IT 工程師打造的全鏈路可觀測產品,它集成了基礎設施監控、應用程序性能監控和日志管理,為整個技術棧提供實時可觀察性。這款產品能夠幫助工程師全面了解端到端的用戶體驗追蹤,了解應用內函數的每一次調用,以及全面監控云時代的基礎設施。此外,觀測云還具備快速發現系統安全風險的能力,為數字化時代提供安全保障。觀測云的 DataKit 擁有 prom 采集器,可以取代 Prometheus 采集 HAProxy 指標,然后通過儀表板和監控器實時掌握 HAProxy 的運行情況。
前置條件
- Centos7.9 主機?
192.168.0.2
、192.168.0.3
192.168.0.2
?安裝 Docker,Docker Compose192.168.0.2
、192.168.0.3
?安裝 Nginx,端口 80(可以使用其它代理服務)
部署 DataKit
DataKit 是一個開源的、跨平臺的數據收集和監控工具,由觀測云開發并維護。它旨在幫助用戶收集、處理和分析各種數據源,如日志、指標和事件,以便進行有效的監控和故障排查。DataKit 支持多種數據輸入和輸出格式,可以輕松集成到現有的監控系統中。
登錄觀測云控制臺,在「集成」 - 「DataKit」選擇對應安裝方式,當前采用 Linux 主機部署 DataKit。
復制第 2 步中的安裝命令,在?192.168.0.2
?主機上執行。
采集步驟
1、部署 HAProxy
HAProxy 部署在?192.168.0.2
?主機上,創建?/data/haproxy/haproxy.cfg
?文件,其中日志輸出到 stdout,負載配置的是前置條件中的 Nginx,指標暴露在 8405 端口,backend 配置的是前置條件中的 Nginx。
globallog stdout format raw local0 info maxconn 4000daemondefaultsmode tcplog globaloption tcplogoption dontlognulloption http-server-closeoption redispatchretries 3timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mtimeout server 1mtimeout http-keep-alive 10stimeout check 10smaxconn 3000frontend prometheusbind *:8405mode httphttp-request use-service prometheus-exporter if { path /metrics }no log
frontend frontend_webdescription "frontend frontend_web"bind :8080default_backend webservers
backend webservers balance roundrobinserver httpA 192.168.0.2:80 check inter 500 rise 3 fall 2 weight 1server httpB 192.168.0.3:80 check inter 1500 rise 3 fall 2 weight 1
創建?/data/haproxy/docker-compose.yaml
?文件。
version: '3.8'
services:haproxy:image: haproxy:3.1.6container_name: haproxyvolumes:- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfgports:- 8080:8080- 8405:8405logging:driver: "json-file" options:max-size: "10m" max-file: "3" networks:- haproxy-networknetworks:haproxy-network:driver: bridge
啟動 HAProxy。
docker-compose up -d
訪問?192.168.0.2:8080
?產生負載調用。
2、指標采集
登錄?192.168.0.2
,執行如下操作開通采集器。
cd /usr/local/datakit/conf.d/prom
cp prom.conf.sample haproxy.conf
修改 urls 和 source。
重啟 DataKit。
datakit service -R
在「指標」 - 「指標管理」中能查看到采集的 haproxy 指標。
3、日志采集
Docker Compose 部署的 HAProxy,日志輸出到了 stdout,DataKit 容器采集器默認采集的 stdout 日志,無需再配置。
關鍵指標
在 HAProxy 中,監控 Frontend(前端)、Backend(后端)、Server(服務器)的常用指標對于性能優化。故障排查和容量規劃至關重要。
Frontend 關鍵指標
指標名稱 | 描述 | 類型 |
---|---|---|
frontend_current_sessions | 當前在前端活躍的會話數量,會隨會話的建立和結束動態變化 | Gauge |
frontend_limit_sessions | 前端允許的最大會話數量,由配置文件中的 maxconn 參數決定 | Gauge |
frontend_connections_total | 自 HAProxy 工作進程啟動以來,前端接收的總連接數 | Counter |
frontend_internal_errors_total | 自 HAProxy 進程啟動以來,前端發生的內部錯誤總數 | Counter |
frontend_bytes_in_total | 自 HAProxy 進程啟動以來,前端接收的總字節數 | Counter |
frontend_bytes_out_total | 自 HAProxy 進程啟動以來,前端發送的總字節數 | Counter |
frontend_intercepted_requests_total | 自 HAProxy 進程啟動以來,前端攔截的 HTTP 請求總數 | Counter |
Backend 關鍵指標
指標名稱 | 描述 | 類型 |
---|---|---|
backend_bytes_in_total | 自 HAProxy 進程啟動以來,后端接收的總字節數 | Counter |
backend_bytes_out_total | 自 HAProxy 進程啟動以來,后端發送的總字節數 | Counter |
backend_internal_errors_total | 自 HAProxy 進程啟動以來,后端發生的內部錯誤總數 | Counter |
backend_response_errors_total | 自 HAProxy 工作進程啟動以來,后端返回的無效響應總數 | Counter |
backend_current_queue | 當前在后端隊列中等待處理的請求數量 | Gauge |
backend_max_queue | 自 HAProxy 進程啟動以來,后端隊列中曾經達到的最大請求數量 | Gauge |
backend_loadbalanced_total | 自 HAProxy 進程啟動以來,后端負載均衡器成功分配到后端服務器的請求數量 | Counter |
backend_max_response_time_seconds | 后端服務器響應請求所花費的最大時間(單位:秒) | Gauge |
backend_current_sessions | 當前在后端活躍的會話數量 | Gauge |
backend_max_sessions | 自 HAProxy 進程啟動以來,后端遇到的最大并發會話數 | Gauge |
backend_sessions_total | 自 HAProxy 進程啟動以來,后端處理的總會話數 | Counter |
Server 關鍵指標
指標名稱 | 描述 | 類型 |
---|---|---|
server_check_failures_total | 自 HAProxy 工作進程啟動以來,后端服務器健康檢查失敗的總次數 | Counter |
server_connection_errors_total | 自 HAProxy 工作進程啟動以來,后端服務器連接失敗的總次數 | Counter |
server_aborts_total | 自 HAProxy 工作進程啟動以來,后端服務器主動中斷連接的總次數 | Counter |
server_bytes_in_total | 自 HAProxy 工作進程啟動以來,某個特定后端服務器接收的總字節數 | Counter |
server_bytes_out_total | 自 HAProxy 工作進程啟動以來,某個特定后端服務器發送的總字節數 | Counter |
server_sessions_total | 自 HAProxy 工作進程啟動以來,某個特定后端服務器處理的總會話數 | Counter |
server_connection_attempts_total | 自 HAProxy 工作進程啟動以來,后端服務器的連接嘗試次數總和 | Counter |
server_connection_reuses_total | 自 HAProxy 工作進程啟動以來,某個特定后端服務器的連接重用次數總和 | Counter |
server_weight | 定義后端服務器的權重,權重越高,分配到該服務器的請求就越多 | 配置參數 |
場景視圖
登錄觀測云控制臺,點擊「場景」 -「新建儀表板」,輸入 “haproxy”, 選擇 “HAProxy 監控視圖”,點擊 “確定” 即可添加視圖。
監控器(告警)
后端服務器檢測失敗
簡要描述:后端服務檢測失敗觸發告警。
后端活躍服務器數量小于1
簡要描述:后端活躍服務器數量小于 1 觸發告警。
前端 http 響應 4xx 錯誤率過高
簡要描述:前端 http 響應 4消息錯誤率過高觸發告警。
總結
HAProxy 通常用于高可用性場景,可觀測性可以確保在出現問題時能夠及時響應,減少停機時間。通過收集和分析 HAProxy 的指標(如連接數、響應時間、吞吐量等),可以實時監控其性能,確保系統運行在最佳狀態。