Add check_kibana
This commit is contained in:
		
							parent
							
								
									20369091e7
								
							
						
					
					
						commit
						65e0cc9bab
					
				
					 7 changed files with 248 additions and 1 deletions
				
			
		
							
								
								
									
										4
									
								
								check_kibana/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								check_kibana/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
#/usr/bin/make -f
 | 
			
		||||
 | 
			
		||||
include ../common.mk
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										207
									
								
								check_kibana/check_kibana
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								check_kibana/check_kibana
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,207 @@
 | 
			
		|||
#!/usr/bin/perl
 | 
			
		||||
##############################################################################
 | 
			
		||||
#
 | 
			
		||||
# Nagios check_kibana plugin
 | 
			
		||||
#
 | 
			
		||||
# License: GPL
 | 
			
		||||
# Copyright (c) 2013 Joerg Linge <pitchfork@ederdrom.de>
 | 
			
		||||
#
 | 
			
		||||
# Description:
 | 
			
		||||
#
 | 
			
		||||
# This plugin is used to query kibana ( http://kibana.org ) 
 | 
			
		||||
#
 | 
			
		||||
# 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 3 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, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
##############################################################################
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use utf8;
 | 
			
		||||
use Encode qw( encode_utf8 );
 | 
			
		||||
use URI::Escape;
 | 
			
		||||
use Data::Dumper;
 | 
			
		||||
use Nagios::Plugin;
 | 
			
		||||
 | 
			
		||||
unless ( eval 'use JSON::XS;1' ){
 | 
			
		||||
    die "Perl Module JSON::XS not found";
 | 
			
		||||
}
 | 
			
		||||
unless ( eval 'use LWP::Simple;1' ){
 | 
			
		||||
    die "Perl Module LWP::Simple not found";
 | 
			
		||||
}
 | 
			
		||||
unless ( eval "use Nagios::Plugin;1" ){
 | 
			
		||||
    die "Perl Module Nagios::Plugin not found";
 | 
			
		||||
}
 | 
			
		||||
unless ( eval "use MIME::Base64;1" ){
 | 
			
		||||
    die "Perl Module MIME::Base84 not found";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $np = Nagios::Plugin->new(
 | 
			
		||||
    usage   => "Usage: %s [-t <timeout>] " . "[-U <URL to Kibana>]",
 | 
			
		||||
    version => '0.1',
 | 
			
		||||
    plugin  => 'check_kibana',
 | 
			
		||||
    timeout => 15,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$np->add_arg(
 | 
			
		||||
    spec => 'url|U=s',
 | 
			
		||||
    help =>
 | 
			
		||||
        '-U, --url=<HOSTNAME>. URL to Kibana Webinterface'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$np->add_arg(
 | 
			
		||||
    spec => 'query|q=s',
 | 
			
		||||
    help =>
 | 
			
		||||
        '-q, --query=<Base64 encoded Query>. Base64 encoded Query as shown in the Kibana UI'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$np->add_arg(
 | 
			
		||||
    spec => 'label|l=s',
 | 
			
		||||
    help =>
 | 
			
		||||
        '-l, --label=<LABEL>. Label your query'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$np->add_arg(
 | 
			
		||||
    spec => 'statistic|s=s',
 | 
			
		||||
    default => 'mean',
 | 
			
		||||
    help =>
 | 
			
		||||
        '-s, --statistic=[max|min|mean|count|total]. The statistical value you want to analyze'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$np->add_arg(
 | 
			
		||||
     spec => 'warning|w=s',
 | 
			
		||||
     required => 1,
 | 
			
		||||
     default => "1000:4000",
 | 
			
		||||
     help => '-w, --warning=INTEGER:INTEGER .  See '
 | 
			
		||||
       . 'http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT '
 | 
			
		||||
       . 'for the threshold format. ',
 | 
			
		||||
   );
 | 
			
		||||
 | 
			
		||||
$np->add_arg(
 | 
			
		||||
     spec => 'critical|c=s',
 | 
			
		||||
     required => 1,
 | 
			
		||||
     default => "500:5000",
 | 
			
		||||
     help => '-c, --critical=INTEGER:INTEGER', 
 | 
			
		||||
   );
 | 
			
		||||
 | 
			
		||||
$np->getopts;
 | 
			
		||||
 | 
			
		||||
#install an alarm to be able to timeout on a hanging socket
 | 
			
		||||
alarm $np->opts->timeout;
 | 
			
		||||
 | 
			
		||||
# Default ES Query
 | 
			
		||||
my $default_query = "eyJzZWFyY2giOiIiLCJmaWVsZHMiOltdLCJvZmZzZXQiOjAsInRpbWVmcmFtZSI6OTAwLCJncmFwaG1vZGUiOiJjb3VudCJ9";
 | 
			
		||||
 | 
			
		||||
my $url   = $np->opts->url||"http://localhost/kibana/";
 | 
			
		||||
my $query = $np->opts->query||$default_query;
 | 
			
		||||
 | 
			
		||||
my $decoded_query = decode_json( MIME::Base64::decode( uri_unescape($query) ) );
 | 
			
		||||
my $esquery       = $decoded_query->{search};
 | 
			
		||||
#print Dumper $decoded_query;
 | 
			
		||||
 | 
			
		||||
my $mode          = $decoded_query->{mode}||'search';
 | 
			
		||||
my $analyze_field = $decoded_query->{analyze_field}||"";
 | 
			
		||||
my ($field)       = $analyze_field=~ m/\@fields\.(.*)$/;
 | 
			
		||||
 | 
			
		||||
my $request;
 | 
			
		||||
if($mode eq "mean"){
 | 
			
		||||
    $request = sprintf("%s/api/analyze/%s/%s/%s", $url, $analyze_field, $mode,$query);
 | 
			
		||||
}else{
 | 
			
		||||
    $request = sprintf("%s/api/%s/%s", $url, $mode, $query);
 | 
			
		||||
}
 | 
			
		||||
#print $request."\n\n";
 | 
			
		||||
my $state = "OK";
 | 
			
		||||
my $data  = get($request);
 | 
			
		||||
#print Dumper $data;
 | 
			
		||||
 | 
			
		||||
$np->nagios_exit( CRITICAL,
 | 
			
		||||
    "CRIT: Could not query Kibana on $url" )
 | 
			
		||||
    unless $data;
 | 
			
		||||
 | 
			
		||||
#my $trend = get($url.$payload."&mode=trend");
 | 
			
		||||
 | 
			
		||||
$data  = decode_json(encode_utf8($data));
 | 
			
		||||
#print Dumper $data;
 | 
			
		||||
if($mode eq "search"){
 | 
			
		||||
    my $label        = $np->opts->label||"Hits";
 | 
			
		||||
    my $hits         = $data->{hits}->{total}||0;
 | 
			
		||||
    my $total        = $data->{kibana}->{total}||1;
 | 
			
		||||
    # Date format is 2012-07-18T12:43:19+02:00
 | 
			
		||||
    my ($from)       = $data->{kibana}->{time}->{from} =~ m/T(.*)\+/;
 | 
			
		||||
    my ($to)         = $data->{kibana}->{time}->{to}   =~ m/T(.*)\+/;
 | 
			
		||||
 | 
			
		||||
    $np->nagios_exit( UNKNOWN,
 | 
			
		||||
        "UNKNOWN: Elasticsearch returns no results" )
 | 
			
		||||
        if ( $total == 0);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    my $warning_threshold  = $np->opts->warning;
 | 
			
		||||
    my $critical_threshold = $np->opts->critical;
 | 
			
		||||
 | 
			
		||||
    my $code = $np->check_threshold(
 | 
			
		||||
         check => $hits,
 | 
			
		||||
         warning => $warning_threshold,
 | 
			
		||||
         critical => $critical_threshold,
 | 
			
		||||
       );
 | 
			
		||||
 
 | 
			
		||||
    my $message = "";
 | 
			
		||||
    $message .= sprintf "%s: %d hits between %s - %s ",$label, $hits, $from, $to;
 | 
			
		||||
    $message .= sprintf "Query: '%s'\n", $esquery;
 | 
			
		||||
    $message .= sprintf "More Infos on <a href=\"%s/\#%s\">Kibana</a>\n", $url, $query;
 | 
			
		||||
 | 
			
		||||
    $np->add_perfdata( 
 | 
			
		||||
	label => 'hits',
 | 
			
		||||
	value => "${hits}",
 | 
			
		||||
	warning => $warning_threshold,
 | 
			
		||||
	critical => $critical_threshold,
 | 
			
		||||
    );
 | 
			
		||||
    #print Dumper $data;
 | 
			
		||||
    $np->nagios_exit( $code, $message );
 | 
			
		||||
}elsif($mode eq "mean"){
 | 
			
		||||
    my $hits         = $data->{hits}->{total}||0;
 | 
			
		||||
    my $total        = $data->{kibana}->{total}||1;
 | 
			
		||||
    # Date format is 2012-07-18T12:43:19+02:00
 | 
			
		||||
    my ($from)       = $data->{kibana}->{time}->{from} =~ m/T(.*)\+/;
 | 
			
		||||
    my ($to)         = $data->{kibana}->{time}->{to}   =~ m/T(.*)\+/;
 | 
			
		||||
 | 
			
		||||
    $np->nagios_exit( UNKNOWN,
 | 
			
		||||
        "UNKNOWN: Elasticsearch returns no results" )
 | 
			
		||||
        if ( $total == 0);
 | 
			
		||||
 | 
			
		||||
    my $warning_threshold  = $np->opts->warning;
 | 
			
		||||
    my $critical_threshold = $np->opts->critical;
 | 
			
		||||
    my $label              = $np->opts->label||$np->opts->statistic;
 | 
			
		||||
    my $statistic_value    = $np->opts->statistic;
 | 
			
		||||
    my $value = $data->{facets}->{stats}->{$statistic_value};
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    my $code = $np->check_threshold(
 | 
			
		||||
         check => $value,
 | 
			
		||||
         warning => $warning_threshold,
 | 
			
		||||
         critical => $critical_threshold,
 | 
			
		||||
       );
 | 
			
		||||
 
 | 
			
		||||
    my $message = "";
 | 
			
		||||
    $message .= sprintf "%s %s value was %s between %s - %s ",$field, $mode, $value , $from, $to;
 | 
			
		||||
    $message .= sprintf "Query: '%s'\n", $esquery;
 | 
			
		||||
    $message .= sprintf "More Infos on <a href=\"%s/\#%s\">Kibana</a>\n", $url, $query;
 | 
			
		||||
 | 
			
		||||
    $np->add_perfdata( 
 | 
			
		||||
	label => $statistic_value,
 | 
			
		||||
	value => "${value}",
 | 
			
		||||
	warning => $warning_threshold,
 | 
			
		||||
	critical => $critical_threshold,
 | 
			
		||||
    );
 | 
			
		||||
    #print Dumper $data;
 | 
			
		||||
    $np->nagios_exit( $code, $message );
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								check_kibana/check_openvpn.cfg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								check_kibana/check_openvpn.cfg
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
# 'check_kibana' command definition
 | 
			
		||||
define command {
 | 
			
		||||
        command_name    check_kibana
 | 
			
		||||
        command_line    /usr/lib/monitoring-plugins/check_kibana '$ARG1$'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								check_kibana/control
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								check_kibana/control
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
Uploaders: Jan Wagner <waja@cyconet.org>
 | 
			
		||||
Recommends: libencode-perl, liburi-perl, libnagios-plugin-perl
 | 
			
		||||
Version: ba6ba46693561f9b6c0f2bd416e8ae6b344e5043
 | 
			
		||||
Homepage: https://github.com/lingej/nagios-scripts/blob/master/nagios-plugins/check_kibana
 | 
			
		||||
Watch: https://github.com/lingej/nagios-scripts/blob/master/nagios-plugins/check_kibana data-sha="([0-9a-f]+)"
 | 
			
		||||
Description: Plugin script used to query kibana
 | 
			
		||||
							
								
								
									
										7
									
								
								check_kibana/copyright
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								check_kibana/copyright
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
Copyright (c) 2013 Joerg Linge <pitchfork@ederdrom.de>
 | 
			
		||||
 | 
			
		||||
License: GPL v3
 | 
			
		||||
 | 
			
		||||
  On Debian systems, the complete text of the GNU General
 | 
			
		||||
  Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								debian/control
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								debian/control
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -11,7 +11,7 @@ Vcs-Browser: http://github.com/waja/blah
 | 
			
		|||
Package: monitoring-plugins-cyconet
 | 
			
		||||
Architecture: any
 | 
			
		||||
Depends: ${misc:Depends}
 | 
			
		||||
Recommends: ${shlibs:Depends}, ${python:Depends}, libnet-snmp-perl, nagios-plugins-common, libtime-modules-perl, python-argparse, libwww-perl, libredis-perl, libnet-tftp-perl, libxml-xpath-perl, ${perl:Depends}
 | 
			
		||||
Recommends: ${shlibs:Depends}, ${python:Depends}, libnet-snmp-perl, nagios-plugins-common, libtime-modules-perl, libencode-perl, liburi-perl, libnagios-plugin-perl, python-argparse, libwww-perl, libredis-perl, libnet-tftp-perl, libxml-xpath-perl, ${perl:Depends}
 | 
			
		||||
Suggests: 
 | 
			
		||||
Enhances: nagios-plugins, nagios-plugins-basic, nagios-plugins-standard
 | 
			
		||||
Description: Plugins for nagios compatible monitoring systems
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ Description: Plugins for nagios compatible monitoring systems
 | 
			
		|||
 .
 | 
			
		||||
   * check_bgp (0.4): plugin to check BGP peer status via SNMP.
 | 
			
		||||
   * check_file: plugin to check file count,  size and ages
 | 
			
		||||
   * check_kibana (ba6ba46693561f9b6c0f2bd416e8ae6b344e5043): Plugin script used to query kibana
 | 
			
		||||
   * check_openvpn (20130904): plugin to check if an OpenVPN server runs on a given port
 | 
			
		||||
   * check_phpfpm_status (0.9): plugin to check the fpm-status page report from php-fpm
 | 
			
		||||
   * check_redis (0.72): plugin that verifies redis server is working.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								debian/copyright
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								debian/copyright
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -58,6 +58,22 @@ check_file:
 | 
			
		|||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
check_kibana:
 | 
			
		||||
 | 
			
		||||
The plugin was downloaded from: 
 | 
			
		||||
https://github.com/lingej/nagios-scripts/blob/master/nagios-plugins/check_kibana
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2013 Joerg Linge <pitchfork@ederdrom.de>
 | 
			
		||||
  
 | 
			
		||||
  License: GPL v3
 | 
			
		||||
  
 | 
			
		||||
    On Debian systems, the complete text of the GNU General
 | 
			
		||||
    Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
check_openvpn:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue