Add Elasticsearch monitoring scripts
This commit is contained in:
parent
ad9b9b569a
commit
74b3ba5928
|
@ -0,0 +1,2 @@
|
|||
UserParameter=elasticsearch.discovery[*],/var/lib/zabbix/bin/disco_elasticsearch --url=$1 --user=$2 --pass=$3 --$4
|
||||
UserParameter=elasticsearch.check[*],/var/lib/zabbix/bin/check_elasticsearch --url=$1 --user=$2 --pass=$3 --$4 $5
|
|
@ -0,0 +1,86 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use JSON;
|
||||
use Getopt::Long;
|
||||
use LWP::UserAgent;
|
||||
use HTTP::Request::Common;
|
||||
use URI;
|
||||
use Data::Dumper;
|
||||
|
||||
my $user = undef;
|
||||
my $pass = undef;
|
||||
my $url = 'http://localhost:9200';
|
||||
my $certcheck = 1;
|
||||
my $cluster = 0;
|
||||
my $node = undef;
|
||||
my $index = undef;
|
||||
my $pretty = 0;
|
||||
|
||||
my $json = {};
|
||||
|
||||
GetOptions (
|
||||
'user=s' => \$user,
|
||||
'password|p=s' => \$pass,
|
||||
'url=s' => \$url,
|
||||
'cert-check!' => \$certcheck,
|
||||
'cluster' => \$cluster,
|
||||
'node=s' => \$node,
|
||||
'index=s' => \$index,
|
||||
'pretty' => \$pretty
|
||||
);
|
||||
|
||||
# If no option is given, default to fetch the cluster status
|
||||
if (not defined $cluster and not defined $node and not defined $index){
|
||||
$cluster = 1;
|
||||
}
|
||||
|
||||
my $uri = URI->new($url);
|
||||
|
||||
if (not defined $uri){
|
||||
die "COuldn't parse $url as a valid url\n";
|
||||
}
|
||||
|
||||
# If connecting over http or is host is localhost
|
||||
# there's no need to check certificate
|
||||
if ($uri->scheme eq 'http' or $uri->host =~ m/^localhost|127\.0\.0/){
|
||||
$certcheck = 0;
|
||||
}
|
||||
|
||||
my $resp;
|
||||
my $sslopts = {};
|
||||
if (not $certcheck){
|
||||
$sslopts = {
|
||||
verify_hostname => 0,
|
||||
SSL_verify_mode => 0
|
||||
}
|
||||
}
|
||||
|
||||
my $ua = LWP::UserAgent->new(
|
||||
ssl_opts => $sslopts
|
||||
);
|
||||
|
||||
if ($cluster){
|
||||
$json = make_request('/_cluster/stats');
|
||||
} elsif (defined $node){
|
||||
$json = make_request('/_nodes/' . $node);
|
||||
} elsif (defined $index){
|
||||
$json = make_request('/_cluster/health/' . $index . '?level=indices')->{'indices'}->{$index};
|
||||
}
|
||||
|
||||
print to_json($json, { pretty => $pretty });
|
||||
|
||||
sub make_request {
|
||||
my $path = shift;
|
||||
my $req_url = $url . $path;
|
||||
my $req = GET $req_url;
|
||||
if (defined $user and defined $pass){
|
||||
$req->authorization_basic($user, $pass);
|
||||
}
|
||||
my $resp = $ua->request($req);
|
||||
die "Request to $req_url failed : " . $resp->message . "\n" if $resp->is_error;
|
||||
return from_json($resp->decoded_content);
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use JSON;
|
||||
use Getopt::Long;
|
||||
use LWP::UserAgent;
|
||||
use HTTP::Request::Common;
|
||||
use URI;
|
||||
use Data::Dumper;
|
||||
|
||||
my $user = undef;
|
||||
my $pass = undef;
|
||||
my $url = 'http://localhost:9200';
|
||||
my $certcheck = 1;
|
||||
my $nodes = 0;
|
||||
my $indices = 0;
|
||||
my $pretty = 0;
|
||||
|
||||
my $json = [];
|
||||
|
||||
GetOptions (
|
||||
'user=s' => \$user,
|
||||
'password|p=s' => \$pass,
|
||||
'url=s' => \$url,
|
||||
'cert-check!' => \$certcheck,
|
||||
'nodes' => \$nodes,
|
||||
'indices' => \$indices,
|
||||
'pretty' => \$pretty
|
||||
);
|
||||
|
||||
if ($nodes and $indices){
|
||||
die "--nodes and --indices are mutually exclusive\n";
|
||||
}
|
||||
|
||||
my $uri = URI->new($url);
|
||||
|
||||
if (not defined $uri){
|
||||
die "$url is not a valid URL\n";
|
||||
}
|
||||
|
||||
# If connecting over http or is host is localhost
|
||||
# there's no need to check certificate
|
||||
if ($uri->scheme eq 'http' or $uri->host =~ m/^localhost|127\.0\.0/){
|
||||
$certcheck = 0;
|
||||
}
|
||||
|
||||
my $sslopts = {};
|
||||
if (not $certcheck){
|
||||
$sslopts = {
|
||||
verify_hostname => 0,
|
||||
SSL_verify_mode => 0
|
||||
}
|
||||
}
|
||||
|
||||
my $ua = LWP::UserAgent->new(
|
||||
ssl_opts => $sslopts
|
||||
);
|
||||
|
||||
if ($nodes){
|
||||
foreach (@{make_request('/_cat/nodes?format=json')}){
|
||||
push @{$json}, {
|
||||
'{#ES_NODE_NAME}' => $_->{name},
|
||||
'{#ES_NODE_ROLE}' => $_->{'node.role'}
|
||||
};
|
||||
}
|
||||
} elsif ($indices){
|
||||
foreach (@{make_request('/_cat/indices?format=json')}){
|
||||
push @{$json}, {
|
||||
'{#ES_INDICE_NAME}' => $_->{index},
|
||||
'{#ES_INDICE_STATUS}' => $_->{status},
|
||||
'{#ES_INDICE_UUID}' => $_->{uuid}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
print to_json($json, { pretty => $pretty });
|
||||
|
||||
sub make_request {
|
||||
my $path = shift;
|
||||
my $req_url = $url . $path;
|
||||
my $req = GET $req_url;
|
||||
if (defined $user and defined $pass){
|
||||
$req->authorization_basic($user, $pass);
|
||||
}
|
||||
my $resp = $ua->request($req);
|
||||
die "Request to $req_url failed : " . $resp->message . "\n" if $resp->is_error;
|
||||
return from_json($resp->decoded_content);
|
||||
}
|
||||
|
Loading…
Reference in New Issue