Здравствуйте! Есть такая задача: в название триггера на состояние порта коммутатора (например Fa0/19 OperStatus is down) вписать некоторую переменную (имя этого порта, полученного системой из oid'a). Перепробовал разные варианты - значение переменной не пишется или отображаются вместо значения знаки вопросов. Как можно решить эту проблему?
Ad Widget
Collapse
Как отобразить значение переменной в име
Collapse
X
-
Здравствуйте, Анатолий.
В настоящее время тоже решаю эту задачу. Пока не придумал простых вариантов. Остановился на следующем: Каждый интерфейс мониториться шаблоном. Имя шаблона - его OID. В этом шаблоне есть элемент, который хранит имя (называется -NAME). При возникновении события в агент заббикса на сервере заббикса выполняет скрипт, которому передается имя хоста его ip-адрес и Имя шаблона. Этот скрипт зная OID запросом выбирает из БД Zabbix имя элемента OID-NAME, сам формирует и отправляет письмо об ошибке. Теоретически должно сработать. Осталось только проверить.
Может кто подскажет более легкий путь.
С уважением, Navoyenok -
-
Анатолий, доброго времени суток.
Скрипт называется /home/zabbix/bin/ifcheck.pl
--- начало скрипта ---
#!/usr/bin/perl
use strict;
use DBI;
my($HOSTNAME) = $ARGV[0];
my($TRIGGER) = $ARGV[1];
my($EMAIL) = $ARGV[2];
my($res,$work);
my($ResultatMail);
$work = $TRIGGER;
$work =~ m/(.+)-(.+)/;
my($left) = $1;
my($right) = $2;
if( $left eq "" ) {
exit 0;
}
$work = $left."-NAME";
sub FindElementValue {
my $HN = $_[0];
my $IT = $_[1];
my($SQLString);
my($Result);
my($dbh);
$SQLString = "SELECT lastvalue FROM hosts,items WHERE (hosts.hostid=items.hostid) AND (host=\"".$HN."\") AND ";
$SQLString .= "(description=\"".$IT."\");";
$dbh = DBI->connect('DBI:mysql:zabbixdb', 'zabbixreadonlyuser', 'password'
) || die "Could not connect to database: $DBI::errstr";
my($sth) = $dbh->prepare($SQLString);
$sth->execute();
($Result) = $sth->fetchrow_array();
$sth->finish();
$dbh->disconnect();
return($Result);
}
my($result) = FindElementValue($HOSTNAME,$work);
$ResultatMail = "";
if( $result eq "") {
$result = "Incorrect Name Detected (I'm Looking for STRING. Check OID please)";
}
`/usr/bin/printf "$ResultatMail\n" | /usr/bin/mail -a "From: zabbix\@zabbix.com" -s "$HOSTNAME: $result: Down" $EMAIL`;
--- Конец скрипта - --
Скрипт запускается используя Remote Command (в настройке действий):
ZabbixServer:/home/zabbix/bin/ifcheck.pl "{HOSTNAME}" "{ITEM.NAME}" [email protected]
При этом "{ITEM.NAME}" должен быть вида: xxxxxxx-ЧтоТо
Имя интерфейса должно быть вида: xxxxxx-NAME
(Ну это понятно и из скрипта)
Пишите, постараюсь помочь.
С уважением, NavoyenokComment

Comment