![](https://habrastorage.org/getpro/habr/upload_files/9dc/38e/6fa/9dc38e6faa5ae2a7d073d594ca5e975f.jpg)
Являюсь разработчиком в фирме которая занимается автоматизацией и телемеханизацией промышленных объектов. В мои обязанности входит разработка и поддержка ПО верхнего уровня, администрирование сервера и обеспечение его бесперебойной работы. Обычно ПО работает стабильно, но временами бывают сбои (по причинам не зависящим от нашего софта), о которых я иногда узнаю с большим опозданием. Было решено, что нужна система мониторинга, которая будет оповещать меня и руководство о проблемах, для возможности их быстрого устранения. Кроме того хотелось бы иметь возможность оперативно устранить проблему, даже если «под рукой» нет ПК.
Администрируемый сервер располагается у заказчика и я имею ограниченные возможности по подключению к нему (RDP и HTTP).
![Рисунок 1 - Упрощенная схема сети. Рисунок 1 - Упрощенная схема сети.](https://habrastorage.org/getpro/habr/upload_files/001/da1/cde/001da1cde7a0373c615a3f21a803b2f2.png)
Это скорее всего ставит крест на стандартных системах мониторинга. Поэтому я решился написать свою микросистему с возможностью управления сервером. На Python написал Web сервис который выполняет определенные действия по заданным URL, и Telegram-бота который опрашивает этот Web сервис.
![Рисунок 2. - Схема работы мониторинга через Telegram бота. Рисунок 2. - Схема работы мониторинга через Telegram бота.](https://habrastorage.org/getpro/habr/upload_files/9d6/1f9/2b1/9d61f92b100c76d7b07114352bd7f012.png)
На данный момент Web сервис умеет по настройкам пользовательской конфигурации:
выполнять запросы к различным БД;
выдавать информацию о:
загрузке процессора;
загрузке ОЗУ;
свободном месте на дисках.
выполнять скрипты и программы;
управлять службами.
Telegram бот тоже конфигурируется и может:
опрашивать сервер с определенной периодичностью (для реализации мониторинга) и выполнять рассылку изменений в чаты;
формировать меню на основании настроек и прав доступа;
опрашивать сервер на основании выбранного пункта меню и формировать ответ;
запрашивать пароль для дополнительной авторизации для выполнении критических операций ( MD5 хеш пароля пользователей хранится в конфигурации, не забываем чистить сообщения после ввода пароля).
Мониторинг поддерживает:
-
три типа событий:
норма (наклонный шрифт);
предупреждение (подчеркнутый шрифт);
тревога (жирный шрифт).
оповещения на основании запросов к базам данных;
оповещения о работе служб;
оповещения о загрузке ресурсов сервера (процессор, ОЗУ, диски).
![Рисунок 3 - Демонстрация работы системы мониторинга. Рисунок 3 - Демонстрация работы системы мониторинга.](https://habrastorage.org/getpro/habr/upload_files/40a/cbb/12d/40acbb12d7c964b2c4eb680ba4a41fc8.png)
Работает система пока только на Windows системах и написана на Python 2.7. Под Python 3.x тоже должно работать, нужно только в файлах requiremets.txt убрать версии подключаемых модулей.
Быстро изложу как запустить эту систему:
Скачиваем проект https://github.com/NenashevSV/TeSeMoMa;2.
-
На машине которую нужно мониторить:
Если нет то установить веб сервер поддерживающий WSGI и Python (они должны быть одной разрядности);
На диск переписываем папку WebWorker;
Настраиваем на нее веб сервер;
-
Открываем командную строку, переходим в папку WebWorker и выполняем:
pip install virtualenv
- устанавливаем программу создания виртуального окружения;virtualenv env
- создаем виртуальное окружение;env/Scripts/activate.bat
- активируем виртуальное окружение;pip install -r requirements.txt
- устанавливаем зависимости;
Настраиваем файл settings.php. (Там думаю все понятно будет)
Выполняем проверку по адресу http://хост/путь_до_WSGI.py/имя_настройки/имя_пункта/{имя_под_пункта/..../}имя_действия например http://localhost/WebWorker/hardware/cpu на что должны получить примерно такой ответ: «
{"message": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432 \u043d\u043e\u0440\u043c\u0435 (\u043e\u0442 0 \u0434\u043e 85 %)", "type": 0}
»
-
На машине с которой будем мониторить (может быть та же самая машина):
Переписываем на диск папку «Observer».Если нет то устанавливаем Python;
-
Открываем командную строку, переходим в папку Observer и выполняем:
pip install virtualenv
- устанавливаем программу создания виртуального окружения;virtualenv env
- создаем виртуальное окружение;env/Scripts/activate.bat
- активируем виртуальное окружение;pip install -r requirements.txt
- устанавливаем зависимости;
Регистрируем бота через Telegram бота @BotFather (пишем ему /start и дальше действуем согласно описания);
Настраиваем файл settings.php. Там много комментариев должно быть понятно;
Запускаем start.bat (для постоянной работы рекомендую зарегистрировать как службу например программой nssm);
Для запроса меню отправить боту знак вопроса «?», для авторизации «pass ваш_пароль».
Вот и все, рад буду если проект кому либо пригодится.
Комментарии (17)
BigDflz
23.12.2021 10:58почему-то при описании телеграм бота не пишут его режим - webhook или longpoling.
а с помощью Тб можно открывать роутер (если обобщать название входного устройства) для определенного ip через который входить по rdp, а потом закрывать. такое сделано на java, работает стабильно.
есть ещё вариант "авторизации" при входе на портал - открывается страница, на ней код, вводим этот код в тб и в браузере открывается страница для данного юзера. в браузере для авторизации ничего вводить не надо.
Struam
23.12.2021 12:20+3А чем вам не понравился Zabbix? Он отлично справляется с информированием в Telegram в том числе.
Nenash Автор
23.12.2021 12:25Тем что я ограничен в сетевых подключениях к просматриваемому серверу.
И насколько я знаю в Zabbix нет возможности управления сервером.
Ну и я ограничен серверными ресурсами для разворачивания Zabbix.Struam
23.12.2021 12:44А я правильно понял по вашим схематичным рисункам, что Вы пробросили через Firewall доступ во внутренюю сеть заказчика? Или изначально из internet есть доступ?
Nenash Автор
23.12.2021 12:48Это заказчик пробросил через свой Firewall доступ нашей подсети в свою через Интернет. У них там строгие правила.
Dr_Wut
23.12.2021 12:31+4Отправка оповещений - реально удобная штука, спору нет, но вы выставили в инет дырку по управлению оборудованием телемеханики. Ну как бы... А вы не задумывались о том, что это как минимум не хорошо со стороны ИБ? А если это КИИ - то это вполне себе реальная условка? Если не хуже
А еще ваш опыт будут повторять не задумываясь о последствиях, так как "мы же на хабре это прочитали"....
BigDflz
23.12.2021 12:43+1пока нет информации по взлому телегам, даже на хабре предлогами попробовать. нечего не прошло.
и практика показывает - полет нормальный
Struam
23.12.2021 12:46Так зачем телегу ломать если доступ идет по (RDP и HTTP) - эти порты открыты
BigDflz
23.12.2021 13:45порт открывается только для конкретного ip на время роботы по rdp. кроме того можно указать «кодовое слово» обозначающее имя компа к которому надо подключиться, что есть ещё одна ступень «защиты» ну и порт можно указывать для подключения рандомно.....
Nenash Автор
23.12.2021 12:51Управлять оборудованием в данном случае не получится. Т.к. не реализована такая возможность. Максимум возможно выполнить строго определенные программы и управлять службами. Но для этого нужно постараться взломать Telegram ну и еще пароль администратора.
13werwolf13
23.12.2021 13:41оповещения сделал прикрутив к zabbix скрипт Zabbix-in-Telegram (да я знаю что в свежем zabbix есть отправка в телегу из коробки, но этот скрипт ещё и красивые графики шлёт удобные).
а вот управление начал делать, но так и не поднялась рука запустить ибо внутренний параноик против такой дыры в бежопасности.. всётаки ssh посекурнее будет, тем более что проходя банковскую сертификацию родил конфиг который прошёл для них как очень секурный secure_sshd_config
ScarferNV
24.12.2021 11:00А как решается вопрос с безопастностью?
BigDflz
25.12.2021 07:15с безопасностью чего? доступа телеграм? уязвимости телеграм? или?
ScarferNV
25.12.2021 11:48Ну начать с простого, доступом к функционалу бота
BigDflz
25.12.2021 19:45@ScarferNV такой вопрос возникает потому , что не знаешь как устроен бот.
для того чтоб получить доступ к функционалу (как устроено у меня) необходимо иметь запись в базе, разрешающую использовать этот функционал. первый шаг - зарегистрироваться - передать свой номер телефона боту, для этого есть специальная команда бота. при выполнении этой команды в базе в записи с телефоном прописывается id пользоавтеля телефона. дальнейшее происходит по этому id. у меня, если данному номера нет в базе - шлётся сообщение типа иди подальше.... и бесполезно что-либо с этим делать - будешь тыкаться - сам телеграм заблокирует. всё просто. смоделировать сообщение от телеграм к боту с поддельным номером - успехов. уже пробовали, телеграм защищён.
Smashrock
О, прикольно. Я просто подвязал OSSEC на сервере мне слать уведомления через ТГ бота - удобная вещь.