Мониторинг свободного места на диске с помощью OneScript

30.05.21

Администрирование - Мониторинг

Скрипт, который проверяет объем свободного места на каждом диске и оповещает на почту о нехватке места.

Проблема: на сервере в любой непредсказуемый момент заканчивается место на диске, происходят сбои, процессы останавливаются.

Задача: настроить оперативное оповещение на почту, если свободного места на диске осталось меньше 5 Гб.

Решение

1) Устанавливаем OneScript (или можно скачать и распаковать портативную версию): https://oscript.io/

2) В командной строке устанавливаем библиотеку для работы с почтой:

opm install InternetMail


3) Создаем файл FreeDiskSpace.os и правим под свою специфику

#Использовать InternetMail

Функция ОтправитьПисьмо(Тема, Текст, МассивВложений) 
	Пользователь = "test@mail.ru";
	Пароль = "12345WWWeee";
	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АдресСервераSMTP    = "smtp.mail.ru";
	Профиль.ПользовательSMTP    = Пользователь;
	Профиль.ПарольSMTP          = Пароль;
	Профиль.ИспользоватьSSLSMTP = Истина;
	Профиль.АдресСервераIMAP    = "imap.mail.ru";
	Профиль.ИспользоватьSSLIMAP = Истина;
	Профиль.Пользователь = Пользователь;
	Профиль.Пароль = Пароль;
	Сообщение = Новый ИнтернетПочтовоеСообщение;
	Сообщение.Получатели.Добавить("admin1@domain.ru");
	Сообщение.ОбратныйАдрес.Добавить("admin1@domain.ru");
	Сообщение.Отправитель = Пользователь;
	Сообщение.Тема = Тема;
	Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML);
	Для Каждого Влож Из МассивВложений Цикл
		Сообщение.Вложения.Добавить(Влож);
	КонецЦикла;
	Почта = Новый ИнтернетПочта;
	Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3);
	Почта.Послать(Сообщение, , ПротоколИнтернетПочты.SMTP);
КонецФункции

Функция ОбъемСвободноГб(БукваДиска)
	ид = Новый ИнформацияОДиске(БукваДиска);
	ДоступноБайт = ид.Доступно;
	ДоступноКб = ДоступноБайт / 1024;
	ДоступноМб = ДоступноКб / 1024;
	ДоступноГб = ДоступноМб / 1024;
	Возврат ДоступноГб;
КонецФункции

Функция ТемаСОбъемомДиска(Тема, БукваДиска, ДоступноГб, МинОбъемГб)
	Тема2 = Тема;
	Если ДоступноГб < МинОбъемГб Тогда 
		сДоступноГб = Строка(ОКР(ДоступноГб));
		Тема2 = Тема + БукваДиска + "=" + сДоступноГб + " Гб; ";		
	КонецЕсли;
	Возврат Тема2;
КонецФункции

Функция ТекстСообщенияСвободноНаДиске(БукваДиска, ДоступноГб)
	тСообщ = Строка(ТекущаяДата()) + " На диске '" + БукваДиска +"' свободно " + Строка(ОКР(ДоступноГб)) + " Гб.";
	Возврат тСообщ;
КонецФункции

Попытка	
	МинОбъемГб = 5;
	КоличествоДнейХраненияЛогов = 2;
	Тема = "Dev windows2016 Мало места на дисках: ";
	Текст = "На дисках меньше " + Строка(МинОбъемГб) + " Гб. Освободите занятое пространство. На каждом диске должно быть свободного места больше " + Строка(МинОбъемГб) + " Гб.";
	ТекДата = ТекущаяДата();
	МинДатаИзмененияФайла = ТекДата - КоличествоДнейХраненияЛогов*60*60*24;
	тЛог = "";
	МассивВложений = Новый Массив; 
	
	сТекДата = Строка(ТекДата);
	сТекДата = СтрЗаменить(сТекДата, Символы.НПП, "");
	сТекДата = СтрЗаменить(сТекДата, ":", ".");
	сТекДата = СтрЗаменить(сТекДата, " ", "_");
	чДень = День(ТекДата);
	чГод = Год(ТекДата);
	чМес = Месяц(ТекДата);
	сГод = СтрЗаменить(Строка(чГод), Символы.НПП, "");
	сМес = ?(чМес > 9, Строка(чМес), "0"+Строка(чМес));
	сДень = ?(чДень > 9, Строка(чДень), "0"+Строка(чДень));
	КаталогЛогов = "C:\LOGS\" + сГод + "\" + сМес + "\";
	СоздатьКаталог(КаталогЛогов);
	ИмяЛогаПроверки = КаталогЛогов + "FreeDiskSpace_" + сТекДата + ".txt";
	ЛогУд = Новый ЗаписьТекста(ИмяЛогаПроверки, КодировкаТекста.UTF8);
	
	СДоступноГб = ОбъемСвободноГб("C");
	ДДоступноГб = ОбъемСвободноГб("D");
	
	Тема = ТемаСОбъемомДиска(Тема, "C", СДоступноГб, МинОбъемГб);
	Тема = ТемаСОбъемомДиска(Тема, "D", ДДоступноГб, МинОбъемГб);
	
	тСообщ = ТекстСообщенияСвободноНаДиске("C", СДоступноГб);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	тЛог = тСообщ;
	тСообщ = ТекстСообщенияСвободноНаДиске("D", ДДоступноГб);
	ЛогУд.ЗаписатьСтроку(тСообщ);
	тЛог = тЛог + Символы.ПС + тСообщ;
	
	МасФ = НайтиФайлы(КаталогЛогов, "*.*");
	Для Каждого Ф ИЗ МасФ Цикл
		ДатаФайла = Ф.ПолучитьВремяИзменения();
		Если ДатаФайла < МинДатаИзмененияФайла Тогда
			тСообщ = Строка(ТекущаяДата()) + " Удаляется файл '" + Ф.ПолноеИмя + "', так как дата изменения='" + Строка(ДатаФайла) + "' < '" + Строка(МинДатаИзмененияФайла) + "'.";
			ЛогУд.ЗаписатьСтроку(тСообщ);
			УдалитьФайлы(Ф.ПолноеИмя);
		Иначе
			тСообщ = Строка(ТекущаяДата()) + " Остается файл '" + Ф.ПолноеИмя + "', так как дата изменения='" + Строка(ДатаФайла) + "' >= '" + Строка(МинДатаИзмененияФайла) + "'.";
			ЛогУд.ЗаписатьСтроку(тСообщ);
		КонецЕсли;
	КонецЦикла;
	
	Если СДоступноГб < МинОбъемГб ИЛИ ДДоступноГб < МинОбъемГб Тогда 
		ЛогУд.ЗаписатьСтроку(Текст);
		ЛогУд.Закрыть();
		Текст = тЛог + Символы.ПС + Текст;				
		МассивВложений.Добавить(ИмяЛогаПроверки);
		ОтправитьПисьмо(Тема, Текст, МассивВложений);
	Иначе
		тСообщ = "На дисках более " + Строка(МинОбъемГб) + " Гб, поэтому считается, что все в порядке.";
		ЛогУд.ЗаписатьСтроку(тСообщ);
	КонецЕсли;
	
Исключение
		ОписОш = ОписаниеОшибки();
		тСообщ = "Скрипт остановился раньше, работа прервана. Проверьте работу скрипта.";
		тСообщ = тСообщ + Символы.ПС + "Ошибки: " + Символы.ПС + ОписОш;		
		Сообщить(тСообщ);
		ЛогУд.ЗаписатьСтроку(тСообщ);
		ЛогУд.Закрыть();
		МассивВложений.Добавить(ИмяЛогаПроверки);
		Тема = Тема + " - есть ошибки выполнения скрипта!";	
		ОтправитьПисьмо(Тема, тСообщ, МассивВложений);
КонецПопытки;

3) Создаем файл FreeDiskSpace.bat
 

"C:\Program Files\OneScript\bin\oscript.exe" "C:\Scripts\os\FreeDiskSpace.os"

4) Файл FreeDiskSpace.bat добавляем в планировщик заданий, например, с расписанием выполнения "Каждый час".

Таким образом задача решена.

Особенности: скрипт ведет лог своих операций на случай каких-либо непредсказуемых сбоев, если что-то пойдет иначе и потребуется быстро узнать причину ошибки.

Ограничения

Конечно, если диск заполнится раньше часа, то мониторинг не поможет, но такие ситуации должны решаться иначе: т.е. свободного дискового запаса должно хватать на достаточно длительное время.

свободное место заполнен диск дисковое мониторинг письмо на почту OneScript 1Script контроль диска места скрипт

См. также

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

В сферу обязанностей при работе с клиентами входит контроль работы баз данных и серверов 1С. Нужно понимать что происходит в базах, есть ли ошибки, зависания у пользователей и фоновых задач, блокировки или какое-то необычное поведение системы, получение информации о причинах возникновения проблем и их оперативное устранение и т.д. В качестве источников информации использую консоль кластеров 1С, технологический журнал 1С, журналы регистрации базы 1С. Для автоматизации части операций мониторинга и анализа создал инструмент на основе 1С.

9000 руб.

28.08.2019    31133    14    21    

66

Конфигурация Session Monitor

Мониторинг Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    14401    34    0    

49

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1564    bayselonarrend    3    

38

Yellow Watcher - Жёлтый наблюдатель за информационными базами

Мониторинг Платформа 1С v8.3 Абонемент ($m)

Программный комплекс мониторинга качества работы информационных баз. Статистика возникновения управляемых блокировок (тип, последняя строка контекста, контекст). Анализ длительных запросов по данным из технологического журнала. Анализ потребления ресурсов СУБД запросами и статистика ожиданий по данным из Query Store. Монитор информационной базы - получение плана запроса для сеанса 1С. Блокировки СУБД по данным block_report Extented Events, длительные запросы по данным из query_post_execution_showplan Extented Events.

1 стартмани

12.02.2024    3246    27    sdf1979    11    

53

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    3001    kamisov    17    

60

Проверка доступа к интернет на сервере 1С

Мониторинг Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Абонемент ($m)

Инструмент для проверки интернет - соединения на сервере 1С

3 стартмани

23.11.2023    1911    6    1395969    4    

2

Что такое ОСень? Или как лучшие практики из мира Java прижились в экосистеме OneScript

OneScript Бесплатно (free)

Думаете, на OneScript неудобно создавать сложные инфраструктурные приложения? Ошибаетесь. Благодаря фреймворку ОСень за последний год экосистема библиотек, упрощающих написание собственных приложений, существенно выросла. Расскажем о самых передовых технологиях OneScript. Спойлер: будет много рефлексии, мета-аннотаций, желудей, напильников и дубов с завязями.

21.11.2023    3258    NikitaIvanchenko    16    

46

Магия преобразований Vector, часть 3: журнал регистрации + прямой экспорт ошибок в Sentry

Журнал регистрации Мониторинг Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

19.11.2023    763    3    AlexSTAL    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sedaiko 578 03.06.21 12:21 Сейчас в теме
Круто.
но PS или Bash обычно в коробке
+
4. info1i 223 03.06.21 12:57 Сейчас в теме
(1) PS или Bash родные, но не являются универсальными, а bash даже требует пакет mailutils для отправки почты.
Данный же скрипт является и кроссплатформенным, и зависимым только от OneScript.
+
2. cmd_vasec 34 03.06.21 12:31 Сейчас в теме
В скрипте в открытую указан пароль от почты, как его скрыть?
+
3. info1i 223 03.06.21 12:50 Сейчас в теме
(2) На тему скрытия пароля в скрипте пока отсутствуют идеи.
+
5. cmd_vasec 34 03.06.21 13:06 Сейчас в теме
Написано не универсально, если мне надо добавить диск или убрать, надо вникать в код и дописывать. Если в подключение возникает ошибка, то в логах ошибки нет.
+
6. info1i 223 03.06.21 13:52 Сейчас в теме
(5) Вникать в код обязательно в любом случае надо.
Функция ОтправитьПисьмо вызывается внутри Попытки, поэтому в логах ошибка должна остаться.
+
7. cmd_vasec 34 03.06.21 15:57 Сейчас в теме
(6) У меня в логах ошибки нет. В начале не могу понять почему не приходит письмо.
+
8. info1i 223 03.06.21 16:31 Сейчас в теме
(7) А лог пишется?
И на какой именно строке лог остановился?
Вполне возможно, что письмо отправлено успешно, но с запозданием приходит или что-то с почтовым сервером.
+
9. Pependos 26 07.09.21 13:43 Сейчас в теме
А есть ли возможность узнать свободное место на сетевом диске?
+
10. info1i 223 07.09.21 18:01 Сейчас в теме
(9) Не известно, нужно пробовать.
Однако любой сетевой диск - это ведь тоже диск, который является локальным на каком-то компьютере, на котором нужно устанавливать данный скрипт, так можно.
+
11. santey8602 04.03.22 10:24 Сейчас в теме
все здорово, работает. Но он постоянно присылает сообщения, неважно, кончается место или нет. так и должно быть? порог указал 10Гб. По факту больше 30 свободного места. просто заспамит почту)
Хотелось бы что бы сообщение приходило только тогда, когда места меньше указанного порога
+
12. info1i 223 04.03.22 12:26 Сейчас в теме
(11) Нет, так не должно быть: либо ошибка в подправленном коде, либо операционная система выдает ошибочный размер свободного места.
+
13. santey8602 05.03.22 08:49 Сейчас в теме
может потому что убрал везде диск Д?
как должен выглядеть код только с проверкой одного диска С?
+
14. info1i 223 05.03.22 10:47 Сейчас в теме
(13) Вместо кода
СДоступноГб = ОбъемСвободноГб("C");
ДДоступноГб = ОбъемСвободноГб("D");

должно быть:
СДоступноГб = ОбъемСвободноГб("C");
ДДоступноГб = 100000000;
+
15. santey8602 05.03.22 13:13 Сейчас в теме
(14)
100000000
Спасибо! Не спамит теперь!
+
16. Batman1978 27.01.23 13:38 Сейчас в теме
Новый ИнформацияОДиске(БукваДиска); - не могу найти в 1с. Подскажите что это за функция ? в какой версии поддерживается 1с ?
+
18. info1i 223 27.01.23 13:48 Сейчас в теме
(16) Да, это функция. В 1С отсутствует. Присутствует только в OneScript.
+
17. Batman1978 27.01.23 13:38 Сейчас в теме
Можете дать СП по ней ?
+
Оставьте свое сообщение