Задать вопрос
fogersp
@fogersp

Zabbix: External check. Как в Zabbix передать массив со значениями из скрипта?

Доброго времени суток!
Собираю с девайса информацию с помощью External check, так как по snmp нужное не отдает.
Так как нужно забирать значений 5-7, то как-то напрягает, что каждый раз заббикс будет инициировать скрипт с заходом по ssh и выполнение команды.

Не нашел как например сделать, что бы если у меня скрипт будет возвращать массив со значениями, как передать его в Zabbix и уже потом в нем обработать для разных Item's? Или как правильно здесь поступить чтобы обойтись одним скриптом?

Подскажите у кого есть опыт. С одним возвращаемым значением все норм.
  • Вопрос задан
  • 3270 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@neol
Как вариант - в скрипте дёргать zabbix_sender, который уже будет заталкивать в сервер пачку значений (ему можно передать файлик со списком).
Ответ написан
fogersp
@fogersp Автор вопроса
Вот что получилось. Может кому поможет:

Должен быть установлен sshpass

Скриптик вот такой получился (для девайса Ubiquiti Nanostation). Положить в /usr/local/share/zabbix/externalscripts (можно реализовать и на Bash, но мне в данном случае удобнее php)

#!/usr/bin/php
<?php
 
// Filename: ubnt

$host = $argv[1];
$user = $argv[2];
$pass = $argv[3];
 
exec("sshpass -p $pass ssh -o StrictHostKeyChecking=no -l $user $host mca-status", $out);
 
$search = array("ccq",
                "signal",
                "wlanPollingCapacity",
                "wlanPollingQuality",
                "wlanConnections",
                "noise",
                "wlanRxRate",
                "wlanTxRate",
                "apMac"
               );
 
foreach ($out as $k) {
    $v = explode("=", $k);
 
    if (in_array($v[0], $search)) {
        $result[$v[0]] = $v[1];
    }
    continue;
}
 
echo $result["apMac"] . "\n";
 
foreach ($result as $item => $value) {
    exec("zabbix_sender -z 127.0.0.1 -s $host -k $item -o $value", $output);
}
?>


У каждого хоста в макросах должно быть {$LOGIN} и {$PASSWORD}

Ну и в шаблоне создаем один Item с типом External check и Key = ubnt["{HOST.CONN}","{$LOGIN}","{$PASSWORD}"]. Тип выставить в Text. Этим мы инициируем сбор информации с устройства.
А для нужных Item ставим тип Zabbix Trapper и Key = нужный ключ (из массива $search).

Работает без проблем. Спасибо neol за хинт с zabbix_sender.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы