Я полный новичок в 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 секунд. Итак, мне нужно найти лучший способ контролировать время выполнения скрипта, как лучше всего достичь этой цели?
Вам нужно отслеживать, как долго выполняется процесс, или вам нужно предупреждать, если процесс занимает слишком много времени?
Если это первое, вы можете изменить сценарий, чтобы он отправлял информацию о времени выполнения, используя 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
Это также может быть самым простым решением.