Add simple Zabbix service status scripts

This commit is contained in:
Daniel Berteaud 2019-09-13 15:06:35 +02:00
parent 9de059cdd2
commit ec110483dd
3 changed files with 130 additions and 0 deletions

11
zabbix_conf/zimbra.conf Normal file
View File

@ -0,0 +1,11 @@
# Discovery of configured host
# Key: zimbra.discovery[services] or zimbra.discovery[servers]
# Macro: {#ZM_SERVICE}
# Other available macros:
UserParameter=zimbra.discovery[*],/usr/bin/sudo /var/lib/zabbix/bin/disco_zimbra_sudo --$1
# Item prototypes
# key: zimbra.check[*]
# or
# Returns a JSON object, use dependent item to split it
UserParameter=zimbra.status[*],/usr/bin/sudo /var/lib/zabbix/bin/check_zimbra_sudo --status=$2

View File

@ -0,0 +1,59 @@
#!/usr/bin/perl -w
use JSON;
use POSIX;
use Getopt::Long;
use Net::Domain qw(hostfqdn);
use Data::Dumper;
my $pretty = 0;
my $status = 'all';
GetOptions(
"pretty" => \$pretty,
"status=s" => \$status
);
if (defined $service and $service !~ m/^\w+$/){
die "Invelid service name\n";
}
my $zmprov = '/opt/zimbra/bin/zmprov';
my $zmcontrol = '/opt/zimbra/bin/zmcontrol';
my $hostname = hostfqdn();
# We need to switch to zimbra
my $uid = getuid();
my $gid = getgid();
my (undef,undef,$zimuid,$zimgid) = getpwnam('zimbra');
if (not defined $zimuid or not defined $zimgid or not -e $zmprov){
print 'ZBX_NOTSUPPOTED';
exit;
}
setuid($zimuid) if ($uid ne $zimuid);
setgid($zimgid) if ($gid ne $zimgid);
# If there's no zimbra user or no zmcontrol, return unsupported item
if (not defined $zimuid or not defined $zimgid or not -e $zmprov){
print 'ZBX_NOTSUPPOTED';
exit 0;
}
my $output = {};
if (defined $status){
foreach my $line (qx($zmcontrol status)){
if ($line =~ m/^\s+(\w+)\s+(Running|Stopped)/){
$output->{$1} = ($2 eq 'Running') ? 1 : 0;
}
}
if ($service eq 'all'){
print to_json($output, { pretty => $pretty });
} elsif (defined $output->{$status}){
print $output->{$status}
} else {
print 'ZBX_NOTSUPPORTED';
}
}

View File

@ -0,0 +1,60 @@
#!/usr/bin/perl -w
use JSON;
use POSIX;
use Getopt::Long;
use Net::Domain qw(hostfqdn);
use Data::Dumper;
my $json;
@{$json} = ();
my $pretty = 0;
my $services = 1;
my $servers = 0;
GetOptions(
"pretty" => \$pretty,
"services" => \$services,
"servers" => \$servers
);
if ($servers) {
$services = 0;
}
my $uid = getuid();
my $gid = getgid();
my (undef,undef,$zimuid,$zimgid) = getpwnam('zimbra');
my $zmprov = '/opt/zimbra/bin/zmprov';
my $hostname = hostfqdn();
# If there's no zimbra user or no zmcontrol, just return an empty list
if (not defined $zimuid or not defined $zimgid or not -e $zmprov){
print to_json({});
exit;
}
# Switch to Zimbra user
setuid($zimuid) if ($uid ne $zimuid);
setgid($zimgid) if ($gid ne $zimgid);
if ($services){
foreach my $service (qx($zmprov getServer $hostname zimbraServiceEnabled)){
if ($service =~ m/^zimbraServiceEnabled:\s+(\w+)/){
push @{$json}, {
'{#ZM_SERVICE}' => $1
};
}
}
} elsif ($servers){
foreach my $server (qx($zmprov getAllServers)){
chomp $server;
push @{$json}, {
'{#ZM_SERVER}' => $server
};
}
}
print to_json($json, { pretty => $pretty });