HAPROXY

HAProxy is free, open source software that provides a high availability load balancer and proxy server for TCP and HTTP-based applications that spreads requests across multiple servers. It is written in C and has a reputation for being fast and efficient

Available solutions




This template is for Zabbix version: 7.0

Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/haproxy_http?at=release/7.0

HAProxy by HTTP

Overview

The template to monitor HAProxy by Zabbix that works without any external scripts. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection.

The template collects metrics by polling the HAProxy stats page with HTTP agent.

Requirements

Zabbix version: 7.0 and higher.

Tested versions

This template has been tested on:

  • HAProxy 1.8

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

  1. Set up the HAProxy stats page.

If you want to use authentication, set the username and password in the stats auth option of the configuration file.

The example configuration of HAProxy:

frontend stats
    bind *:8404
    stats enable
    stats uri /stats
    stats refresh 10s
    #stats auth Username:Password  # Authentication credentials
  1. Set the hostname or IP address of the HAProxy stats host or container in the {$HAPROXY.STATS.HOST} macro. You can also change the status page port in the {$HAPROXY.STATS.PORT} macro, the status page scheme in the {$HAPROXY.STATS.SCHEME} macro and the status page path in the {$HAPROXY.STATS.PATH} macro if necessary.

  2. If you have enabled authentication in the HAProxy configuration file in step 1, set the username and password in the {$HAPROXY.USERNAME} and {$HAPROXY.PASSWORD} macros.

Macros used

Name Description Default
{$HAPROXY.STATS.SCHEME}

The scheme of HAProxy stats page (http/https).

http
{$HAPROXY.STATS.HOST}

The hostname or IP address of the HAProxy stats host or container.

<SET HAPROXY HOST>
{$HAPROXY.STATS.PORT}

The port of the HAProxy stats host or container.

8404
{$HAPROXY.STATS.PATH}

The path of the HAProxy stats page.

stats
{$HAPROXY.USERNAME}

The username of the HAProxy stats page.

{$HAPROXY.PASSWORD}

The password of the HAProxy stats page.

{$HAPROXY.RESPONSE_TIME.MAX.WARN}

The HAProxy stats page maximum response time in seconds for trigger expression.

10s
{$HAPROXY.FRONT_DREQ.MAX.WARN}

The HAProxy maximum denied requests for trigger expression.

10
{$HAPROXY.FRONT_EREQ.MAX.WARN}

The HAProxy maximum number of request errors for trigger expression.

10
{$HAPROXY.BACK_QCUR.MAX.WARN}

Maximum number of requests on Backend unassigned in queue for trigger expression.

10
{$HAPROXY.BACK_RTIME.MAX.WARN}

Maximum of average Backend response time for trigger expression.

10s
{$HAPROXY.BACK_QTIME.MAX.WARN}

Maximum of average time spent in queue on Backend for trigger expression.

10s
{$HAPROXY.BACK_ERESP.MAX.WARN}

Maximum of responses with error on Backend for trigger expression.

10
{$HAPROXY.SERVER_QCUR.MAX.WARN}

Maximum number of requests on server unassigned in queue for trigger expression.

10
{$HAPROXY.SERVER_RTIME.MAX.WARN}

Maximum of average server response time for trigger expression.

10s
{$HAPROXY.SERVER_QTIME.MAX.WARN}

Maximum of average time spent in queue on server for trigger expression.

10s
{$HAPROXY.SERVER_ERESP.MAX.WARN}

Maximum of responses with error on server for trigger expression.

10
{$HAPROXY.FRONT_SUTIL.MAX.WARN}

Maximum of session usage percentage on frontend for trigger expression.

80

Items

Name Description Type Key and additional info
Get stats

HAProxy Statistics Report in CSV format

HTTP agent haproxy.get

Preprocessing

  • Regular expression: # ([\s\S]*)\n \1

  • CSV to JSON

Get nodes

Array for LLD rules.

Dependent item haproxy.get.nodes

Preprocessing

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 1h

Get stats page

HAProxy Statistics Report HTML

HTTP agent haproxy.get_html
Version Dependent item haproxy.version

Preprocessing

  • Regular expression: HAProxy version ([^,]*), \1

    ⛔️Custom on fail: Set error to: HAProxy version is not found

  • Discard unchanged with heartbeat: 1d

Uptime Dependent item haproxy.uptime

Preprocessing

  • JavaScript: The text is too long. Please see the template.

Service status Simple check net.tcp.service["{$HAPROXY.STATS.SCHEME}","{$HAPROXY.STATS.HOST}","{$HAPROXY.STATS.PORT}"]

Preprocessing

  • Discard unchanged with heartbeat: 10m

Service response time Simple check net.tcp.service.perf["{$HAPROXY.STATS.SCHEME}","{$HAPROXY.STATS.HOST}","{$HAPROXY.STATS.PORT}"]

Triggers

Name Description Expression Severity Dependencies and additional info
Version has changed

HAProxy version has changed. Acknowledge to close the problem manually.

last(/HAProxy by HTTP/haproxy.version,#1)<>last(/HAProxy by HTTP/haproxy.version,#2) and length(last(/HAProxy by HTTP/haproxy.version))>0 Info Manual close: Yes
has been restarted

Uptime is less than 10 minutes.

last(/HAProxy by HTTP/haproxy.uptime)<10m Info Manual close: Yes
Service is down last(/HAProxy by HTTP/net.tcp.service["{$HAPROXY.STATS.SCHEME}","{$HAPROXY.STATS.HOST}","{$HAPROXY.STATS.PORT}"])=0 Average Manual close: Yes
Service response time is too high min(/HAProxy by HTTP/net.tcp.service.perf["{$HAPROXY.STATS.SCHEME}","{$HAPROXY.STATS.HOST}","{$HAPROXY.STATS.PORT}"],5m)>{$HAPROXY.RESPONSE_TIME.MAX.WARN} Warning Manual close: Yes
Depends on:
  • Service is down

LLD rule Backend discovery

Name Description Type Key and additional info
Backend discovery

Discovery backends

Dependent item haproxy.backend.discovery

Item prototypes for Backend discovery

Name Description Type Key and additional info
Backend {#PXNAME}: Raw data

The raw data of the Backend with the name {#PXNAME}

Dependent item haproxy.backend.raw[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: The text is too long. Please see the template.

Backend {#PXNAME}: Status

Possible values:

UP - The server is reporting as healthy.

DOWN - The server is reporting as unhealthy and unable to receive requests.

NOLB - You've added http-check disable-on-404 to the backend and the health checked URL has returned an HTTP 404 response.

MAINT - The server has been disabled or put into maintenance mode.

DRAIN - The server has been put into drain mode.

no check - Health checks are not enabled for this server.

Dependent item haproxy.backend.status[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.status

  • Discard unchanged with heartbeat: 10m

Backend {#PXNAME}: Responses time

Average backend response time (in ms) for the last 1,024 requests

Dependent item haproxy.backend.rtime[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.rtime

  • Custom multiplier: 0.001

Backend {#PXNAME}: Errors connection per second

Number of requests that encountered an error attempting to connect to a backend server.

Dependent item haproxy.backend.econ.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.econ

  • Change per second
Backend {#PXNAME}: Responses denied per second

Responses denied due to security concerns (ACL-restricted).

Dependent item haproxy.backend.dresp.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.dresp

  • Change per second
Backend {#PXNAME}: Response errors per second

Number of requests whose responses yielded an error

Dependent item haproxy.backend.eresp.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.eresp

  • Change per second
Backend {#PXNAME}: Unassigned requests

Current number of requests unassigned in queue.

Dependent item haproxy.backend.qcur[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.qcur

Backend {#PXNAME}: Time in queue

Average time spent in queue (in ms) for the last 1,024 requests

Dependent item haproxy.backend.qtime[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.qtime

  • Custom multiplier: 0.001

Backend {#PXNAME}: Redispatched requests per second

Number of times a request was redispatched to a different backend.

Dependent item haproxy.backend.wredis.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.wredis

  • Change per second
Backend {#PXNAME}: Retried connections per second

Number of times a connection was retried.

Dependent item haproxy.backend.wretr.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.wretr

  • Change per second
Backend {#PXNAME}: Number of responses with codes 1xx per second

Number of informational HTTP responses per second.

Dependent item haproxy.backend.hrsp_1xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_1xx

  • Change per second
Backend {#PXNAME}: Number of responses with codes 2xx per second

Number of successful HTTP responses per second.

Dependent item haproxy.backend.hrsp_2xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_2xx

  • Change per second
Backend {#PXNAME}: Number of responses with codes 3xx per second

Number of HTTP redirections per second.

Dependent item haproxy.backend.hrsp_3xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_3xx

  • Change per second
Backend {#PXNAME}: Number of responses with codes 4xx per second

Number of HTTP client errors per second.

Dependent item haproxy.backend.hrsp_4xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_4xx

  • Change per second
Backend {#PXNAME}: Number of responses with codes 5xx per second

Number of HTTP server errors per second.

Dependent item haproxy.backend.hrsp_5xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_5xx

  • Change per second
Backend {#PXNAME}: Incoming traffic

Number of bits received by the backend

Dependent item haproxy.backend.bin.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bin

  • Custom multiplier: 8

  • Change per second
Backend {#PXNAME}: Outgoing traffic

Number of bits sent by the backend

Dependent item haproxy.backend.bout.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bout

  • Custom multiplier: 8

  • Change per second
Backend {#PXNAME}: Number of active servers

Number of active servers.

Dependent item haproxy.backend.act[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.act

  • Discard unchanged with heartbeat: 1h

Backend {#PXNAME}: Number of backup servers

Number of backup servers.

Dependent item haproxy.backend.bck[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bck

  • Discard unchanged with heartbeat: 1h

Backend {#PXNAME}: Sessions per second

Cumulative number of sessions (end-to-end connections) per second.

Dependent item haproxy.backend.stot.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.stot

  • Change per second
Backend {#PXNAME}: Weight

Total effective weight.

Dependent item haproxy.backend.weight[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.weight

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Backend discovery

Name Description Expression Severity Dependencies and additional info
backend {#PXNAME}: Server is DOWN

Backend is not available.

count(/HAProxy by HTTP/haproxy.backend.status[{#PXNAME},{#SVNAME}],#5,"eq","DOWN")=5 Average
backend {#PXNAME}: Average response time is high

Average backend response time (in ms) for the last 1,024 requests is more than {$HAPROXY.BACK_RTIME.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.backend.rtime[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.BACK_RTIME.MAX.WARN} Warning
backend {#PXNAME}: Number of responses with error is high

Number of requests on backend, whose responses yielded an error, is more than {$HAPROXY.BACK_ERESP.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.backend.eresp.rate[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.BACK_ERESP.MAX.WARN} Warning
backend {#PXNAME}: Current number of requests unassigned in queue is high

Current number of requests on backend unassigned in queue is more than {$HAPROXY.BACK_QCUR.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.backend.qcur[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.BACK_QCUR.MAX.WARN} Warning
backend {#PXNAME}: Average time spent in queue is high

Average time spent in queue (in ms) for the last 1,024 requests is more than {$HAPROXY.BACK_QTIME.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.backend.qtime[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.BACK_QTIME.MAX.WARN} Warning

LLD rule Frontend discovery

Name Description Type Key and additional info
Frontend discovery

Discovery frontends

Dependent item haproxy.frontend.discovery

Item prototypes for Frontend discovery

Name Description Type Key and additional info
Frontend {#PXNAME}: Raw data

The raw data of the Frontend with the name {#PXNAME}

Dependent item haproxy.frontend.raw[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: The text is too long. Please see the template.

Frontend {#PXNAME}: Status

Possible values: OPEN, STOP.

When Status is OPEN, the frontend is operating normally and ready to receive traffic.

Dependent item haproxy.frontend.status[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.status

  • Discard unchanged with heartbeat: 6h

Frontend {#PXNAME}: Requests rate

HTTP requests per second

Dependent item haproxy.frontend.req_rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.req_rate

Frontend {#PXNAME}: Sessions rate

Number of sessions created per second

Dependent item haproxy.frontend.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.rate

Frontend {#PXNAME}: Established sessions

The current number of established sessions.

Dependent item haproxy.frontend.scur[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.scur

Frontend {#PXNAME}: Session limits

The most simultaneous sessions that are allowed, as defined by the maxconn setting in the frontend.

Dependent item haproxy.frontend.slim[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.slim

  • Discard unchanged with heartbeat: 1h

Frontend {#PXNAME}: Session utilization

Percentage of sessions used (scur / slim * 100).

Calculated haproxy.frontend.sutil[{#PXNAME},{#SVNAME}]
Frontend {#PXNAME}: Request errors per second

Number of request errors per second.

Dependent item haproxy.frontend.ereq.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.ereq

  • Change per second
Frontend {#PXNAME}: Denied requests per second

Requests denied due to security concerns (ACL-restricted) per second.

Dependent item haproxy.frontend.dreq.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.dreq

  • Change per second
Frontend {#PXNAME}: Number of responses with codes 1xx per second

Number of informational HTTP responses per second.

Dependent item haproxy.frontend.hrsp_1xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_1xx

  • Change per second
Frontend {#PXNAME}: Number of responses with codes 2xx per second

Number of successful HTTP responses per second.

Dependent item haproxy.frontend.hrsp_2xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_2xx

  • Change per second
Frontend {#PXNAME}: Number of responses with codes 3xx per second

Number of HTTP redirections per second.

Dependent item haproxy.frontend.hrsp_3xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_3xx

  • Change per second
Frontend {#PXNAME}: Number of responses with codes 4xx per second

Number of HTTP client errors per second.

Dependent item haproxy.frontend.hrsp_4xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_4xx

  • Change per second
Frontend {#PXNAME}: Number of responses with codes 5xx per second

Number of HTTP server errors per second.

Dependent item haproxy.frontend.hrsp_5xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_5xx

  • Change per second
Frontend {#PXNAME}: Incoming traffic

Number of bits received by the frontend

Dependent item haproxy.frontend.bin.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bin

  • Custom multiplier: 8

  • Change per second
Frontend {#PXNAME}: Outgoing traffic

Number of bits sent by the frontend

Dependent item haproxy.frontend.bout.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bout

  • Custom multiplier: 8

  • Change per second

Trigger prototypes for Frontend discovery

Name Description Expression Severity Dependencies and additional info
frontend {#PXNAME}: Session utilization is high

Alerting on this metric is essential to ensure your server has sufficient capacity to handle all concurrent sessions. Unlike requests, upon reaching the session limit HAProxy will deny additional clients until resource consumption drops. Furthermore, if you find your session usage percentage to be hovering above 80%, it could be time to either modify HAProxy's configuration to allow more sessions, or migrate your HAProxy server to a bigger box.

min(/HAProxy by HTTP/haproxy.frontend.sutil[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.FRONT_SUTIL.MAX.WARN} Warning
frontend {#PXNAME}: Number of request errors is high

Number of request errors is more than {$HAPROXY.FRONT_EREQ.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.frontend.ereq.rate[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.FRONT_EREQ.MAX.WARN} Warning
frontend {#PXNAME}: Number of requests denied is high

Number of requests denied due to security concerns (ACL-restricted) is more than {$HAPROXY.FRONT_DREQ.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.frontend.dreq.rate[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.FRONT_DREQ.MAX.WARN} Warning

LLD rule Server discovery

Name Description Type Key and additional info
Server discovery

Discovery servers

Dependent item haproxy.server.discovery

Item prototypes for Server discovery

Name Description Type Key and additional info
Server {#PXNAME} {#SVNAME}: Raw data

The raw data of the Server named {#SVNAME} and the proxy with the name {#PXNAME}

Dependent item haproxy.server.raw[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: The text is too long. Please see the template.

{#PXNAME} {#SVNAME}: Status Dependent item haproxy.server.status[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.status

  • Discard unchanged with heartbeat: 10m

{#PXNAME} {#SVNAME}: Responses time

Average server response time (in ms) for the last 1,024 requests.

Dependent item haproxy.server.rtime[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.rtime

  • Custom multiplier: 0.001

{#PXNAME} {#SVNAME}: Errors connection per second

Number of requests that encountered an error attempting to connect to a backend server.

Dependent item haproxy.server.econ.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.econ

  • Change per second
{#PXNAME} {#SVNAME}: Responses denied per second

Responses denied due to security concerns (ACL-restricted).

Dependent item haproxy.server.dresp.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.dresp

  • Change per second
{#PXNAME} {#SVNAME}: Response errors per second

Number of requests whose responses yielded an error.

Dependent item haproxy.server.eresp.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.eresp

  • Change per second
{#PXNAME} {#SVNAME}: Unassigned requests

Current number of requests unassigned in queue.

Dependent item haproxy.server.qcur[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.qcur

{#PXNAME} {#SVNAME}: Time in queue

Average time spent in queue (in ms) for the last 1,024 requests.

Dependent item haproxy.server.qtime[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.qtime

  • Custom multiplier: 0.001

{#PXNAME} {#SVNAME}: Redispatched requests per second

Number of times a request was redispatched to a different backend.

Dependent item haproxy.server.wredis.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.wredis

  • Change per second
{#PXNAME} {#SVNAME}: Retried connections per second

Number of times a connection was retried.

Dependent item haproxy.server.wretr.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.wretr

  • Change per second
{#PXNAME} {#SVNAME}: Number of responses with codes 1xx per second

Number of informational HTTP responses per second.

Dependent item haproxy.server.hrsp_1xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_1xx

  • Change per second
{#PXNAME} {#SVNAME}: Number of responses with codes 2xx per second

Number of successful HTTP responses per second.

Dependent item haproxy.server.hrsp_2xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_2xx

  • Change per second
{#PXNAME} {#SVNAME}: Number of responses with codes 3xx per second

Number of HTTP redirections per second.

Dependent item haproxy.server.hrsp_3xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_3xx

  • Change per second
{#PXNAME} {#SVNAME}: Number of responses with codes 4xx per second

Number of HTTP client errors per second.

Dependent item haproxy.server.hrsp_4xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_4xx

  • Change per second
{#PXNAME} {#SVNAME}: Number of responses with codes 5xx per second

Number of HTTP server errors per second.

Dependent item haproxy.server.hrsp_5xx.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.hrsp_5xx

  • Change per second
{#PXNAME} {#SVNAME}: Incoming traffic

Number of bits received by the backend

Dependent item haproxy.server.bin.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bin

  • Custom multiplier: 8

  • Change per second
{#PXNAME} {#SVNAME}: Outgoing traffic

Number of bits sent by the backend

Dependent item haproxy.server.bout.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bout

  • Custom multiplier: 8

  • Change per second
{#PXNAME} {#SVNAME}: Server is active

Shows whether the server is active (marked with a Y) or a backup (marked with a -).

Dependent item haproxy.server.act[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.act

  • Discard unchanged with heartbeat: 1h

{#PXNAME} {#SVNAME}: Server is backup

Shows whether the server is a backup (marked with a Y) or active (marked with a -).

Dependent item haproxy.server.bck[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.bck

  • Discard unchanged with heartbeat: 1h

{#PXNAME} {#SVNAME}: Sessions per second

Cumulative number of sessions (end-to-end connections) per second.

Dependent item haproxy.server.stot.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.stot

  • Change per second
{#PXNAME} {#SVNAME}: Weight

Effective weight.

Dependent item haproxy.server.weight[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.weight

  • Discard unchanged with heartbeat: 1h

{#PXNAME} {#SVNAME}: Configured maxqueue

Configured maxqueue for the server, or nothing in the value is 0 (default, meaning no limit).

Dependent item haproxy.server.qlimit[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.qlimit

  • Discard unchanged with heartbeat: 6h

  • Matches regular expression: ^\d+$

    ⛔️Custom on fail: Set value to: 0

{#PXNAME} {#SVNAME}: Server was selected per second

Number of times that server was selected.

Dependent item haproxy.server.lbtot.rate[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.lbtot

  • Change per second
{#PXNAME} {#SVNAME}: Status of last health check

Status of last health check, one of:

UNK -> unknown

INI -> initializing

SOCKERR -> socket error

L4OK -> check passed on layer 4, no upper layers testing enabled

L4TOUT -> layer 1-4 timeout

L4CON -> layer 1-4 connection problem, for example "Connection refused" (tcp rst) or "No route to host" (icmp)

L6OK -> check passed on layer 6

L6TOUT -> layer 6 (SSL) timeout

L6RSP -> layer 6 invalid response - protocol error

L7OK -> check passed on layer 7

L7OKC -> check conditionally passed on layer 7, for example 404 with disable-on-404

L7TOUT -> layer 7 (HTTP/SMTP) timeout

L7RSP -> layer 7 invalid response - protocol error

L7STS -> layer 7 response error, for example HTTP 5xx

Notice: If a check is currently running, the last known status will be reported, prefixed with "* ". e. g. "* L7OK".

Dependent item haproxy.server.check_status[{#PXNAME},{#SVNAME}]

Preprocessing

  • JSON Path: $.check_status

  • Discard unchanged with heartbeat: 10m

Trigger prototypes for Server discovery

Name Description Expression Severity Dependencies and additional info
{#PXNAME} {#SVNAME}: Server is DOWN

Server is not available.

count(/HAProxy by HTTP/haproxy.server.status[{#PXNAME},{#SVNAME}],#5,"eq","DOWN")=5 Warning
{#PXNAME} {#SVNAME}: Average response time is high

Average server response time (in ms) for the last 1,024 requests is more than {$HAPROXY.SERVER_RTIME.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.server.rtime[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.SERVER_RTIME.MAX.WARN} Warning
{#PXNAME} {#SVNAME}: Number of responses with error is high

Number of requests on server, whose responses yielded an error, is more than {$HAPROXY.SERVER_ERESP.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.server.eresp.rate[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.SERVER_ERESP.MAX.WARN} Warning
{#PXNAME} {#SVNAME}: Current number of requests unassigned in queue is high

Current number of requests unassigned in queue is more than {$HAPROXY.SERVER_QCUR.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.server.qcur[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.SERVER_QCUR.MAX.WARN} Warning
{#PXNAME} {#SVNAME}: Average time spent in queue is high

Average time spent in queue (in ms) for the last 1,024 requests is more than {$HAPROXY.SERVER_QTIME.MAX.WARN}.

min(/HAProxy by HTTP/haproxy.server.qtime[{#PXNAME},{#SVNAME}],5m)>{$HAPROXY.SERVER_QTIME.MAX.WARN} Warning
{#PXNAME} {#SVNAME}: Health check error

Please check the server for faults.

find(/HAProxy by HTTP/haproxy.server.check_status[{#PXNAME},{#SVNAME}],#3,"regexp","(?:L[4-7]OK|^$)")=0 Warning Depends on:
  • {#PXNAME} {#SVNAME}: Server is DOWN

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide feedback, discuss the template, or ask for help at ZABBIX forums

Didn't find what you are looking for?