Страница 1 из 1

Re: Скрипт мониторинга (версия из второго сообщения полностью работоспособна, из первого не актуальна)

Добавлено: 05 июн 2024, 22:21
Sertik
Спасибо автору. Очень не плохо. Заслуживает внимания.

Re: Скрипт мониторинга (версия из второго сообщения полностью работоспособна, из первого не актуальна)

Добавлено: 12 июн 2024, 01:01
Brook
Автор просил делиться мыслями, нам не жалко. Не критики ради, а обучения для.

Первый вариант не смотрел, второй разобрал. Скрипт создает netwatch-и с типом simple и прописывает код в up-script и down-script и вот там вся логика.

Разберем на примере down-script:

Код: Выделить всё

:local state [tool netwatch get value-name=comment [find host=\"$v\"]];
Здесь вы получаете состояние netwatch путем поиска этой записи по полю host, получая из нее комментарии. Далее по скрипту вся работа идет с ними.

Возник вопрос зачем через комментарии это делать, если можно обратиться к полю status этой записи, раз уже нашли её. Но можно вообще ничего не искать. Поиск - операция затратная.

Все нужные переменные уже есть в памяти во время выполнения скрипта. Можете в этом убедиться прописав в up или down:

Код: Выделить всё

:log info ("host:" . $host)
:log info ("type:" . $type)
:log info ("interval:" . $interval)
:log info ("status:" . $status)
:log info ("done-tests:" . $"done-tests")
А если все переменные есть, то не нужно ничего искать. Скрипт и так знает о себе всё.

Дополнительные пинги только мешают, лучше выставить задержку больше чем $interval, а после нее проверять $status и уже в зависимости от этого принимать решение об отправке в Телеграм.

Скрипт, который идет в up и down можно сильно сократить и сделать одинаковым для обоих. А можно использовать test-script. Это тот код, который будет выполняться через каждый $interval.

Что касается глобальных переменных, то они действительно недоступны из netwatch. Но есть обходной путь. Можно вместо кода прописать имя скрипта, который будет выполнен, и там уже они будут доступны.

Причем все локальные переменные из netwatch будут доступны во внешнем скрипте, потому что он использует контекст скрипта netwatch .

Чтобы убедиться в этом, создайте скрипт с именем script1 и правами read, write, test, reboot, пропишите в нем код, который выше. В поле test для netwatch пропишите имя script1. Все переменные все-равно будут выведены в лог.