Назад | Перейти на главную страницу

Zabbix: Как это делается при попытке отслеживать время выполнения скрипта?

Я полный новичок в 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

Это также может быть самым простым решением.