Я полный новичок в Zabbix, и это мое первое задание... Мне нужно создать монитор с использованием Zabbix и отслеживать, как долго выполняется один скрипт. Скрипт выглядит так:
device0="/home/build/aggregator/scripts/aggregator.lock"
if [ -e "$device0" ]
then
echo process is already running
else
touch $device0
java -Xms6g -Xmx6g -jar /home/build/aggregator/aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar
rm $device0
fi
Скрипт создает файл с именем , aggregator.lock
который гарантирует, что скрипт запустится только один раз, скрипт настроен в Crontab на запуск каждую минуту. Я создал следующие элементы:
Пока aggregator.lock
файл существует, Zabbix vfs.file.exists
возвращает: 1.
[root@zabbix ~]# zabbix_get -s 10.200.X.X -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock]
1
[root@zabbix ~]#
И vfs.file.time
проверка возвращает: 1400057821 (время Unix).
Пока aggregator.lock
файл не существует, Zabbix возвращает: 0. А vfs.file.time
проверка возвращает: ZBX_NOTSUPPORTED.
Проверка запускается каждые 30 секунд, чтобы минимизировать трафик в сети, но скрипт запускается примерно на 10-20 секунд каждый раз. Поэтому мне нужно найти лучший способ контролировать время выполнения скрипта, какой будет лучшим способом достижения этой цели?
решение1
Нужно ли вам отслеживать длительность выполнения процесса или оповещать, если процесс занимает слишком много времени?
Если это первый вариант, вы можете изменить скрипт так, чтобы он отправлял информацию о времени выполнения с помощью zabbix_sender
, например так:
#!/bin/bash
date1=$(date '+%s')
sleep 5
date2=$(date '+%s')
duration=$(($date2-$date1))
zabbix_sender -z 127.0.0.1 -s 'my host' -k duration -o $duration
Здесь «sleep 5» — это ваша команда «java».
Если это последний вариант, вы можете изменить скрипт так, чтобы он отправлял значение «1» при запуске скрипта и значение «0» при его завершении, например:
#!/bin/bash
zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 1
sleep 5
zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 0
Затем вы можете создать триггер, аналогичный следующему, чтобы оповещать, если процесс занимает слишком много времени:
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
Если изменение скрипта невозможно, вы можете использовать элемент proc.num[]:
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
Сделайте так, чтобы проверка производилась каждые 15 секунд, и оповещайте, если последние три значения (за 30 секунд) показывают, что процесс запущен:
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
Это также может быть самым простым решением.