# monitoring-check_haproxy **Repository Path**: mirrors_DinoTools/monitoring-check_haproxy ## Basic Information - **Project Name**: monitoring-check_haproxy - **Description**: Monitoring plugin to check HAProxy with Icinga, Nagios and other compatible monitoring solutions - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-30 - **Last Updated**: 2026-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # check_haproxy Nagios Check Script This is a Nagios plugin to check the status of HAProxy over a socket connection (by default, /var/run/haproxy.sock) and parse the statistics to ensure that it is operating within accepted limits, as per the defaults, or as set for each frontend/backend. [![docs](https://github.com/DinoTools/monitoring-check_haproxy/actions/workflows/docs.yml/badge.svg)](https://dinotools.github.io/monitoring-check_haproxy/) ## Usage check_haproxy [--defaults (defaults)] [--overrides (override 1)] [--overrides (override 2)] [--overrides (override n)] [--[no]frontends] [--[no]backends] [--[no]servers] [--socket (path)] [--help] ### -f, --[no]frontends Enable/disable checks for the frontends in HAProxy (that they're marked as OPEN and the session limits haven't been reached). ### -b, --[no]backends Enable/disable checks for the backends in HAProxy (that they have the required quorum of servers, and that the session limits haven't been reached). ### -s, --[no]servers Enable/disable checks for the servers in HAProxy (that they haven't reached the limits for the sessions or for queues). ### -D, --defaults (defaults) Set/Override the defaults which will be applied to all checks (unless specifically set by --overrides). Takes the form: {u,d,x},{svr_warn},{svr_crit},{sess_warn},{sess_crit} Each of these is optional, but the positioning is important. To fully override, set (for example): u,10,5,.25,0.5 which means: * `u`: Check for servers up (`u`) or servers down (`d`), or disable all checks on that particular frontend/backend (`x`). * `10`: WARNING if less than 10 servers are up, or if at least that many servers are down. * `5`: CRITICAL if less than 5 servers are available, or if at least that many have gone away. * `.25`: WARNING if more any frontend, backend, or individual server has gone over 25% of it's maximum allowed sessions (or any queue for any server on the backend is at least 25% full). * `0.5`: CRITICAL for the same reasons as previous, but we've reached 50% of these levels. To override only some of these values from the pre-set defaults (`u,5,2,.75,.9`), simply leave the others as empty, for example: `,10,7` will leave checks as up, but increase the server WARN/CRIT to 10/7. or to switch to use down, use `d,`, or off with `x`. Each number has two meanings: * `less than 1`: Where any number is less than (but not equal to) 1, then the value is understood as a percentage of the available servers or session limits. If you have 20 servers and set a threshold of .25 then that would mean 5 servers either up or down. * `greater than, or equal to 1`: Where any number is greater than, or equal to, 1, then this is a fixed value. By setting 5 you are hard-coding the number of servers or sessions, regardless of the limit or number available to HAProxy. The code **does not** alter this limit if it is greater than the available servers or sessions so there are situations where the alert may not trigger. For example, in the event of `down` being the trigger and the number of servers is less than the Warning or Critical thresholds, the error may never trigger. It is generally better to use `up` and percentage values where you are going to have a flexible number of backends. ### -O, --overrides (override) Override the defaults for a particular frontend or backend, in the form `name:override`, where `override` is the same format as `--defaults` above. For example, to override the frontend called "api" and allow that to increase to limits of 15/10 for WARN/CRIT, use `api:,15,10`. Add as many as you like by specifing the flag multiple times: --overrides api:,15,10 --overrides assets:d,2,5 --overrides webmail:u,3,2 ### -S, --socket /path/to/socket Path to the socket `check_haproxy` should connect to (requires read/write permissions and must be at least user level; no operator or admin privileges needed). ## Icinga2 configuration Copy `check_haproxy.icinga2.conf` to the icinga2 zone and define a new service for all Linux hosts with `vars.haproxy`, for example: ``` apply Service "Haproxy stats" { import "generic-service" check_command = "haproxy" vars.haproxy_socket = "/var/run/haproxy/admin.sock" vars.haproxy_default = "d,1,1,75,90" command_endpoint = host.vars.client_endpoint assign where host.vars.client_endpoint && host.vars.os == "Linux" && host.vars.haproxy } ``` ## Licence This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.