Доброго времени суток! Я новичок в Zabbix, и возникла необходимость отправлять последние значения двух элементов данных с помощью sh скрипта. В скрипт должны передаваться именно 2 числовых параметра из соответствующего элемента данных (например, send.sh 10 12). Числовые значения в элементах данных (для удобства назовем их ЭД1 и ЭД2) поступают по SNMP. Возник вопрос, как отправлять последние значения (на момент отправки) ЭД1 и ЭД2 в определенное число месяца и время (например, 25 числа в 10.00), при этом значения должны быть переданы на вход sh скрипта. Возможно ли такое реализовать?
Ad Widget
Collapse
Отправка последнего значения элеменов д&
Collapse
X
-
-
Возможно передать 1 значение на сервер для 1-го ключа.
Но в скрипте у Вас можно N значений для N ключей.
Пример:
#!/bin/sh
ZABBIX_SENDER=/usr/local/bin/zabbix_sender
ZABBIX_CONF=/usr/local/etc/zabbix22/zabbix_agentd.conf
send2zabbix() {
KEY=$1
VALUE=$2
$ZABBIX_SENDER -c $ZABBIX_CONF -k $KEY -o $VALUE
}
send2zabbix exim.received $1
send2zabbix exim.receivedbytes $2
send2zabbix exim.rejected $3
send2zabbix exim.errors $4 -
Но, насколько я понял, это отправка на другой заббикс сервер, а у меня уже есть свой sh, который на сайт отправляет значения GET-методом. Не понятно, как этот скрипт подключить к самому Заббиксу, и чтобы при этом он отрабатывал в определенное время, извлекая из базы последнее значение.Comment
-
Я понял автора темы с точностью до наоборот: нужно, чтобы в определённый момент запускался бы скрипт, который каким-то образом получит от Zabbix-сервера последние (на этот момент) значения для двух разных элементов данных и что-то с ними сделает (отправит куда-то дальше). И вопрос состоит в том, как эти значения скрипту предоставить.
Если я понял правильно, то пусть автор это подтвердит (а заодно укажет хотя бы версию своего Zabbix-сервера) - постараемся накидать какие-то варианты.Comment
-
Тогда первый вариант - это пускать Ваш скрипт совершенно независимо от Zabbix-а (например, по cron-у), а из скрипта лазить к серверу Zabbix за нужными значениями через Zabbix API. Но я сам опыта работы с этими API не имею, дальше не подскажу (хотя знаю, что народ ими активно пользуется).
Другой вариант - сделать так, чтобы Ваш скрипт запускался самим Zabbix-сервером как результат срабатывания триггера. Тут основная идея такая:- делаем фиктивный элемент данных, который опрашивается сервером в нужное Вам время. Он нужен только чтобы задать расписание работы скрипта;
- на этот фиктивный элемент данных навешиваем такой же фиктивный триггер, который будет срабатывать всегда при получении нового значения фиктивного элемента данных. Чтобы он не висел всегда, мозоля глаза, можно его гасить по тайм-ауту (например, используя функцию nodata() для этого элемента данных);
- в тот же триггер добавляем фиктивное упоминание нужных Вам элементов данных, ради которых всё затевалось. Это упоминание должно быть сформулировано так, чтобы не влиять на остальную работу триггера (т.е. использовать функции с условиями, которые выполняются всегда, например: count(#1)>0);
- заключительный аккорд: создаём действие (Action), которое при срабатывании данного триггера будет запускать Ваш скрипт. И в этом действии при вызове скрипта можно будет ссылаться на последние элементы данных, используя макросы {ITEM.VALUE<1-9>} (в том порядке, как они идут в триггере).
Т.е. триггер будет иметь вид вроде такого:
В таком случае триггер будет срабатывать при получении любого нового значения в элемент данных dummy_item и гаситься через полминуты после этого. А в действии на этот триггер последние значения элементов данных needed_item1 и needed_item2 будут доступны как {ITEM.VALUE2} и {ITEM.VALUE3}.Code:{Host:dummy_item.nodata(30)}=0 and {Host:needed_item1.count(#1)}>0 and {Host:needed_item2.count(#1)}>0Comment
-
Поскольку речь идёт про скрипт, а там поддерживаются макросы вида {host:item.func()}, то не обязательно в триггере упоминать те два айтема, значения которых надо отправлять. Даже проверку времени можно делать в самом триггере с помощью функций timeofday(), dayofweek(), dayofmonth(). А в команде будет просто:В остальном я полностью поддерживаю Kos'а.Code:script.sh "{host1:item1.last()}" "{host2:item2.last()}"Comment
-
Спасибо, разобрался с api, это то, что было нужно.Тогда первый вариант - это пускать Ваш скрипт совершенно независимо от zabbix-а (например, по cron-у), а из скрипта лазить к серверу zabbix за нужными значениями через zabbix api.
Comment
Comment