https://github.com/dinotools/monitoring-check_haproxy
Monitoring plugin to check HAProxy with Icinga, Nagios and other compatible monitoring solutions
https://github.com/dinotools/monitoring-check_haproxy
haproxy icinga-plugin icinga2-plugin monitoring-plugin nagios-plugin
Last synced: 3 months ago
JSON representation
Monitoring plugin to check HAProxy with Icinga, Nagios and other compatible monitoring solutions
- Host: GitHub
- URL: https://github.com/dinotools/monitoring-check_haproxy
- Owner: DinoTools
- License: gpl-2.0
- Created: 2021-10-29T12:08:07.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-09-08T18:08:35.000Z (4 months ago)
- Last Synced: 2025-09-21T07:09:21.800Z (4 months ago)
- Topics: haproxy, icinga-plugin, icinga2-plugin, monitoring-plugin, nagios-plugin
- Language: Perl
- Homepage: https://DinoTools.github.io/monitoring-check_haproxy/
- Size: 93.8 KB
- Stars: 6
- Watchers: 1
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
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.
[](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.