5.02021-11-21T21:52:04Z_Templates_Linux_T_Zbx_Lin_HAPROXY2_stats_Prometheus_T_Zbx_Lin_HAPROXY2_stats_Prometheus## Description
frontend stats bind *:8880 http-request use-service prometheus-exporter if { path /metrics } stats enable stats uri /stats stats refresh 10s
## Overview
Permit getting stats via prometheus exporter (since haproxy 2.0)
First, configure your haproxy to expose frontend stats page like this :
frontend stats
bind *:8880
http-request use-service prometheus-exporter if { path /metrics }
stats enable
stats uri /stats
stats refresh 10s
Then, check the item haproxy.prometheus.allmetrics URL.
Discovery for frontends, backends, servers.
* Check if <50% of backend are down (not up, like DRAIN, NOLB, etc )on a frontend.
* Check if connections are >90/95% of the limit on frontend
* Check status of frontend and backend.
_Templates_LinuxLinux : App : Haproxy- Haproxy Prometheus MetricsHTTP_AGENThaproxy.prometheus.allmetrics00TEXTLinux : App : Haproxyhttp://{HOST.CONN}:8880/metrics
HAProxy Backend DiscoverDEPENDENThaproxy.backend.discovery0{#BACKEND_NAME}@HAProxyNotStatsA0dbackend [{#BACKEND_NAME}] activeDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,act]01dLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_active_servers{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] backupDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,bck]01dLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_backup_servers{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] backend up-down transitionsDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,chkdown]01dLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_check_up_down_total{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetrics{last(0)}>{last(#1)}Backend {#BACKEND_NAME} number of down state changeHIGHYESbackend [{#BACKEND_NAME}] downtimeDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,downtime]01dsLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_downtime_seconds_total{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] Number of available serversDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,nb_available_servers_by_backend]01dLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_TO_JSONhaproxy_server_status{proxy="{#BACKEND_NAME}"}==1CUSTOM_VALUE0JSONPATH$.*.labels.serverCUSTOM_VALUE0JAVASCRIPTreturn value.split(",").lengthhaproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] Number of serversDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,nb_servers_by_backend]01dLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_TO_JSONhaproxy_server_status{proxy="{#BACKEND_NAME}"}CUSTOM_VALUE0JSONPATH$.*.labels.serverCUSTOM_VALUE0JAVASCRIPTreturn value.split(",").lengthhaproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] current sessionsDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,scur]01dsesLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_current_sessions{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] max sessionsDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,smax]01dsesLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_max_sessions{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetricsbackend [{#BACKEND_NAME}] statusDEPENDENThaproxy.stats[{#BACKEND_NAME},BACKEND,status]01dLinux : App : Haproxy : Backends : {#BACKEND_NAME}PROMETHEUS_PATTERNhaproxy_backend_status{proxy="{#BACKEND_NAME}"}
haproxy.prometheus.allmetrics{last(#1)}<>1Backend {#BACKEND_NAME} state is not UPHIGHYES({_T_Zbx_Lin_HAPROXY2_stats_Prometheus:haproxy.stats[{#BACKEND_NAME},BACKEND,nb_available_servers_by_backend].last()} / {_T_Zbx_Lin_HAPROXY2_stats_Prometheus:haproxy.stats[{#BACKEND_NAME},BACKEND,nb_servers_by_backend].last()} ) <0.5Backend {#BACKEND_NAME} is degradedAVERAGEYEShaproxy.prometheus.allmetrics{#BACKEND_NAME}$.proxyPROMETHEUS_TO_JSONhaproxy_backend_statusJSONPATH$.*.labelsHAProxy Frontend DiscoverDEPENDENThaproxy.frontend.discovery00dfrontend [{#FRONTEND_NAME}] current sessionsDEPENDENThaproxy.stats[{#FRONTEND_NAME},FRONTEND,scur]01d30dsesLinux : App : Haproxy : Frontends : {#FRONTEND_NAME}_T_Zbx_Lin_HAPROXY_Prometheus:frontend statusPROMETHEUS_PATTERNhaproxy_frontend_current_sessions{proxy="{#FRONTEND_NAME}"}
haproxy.prometheus.allmetricsfrontend [{#FRONTEND_NAME}] session limitDEPENDENThaproxy.stats[{#FRONTEND_NAME},FRONTEND,slim]01d1dsesLinux : App : Haproxy : Frontends : {#FRONTEND_NAME}_T_Zbx_Lin_HAPROXY_Prometheus:frontend statusPROMETHEUS_PATTERNhaproxy_frontend_limit_sessions{proxy="{#FRONTEND_NAME}"}
haproxy.prometheus.allmetricsfrontend [{#FRONTEND_NAME}] max sessionsDEPENDENThaproxy.stats[{#FRONTEND_NAME},FRONTEND,smax]01d30dsesLinux : App : Haproxy : Frontends : {#FRONTEND_NAME}PROMETHEUS_PATTERNhaproxy_frontend_max_sessions{proxy="{#FRONTEND_NAME}"}
haproxy.prometheus.allmetricsfrontend [{#FRONTEND_NAME}] statusDEPENDENThaproxy.stats[{#FRONTEND_NAME},FRONTEND,status]01d0Linux : App : Haproxy : Frontends : {#FRONTEND_NAME}_T_Zbx_Lin_HAPROXY_Prometheus:frontend statusPROMETHEUS_PATTERNhaproxy_frontend_status{proxy="{#FRONTEND_NAME}"}
haproxy.prometheus.allmetrics{last(#1)}<>1Frontend {#FRONTEND_NAME} state is not OPENHIGH{_T_Zbx_Lin_HAPROXY2_stats_Prometheus:haproxy.stats[{#FRONTEND_NAME},FRONTEND,scur].last(0)} * 100 / {_T_Zbx_Lin_HAPROXY2_stats_Prometheus:haproxy.stats[{#FRONTEND_NAME},FRONTEND,slim].last(0)} > 90Frontend {#FRONTEND_NAME} current connexion > 90% of limitAVERAGE{_T_Zbx_Lin_HAPROXY2_stats_Prometheus:haproxy.stats[{#FRONTEND_NAME},FRONTEND,scur].last(0)} * 100 / {_T_Zbx_Lin_HAPROXY2_stats_Prometheus:haproxy.stats[{#FRONTEND_NAME},FRONTEND,slim].last(0)} > 95Frontend {#FRONTEND_NAME} current connexion > 95% of limitHIGHhaproxy.prometheus.allmetrics{#FRONTEND_NAME}$.proxyPROMETHEUS_TO_JSONhaproxy_frontend_statusJSONPATH$.*.labelsHAProxy Server discoveryDEPENDENThaproxy.server.discovery00dServer [{#BACKEND_NAME}/{#SERVER_NAME}] backend server up-down transitionsDEPENDENThaproxy.stats[{#BACKEND_NAME},{#SERVER_NAME},chkdown]01d30dLinux : App : Haproxy : Servers : {#BACKEND_NAME}/{#SERVER_NAME}PROMETHEUS_PATTERNhaproxy_server_check_up_down_total{proxy="{#BACKEND_NAME}",server="{#SERVER_NAME}"}
haproxy.prometheus.allmetricsServer [{#BACKEND_NAME}/{#SERVER_NAME}] backend server downtimeDEPENDENThaproxy.stats[{#BACKEND_NAME},{#SERVER_NAME},downtime]01d90dsLinux : App : Haproxy : Servers : {#BACKEND_NAME}/{#SERVER_NAME}PROMETHEUS_PATTERNhaproxy_server_downtime_seconds_total{proxy="{#BACKEND_NAME}",server="{#SERVER_NAME}"}
haproxy.prometheus.allmetricsServer [{#BACKEND_NAME}/{#SERVER_NAME}] backend server statusDEPENDENThaproxy.stats[{#BACKEND_NAME},{#SERVER_NAME},status]01d0Linux : App : Haproxy : Servers : {#BACKEND_NAME}/{#SERVER_NAME}_T_Zbx_Lin_HAPROXY_Prometheus:server statusPROMETHEUS_PATTERNhaproxy_server_status{proxy="{#BACKEND_NAME}",server="{#SERVER_NAME}"}
haproxy.prometheus.allmetricshaproxy.prometheus.allmetrics{#BACKEND_NAME}$.proxy{#SERVER_NAME}$.serverPROMETHEUS_TO_JSONhaproxy_server_statusCUSTOM_ERRORNo server detectedJSONPATH$.*.labels_T_Zbx_Lin_HAPROXY_Prometheus:frontend status0STOP1UP2FULL_T_Zbx_Lin_HAPROXY_Prometheus:server status0DOWN1UP2MAINT3DRAIN4NOLB