HAProxy provides a socket file which can be used to do maintenance (enable/ disable backends, retrieve information and statistics, …).
The statistics part contains quite some interesting information for monitoring and alerting.
The below Perl code snippit will loop over a glob of socket files (for instance when you have multiple HAProxy configurations running as separate processes) and print out the values returned by the “show info” command.
use IO::Socket::UNIX;
foreach my $socket_file (glob("/run/haproxy/*.sock")){
print "- Reading socket: $socket_file\n";
my $client = IO::Socket::UNIX->new(
Type => SOCK_STREAM(),
Peer => $socket_file,
);
print "- show info\n";
print $client "show info\n";
my $header = <$client>;
chomp($header);
$header =~ s/^#\s+//;
my @keys = split ',', $header;
print "- header:$header\n";
while (my $line = <$client>){
next unless $line =~ /^.+/;
chomp($line);
my @values = split ',', $line;
print " - Got $line\n";
print " $keys[$_]: ".($values[$_]//'')."\n" foreach 0..$#keys;
}
close $client;
}