git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
path: root/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats
diff options
context:
space:
mode:
authorHarald Pfeiffer <coding _ lirion.de> 2019-04-17 19:07:19 +0200
committerHarald Pfeiffer <coding _ lirion.de> 2019-04-17 19:07:19 +0200
commit1e2387474a449452b78520b9ad96a8b4b5e99722 (patch)
tree836889471eec7d2aac177405068e2a8f1e2b1978 /nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats
downloadnagios-plugins-contrib-1e2387474a449452b78520b9ad96a8b4b5e99722.tar.bz2
initial commit of source fetch
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats')
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/Makefile12
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/check_haproxy_stats.pl225
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/control7
-rw-r--r--nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/copyright13
4 files changed, 257 insertions, 0 deletions
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/Makefile b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/Makefile
new file mode 100644
index 0000000..c074838
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/Makefile
@@ -0,0 +1,12 @@
+#/usr/bin/make -f
+
+PLUGIN := check_haproxy_stats
+CLEANEXTRAFILES := $(PLUGIN)
+
+
+include ../common.mk
+
+check_haproxy_stats: check_haproxy_stats.pl
+ cp $< $@
+
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/check_haproxy_stats.pl b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/check_haproxy_stats.pl
new file mode 100644
index 0000000..9698f78
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/check_haproxy_stats.pl
@@ -0,0 +1,225 @@
+#!/usr/bin/env perl
+# vim: se et ts=4:
+
+#
+# Copyright (C) 2012, Giacomo Montagner <giacomo@entirelyunlike.net>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl 5.10.1.
+# For more details, see http://dev.perl.org/licenses/artistic.html
+#
+# 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.
+#
+
+our $VERSION = "1.0.1";
+
+# CHANGELOG:
+# 1.0.0 - first release
+# 1.0.1 - fixed empty message if all proxies are OK
+#
+
+use strict;
+use warnings;
+use 5.010.001;
+use File::Basename qw/basename/;
+use IO::Socket::UNIX;
+use Getopt::Long;
+
+sub usage {
+ my $me = basename $0;
+ print <<EOU;
+NAME
+ $me - check haproxy stats for errors, using UNIX socket interface
+
+SYNOPSIS
+ $me [OPTIONS]
+
+DESCRIPTION
+ Get haproxy statistics via UNIX socket and parse information searching for errors.
+
+ OPTIONS
+ -c, --critical
+ Set critical threshold for sessions number (chacks current number of sessions
+ against session limit, if enforced) to the specified percentage.
+ If no session limit (slim) was specified for the given proxy, this option has
+ no effect.
+
+ -d, --dump
+ Just dump haproxy stats and exit;
+
+ -h, --help
+ Print this message.
+
+ -p, --proxy
+ Check only named proxies, not every one. Use comma to separate proxies
+ in list.
+
+ -s, --sock, --socket
+ Use named UNIX socket instead of default (/var/run/haproxy.sock)
+
+ -w, --warning
+ Set warning threshold for sessions number to the specified percentage (see -c)
+
+CHECKS AND OUTPUT
+ $me checks every proxy (or the named ones, if -p was given)
+ for status. It returns an error if any of the checked FRONTENDs is not OPEN,
+ any of the checked BACKENDs is not UP, or any of the checkes servers is not UP;
+ $me reports any problem it found.
+
+EXAMPLES
+ $me -s /var/spool/haproxy/sock
+ Use /var/spool/haproxy/sock to communicate with haproxy.
+
+ $me -p proxy1,proxy2 -w 60 -c 80
+ Check only proxies named "proxy1" and "proxy2", and set sessions number
+ thresholds to 60% and 80%.
+
+AUTHOR
+ Written by Giacomo Montagner
+
+REPORTING BUGS
+ Please report any bug to bugs\@entirelyunlike.net
+
+COPYRIGHT
+ Copyright (C) 2012 Giacomo Montagner <giacomo\@entirelyunlike.net>.
+ $me is distributed under GPL and the Artistic License 2.0
+
+SEE ALSO
+ Check out online haproxy documentation at <http://haproxy.1wt.eu/>
+
+EOU
+}
+
+my %check_statuses = (
+ UNK => "unknown",
+ INI => "initializing",
+ SOCKERR => "socket error",
+ L4OK => "layer 4 check OK",
+ L4CON => "connection error",
+ L4TMOUT => "layer 1-4 timeout",
+ L6OK => "layer 6 check OK",
+ L6TOUT => "layer 6 (SSL) timeout",
+ L6RSP => "layer 6 protocol error",
+ L7OK => "layer 7 check OK",
+ L7OKC => "layer 7 conditionally OK",
+ L7TOUT => "layer 7 (HTTP/SMTP) timeout",
+ L7RSP => "layer 7 protocol error",
+ L7STS => "layer 7 status error",
+);
+
+my @status_names = (qw/OK WARNING CRITICAL UNKNOWN/);
+
+# Defaults
+my $swarn = 80.0;
+my $scrit = 90.0;
+my $sock = "/var/run/haproxy.sock";
+my $dump;
+my $proxy;
+my $help;
+
+# Read command line
+Getopt::Long::Configure ("bundling");
+GetOptions (
+ "c|critical=i" => \$scrit,
+ "d|dump" => \$dump,
+ "h|help" => \$help,
+ "p|proxy=s" => \$proxy,
+ "s|sock|socket=s" => \$sock,
+ "w|warning=i" => \$swarn,
+);
+
+# Want help?
+if ($help) {
+ usage;
+ exit 3;
+}
+
+# Connect to haproxy socket and get stats
+my $haproxy = new IO::Socket::UNIX (
+ Peer => $sock,
+ Type => SOCK_STREAM,
+);
+die "Unable to connect to haproxy socket: $@" unless $haproxy;
+print $haproxy "show stat\n" or die "Print to socket failed: $!";
+
+# Dump stats and exit if requested
+if ($dump) {
+ while (<$haproxy>) {
+ print;
+ }
+ exit 0;
+}
+
+# Get labels from first output line and map them to their position in the line
+my $labels = <$haproxy>;
+chomp($labels);
+$labels =~ s/^# // or die "Data format not supported.";
+my @labels = split /,/, $labels;
+{
+ no strict "refs";
+ my $idx = 0;
+ map { $$_ = $idx++ } @labels;
+}
+
+# Variables I will use from here on:
+our $pxname;
+our $svname;
+our $status;
+
+my @proxies = split ',', $proxy if $proxy;
+my $exitcode = 0;
+my $msg;
+my $checked = 0;
+while (<$haproxy>) {
+ chomp;
+ next if /^[[:space:]]*$/;
+ my @data = split /,/, $_;
+ if (@proxies) { next unless grep {$data[$pxname] eq $_} @proxies; };
+
+ # Is session limit enforced?
+ our $slim;
+ if ($data[$slim]) {
+ # Check current session # against limit
+ our $scur;
+ my $sratio = $data[$scur]/$data[$slim];
+ if ($sratio >= $scrit || $sratio >= $swarn) {
+ $exitcode = $sratio >= $scrit ? 2 :
+ $exitcode < 2 ? 1 : $exitcode;
+ $msg .= sprintf "%s:%s sessions: %.2f%%; ", $data[$pxname], $data[$svname], $sratio;
+ }
+ }
+
+ # Check of BACKENDS
+ if ($data[$svname] eq 'BACKEND') {
+ if ($data[$status] ne 'UP') {
+ $msg .= sprintf "BACKEND: %s is %s; ", $data[$pxname], $data[$status];
+ $exitcode = 2;
+ }
+ # Check of FRONTENDS
+ } elsif ($data[$svname] eq 'FRONTEND') {
+ if ($data[$status] ne 'OPEN') {
+ $msg .= sprintf "FRONTEND: %s is %s; ", $data[$pxname], $data[$status];
+ $exitcode = 2;
+ }
+ # Check of servers
+ } else {
+ if ($data[$status] ne 'UP') {
+ next if $data[$status] eq 'no check'; # Ignore server if no check is configured to be run
+ $exitcode = 2;
+ our $check_status;
+ $msg .= sprintf "server: %s:%s is %s", $data[$pxname], $data[$svname], $data[$status];
+ $msg .= sprintf " (check status: %s)", $check_statuses{$data[$check_status]} if $check_statuses{$data[$check_status]};
+ $msg .= "; ";
+ }
+ }
+ ++$checked;
+}
+
+unless ($msg) {
+ $msg = @proxies ? sprintf("checked proxies: %s", join ', ', sort @proxies) : "checked $checked proxies.";
+}
+say "Check haproxy $status_names[$exitcode] - $msg";
+exit $exitcode;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/control b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/control
new file mode 100644
index 0000000..595d483
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/control
@@ -0,0 +1,7 @@
+Homepage: http://exchange.nagios.org/directory/Plugins/Clustering-and-High-2DAvailability/check_haproxy_stats-2Epl/details
+Watch: http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=4089&cf_id=24 VERSION = "([0-9.]+)"
+Version: 1.0.1
+Uploaders: Bernd Zeimetz <bzed@debian.org>
+Description: check haproxy via admin socket
+ Different from check_haproxy this plugin is able to check
+ haproxy via the unix admin socket.
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/copyright b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/copyright
new file mode 100644
index 0000000..1efcc91
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_haproxy_stats/copyright
@@ -0,0 +1,13 @@
+Copyright (C) 2012, Giacomo Montagner <giacomo@entirelyunlike.net>
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl 5.10.1.
+For more details, see http://dev.perl.org/licenses/artistic.html
+
+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.
+
+On Debian systems a copy of the Artistic license can be found
+in /usr/share/common-licenses/Artistic.
+