Как-то наш коллега на одной из встреч рассказал про систему управления, которую он использует для своего дома. Хотя статья является его частным мнением, но при этом представляет большой интерес для многих специалистов использующих облачные и Edge технологии в своих разработках, особенно в рамках прикладных решений для систем "Умный Дом". Своё отношение можно выразить в комментариях, автор обязательно прочитает.
И так...
Решаемая задача
Мы все любим комфорт. А основным двигателем развития систем обеспечения комфорта является лень. Первой поставленной задачей стал файл-сервер для домашнего медиаплеера. В дальнейшем эта тема обросла DLNA-сервером и торрент-клиентом «для пополнения запасов».
Вторая задача – система «умного дома». Отдельные элементы начинал отрабатывать ещё на старой квартире, а когда переехал – задача встала в полный рост. «Умный дом» у меня сейчас построен на контроллере Vera от MiCasaVerde и периферии Z-Wave. Не будучи большим любителем языка Lua (на нем построена встроенная система скриптов у Vera), я с некоторого момента времени являюсь фанатом системы Node-Red. Эта система и стала для меня «дубль-управлением» для «умного дома».
Также у меня есть дача, а там магистральный газ, система отопления заполнена водой и имеет задачу поддерживать минимум +5°С зимой в отсутствие жильцов. Соответственно, мониторинг температуры (для предотвращения замерзания системы при аварии подачи газа вне поселка) является насущной необходимостью.
И на закуску. Появилось подозрение, что в моей WiFi-сети завелись мягко с кажем «незарегистрированные пользователи». Интернет у меня безлимитный, но полосу пропускания никто не отменял. Таким образом, четвертой задачей стало что-то вроде простенького SIEM (Security Information and Event Management) на основе данных входного роутера.
Предыстория
Онтогенез (развитие эмбриона) есть быстрое повторение филогенеза (развития биологического вида).
Закон Геккеля-Мюллера
Началось все с небольшого NAS от Thecus. Файлы он раздавал исправно, неплохо работал DLNA-сервером, но торрент-клиент работал нестабильно. Плюс, больше он ничего не умел. Было принято решение о миграции сервера на платформу обычного ПК.
Как-то у меня освободился компьютер с Core2 Duo и 2 Гб памяти. Windows 7, расшаренная папка, TeamViewer, uTorrent – и в продакшен. Однако, DLNA для того Windows были достаточно монструозными, да и надвигающая потребность в NodeRed сопровождалась необходимостью изоляции процессов, чтобы не падало все и сразу.
Согласно теории эволюции следующей ступенью стал хост виртуальных машин (так как контейнеризация тогда еще на была популярна). В качестве основы был выбран Xen Server(позже ставший Xen Hypervisor). Он представляет собой гипервизор первого типа, построенный на основе CentOS с очень удобным приложением для внешнего обслуживания.
Данное решение позволило сделать изолированными файлообменную и NodeRed-овскую части (вплоть до раздельной перезагрузки), однако со временем вылезла проблема. Чуть меньше 1 Гб оперативной памяти занимает Xen, плюс еще по 0.5 Гб было выделено на две виртуальные машины с Alpine Linux. Заводить третью машину не было возможности, хотя по факту память расходовалась не полностью. Процессор также был загружен на единицы процентов. Вопрос оптимизации использования аппаратных ресурсов встал в полный рост.
О решении этой проблемы в виде контейнеризации я слышал, однако ни работа с docker через консоль, ни чтение документации по CoreOS меня не впечатлили. Работает, но неудобно.
Как завести ранчо?
Незадолго до описываемых событий (в ноябре 2019 г.) ко мне по работе попала предварительная версия системы Siemens Industrial Edge. Та версия была построена на базе операционной системы RancherOS (кстати, текущая версия имеет другую основу), которая мне понравилась. Весной 2020 у меня дошли руки до миграции домашнего сервера на этот софт.
RancherOS представляет собой компактную операционную систему, предназначенную для оперирования docker-контейнерами. Всё, что может быть вынесено из ядра ОС (оперирование устройствами, сетями и т.п.) – работает в виде системных контейнеров. Docker для пользовательских контейнеров также убран в контейнер.
Для управления всей этой конструкцией имеется комплектная web-based оболочка, позволяющая забыть о правильном формулировании параметров команды docker run. Оболочка позволяет в динамике распределять контейнеры по исполняющим хостам (сервер также может исполнять контейнеры), мониторить и ограничивать их нагрузку на аппаратную платформу, управлять сетевыми коммуникациями контейнеров и работой с хранением файлов.
На сегодняшний день у меня на этом сервере работают 7 контейнеров и остается свободным еще около 250 Мб оперативной памяти. Сейчас у меня работают следующие связки.
Работа с файлами обеспечивается связкой (стеком) из Transmission (работа с торрентами), MiniDLNA для раздачи потоков по соответствующему протоколу и SAMBA-сервера на базе Alpine для работы с Windows-машинами. Обмен файлами между контейнерами выполнен через папку хоста, смонтированную как том данных. Физически папка вынесена на отдельный HDD с файловой системой EXT4, что дает надежду на выживание и доступ к данным даже в случае полной гибели системного диска.
Второй стек состоит сейчас из одного контейнера, содержащего NodeRed. Это основа системы управления, работающая как с компонентами «умного дома», так и обрабатывающая телеметрию с дачи (MQTT), входного роутера (SMTP) и собственных источников (мониторинг аппаратной платформы, пинги узлов сети). В NodeRed, помимо собственно аналитики, установлены узлы визуализации node-red-dashboard, на основе которых сделан внутренний компактный управленческий интерфейс.
Третий стек предназначен для аналитики и на данный момент содержит экземпляр базы временнЫх рядов InfluxDB и дешборд Grafana. Отправка информации в Influx сейчас выполняется из NodeRed, в дальнейшем планируется также использование сборщика логов с удаленных узлов.
Дальнейшее развитие
Одним из параллельных вопросов, решенных ранее, была телеметрия с дачи. TeamViewer был для этой темы не очень удобен и не очень безопасен. После этого были CloudMQTT и «Народный мониторинг». Первый начал «закручивать гайки» на бесплатных тарифах, появились ограничения по протоколам подключений, нестабильность в работе. Второй сервис имеет определенное назначение, лишь частично пересекающееся с необходимым мне. Вопрос был закрыт в тот момент, когда был обнаружен сайт Timeweb с арендой виртуальных серверов за 45 рублей в месяц. Там была поднята Debian-машина с Mosquitto в необходимой мне конфигурации. На этот же сервер сейчас уходит односторонняя телеметрия из дома. Это позволяет мне иметь текущую информацию в любой момент времени и в любом месте мира. В дальнейшем планируется на этой машине установить OpenVPN-сервер для возможности объединения домашней и дачной подсеток и получения потокового видео с дачных камер.
Второй темой для дальнейшей разработки является изменение SIEM-блока. Дело в том, что Influx является специализированной базой для временнЫх рядов (TSDB) и хранить в ней данные, не связанные с отметкой времени, крайне неудобно. Соответственно, для нужд SIEM будет поднят контейнер с MariaDB, MySQL или Postgres, куда будут складываться данные об узлах, работающих в сети.
Третьей темой является обработка логов. Их источников на данный момент просматривается два – Vera 3 и сервер на Timeweb. Если с «Верой» все относительно просто и несрочно, то с Timeweb тема является насущной. Как и любой узел, относительно открыто находящийся в интернете, этот узел постоянно подвергается прощупыванию. Стоят достаточно длинные пароли, никаких критичных данных и каналов связи там нет, файрволл пока успешно справляется, но это не может длиться вечно. Соответственно, я хотел бы оказаться первым, узнавшим о нестандартных соединениях моего сервера. Однако, моя домашняя сеть находится за blind NAT провайдера, и в целом меня эта ситуация устраивает. Таким образом, сервер не сможет отправлять мне на анализ логи (разве что по почте) и скорее всего я реализую их скачивание перед анализом по какому-либо протоколу типа SFTP.
В качестве заключения
На деле, обе отработанные схемы имеют свое место в жизни и бизнесе, даже несмотря на появление у меня в доступе Siemens Industrial Edge. Вариант с хостом виртуальных машин идеален в случае необходимости работы с классическими приложениями, либо тогда, когда по-другому не получается обеспечить требуемый программному обеспечению режим виртуализации. Вариант с контейнерами очень удобен для сервисов, которые работают в фоне и им достаточно web-интерфейса. Несмотря на имеющиеся в сети холивары, я думаю, что обе схемы не являются конкурентами и неплохо дополняют друг друга в зависимости от решаемой задачи.
Полезные ссылки:
Xen Hypervisor Express - https://www.citrix.com/ru-ru/downloads/citrix-hypervisor/
RancherOS - https://github.com/rancher/os
NodeRed - https://nodered.org/docs/getting-started/docker
InfluxDB - https://hub.docker.com/_/influxdb
Grafana - https://grafana.com/docs/grafana/latest/installation/docker/
При подготовке публикации использовались материалы и изображения, предоставленные автором.
<-