Damit ich es selber wieder finde und nicht ewig suchen muss (wie heute), hier das Perl Skript und ein Beispiel Template für die Anbindung an Zabbix:
Das Skript kommt z.B. als Datei
Auf einem nackigen Debian ist Perl immer passend installiert, allerdings muss mit
Im Zabbix Template dann idealerweise die Variablen (Macros)
Der Aufruf des Skriptes als Item vom Typ External Check erfolgt mit
perl rulez
Perl:
#!/usr/bin/perl
use strict;
use warnings;
use REST::Client;
use JSON;
my ($fqdn, $port, $username, $userpassword, $type);
while (my $s = shift(@ARGV)) {
for($s) {
if( /^-H/) { $fqdn = shift(@ARGV); }
elsif(/^-P/) { $port = shift(@ARGV); }
elsif(/^-U/) { $username = shift(@ARGV); }
elsif(/^-S/) { $userpassword = shift(@ARGV); }
elsif(/^-T/) { $type = shift(@ARGV); }
else { print "INVALID PARAMETER SYNTAX\n"; }
}
}
my $client = REST::Client->new();
my $res = "";
$client->setHost("https://$fqdn");
$client->addHeader('Accept', 'application/json');
$client->addHeader('Content-Type', 'application/json');
$client->addHeader('charset', 'UTF-8');
$client->getUseragent()->cookie_jar({});
my $req = "{\"username\":\"$username\", \"password\":\"$userpassword\"}";
$client->POST('/api/login', $req);
if ($client->responseContent() eq 'AuthSuccess') {
$client->GET("/api/$type");
print $client->responseContent();
$client->POST('/api/logout', $req);
}
else {
print "NO CONNECT TO 3CX\n";
exit 1;
}
exit 0;
Das Skript kommt z.B. als Datei
3cx-monitoring-restapi.pl auf einem Debian (aktuell 12, Bookworm) mit Zabbix Server (aktuell 6.0 LTS) in das Verzeichnis/usr/lib/zabbix/externalscripts/ und bekommt mitchmod +x ... noch die Rechte ausführbar.Auf einem nackigen Debian ist Perl immer passend installiert, allerdings muss mit
apt -y install librest-client-perl noch die Rest Library für Perl installiert werden.Im Zabbix Template dann idealerweise die Variablen (Macros)
{$TCX_FQDN}, {$TCX_TCP_PORT}, {$TCX_USERNAME} und {$TCX_PASSWORD} mit den passenden Werten einrichten. Es ist sinnvoll, einen extra Benutzer in der 3CX vom Typ Systemadministrator dafür einzurichten, damit der normale administrative Benutzer nicht ständig abgemeldet wird. Der extra Benutzer bekommt auch eine eigene Gruppe und wird aus der Default gelöscht. Damit ist der nicht sichtbar. Die Anmeldung erfolgt dann nicht mit dem Namen sondern der NSt. Nummer und dessen 3CX Webkennwort (neu vergeben).Der Aufruf des Skriptes als Item vom Typ External Check erfolgt mit
3cx-monitoring-restapi.pl["-H", "{$TCX_FQDN}", "-P", "{$TCX_TCP_PORT}", "-U", "{$TCX_USERNAME}", "-S", "{$TCX_PASSWORD}", "-T", "SystemStatus"]. Da kommt dann JSON zurück. Das kann alles gut direkt ausgewertet werden, siehe Beispiel Template.perl rulez
Anhänge
Zuletzt bearbeitet: