Мониторинг локальной системы в Home Assistant
Необходимость мониторинга системы возникает по разным причинам. Помимо красивых индикаторов и графиков, мониторинг позволяет отследить какие ресурсы необходимо добавить, какие можно подрезать, дает возможность оценить позволяют ли текущие мощности развернуть очередной сервис. В моем случае это было закончившееся место диске в виртуальной машине, в которой работает Home Assistant.
В Home Assistant есть специальная платформа под названием System Monitor с набором сенсоров для мониторинга локальной системы. System Monitor позволяет отслеживать загрузку и температуру процессора, загрузку оперативной памяти и диска, трафик на сетевых интерфейсах. Все описание взято на официальном сайте Home Assistant и применимо для систем семейства Unix/Linux/BSD.
Добавление System Monitor в Home Assistant
Для добавления платформы System Monitor в систему автоматизации Home Assistant в файл конфигурации configuration.yaml
добавляем:
sensor: - platform: systemmonitor resources: - type: processor_use - type: load_5m - type: memory_use_percent - type: disk_use_percent - type: disk_use - type: disk_free - type: last_boot
Не надо добавлять все сенсоры, в раздел resources
достаточно добавить только необходимые.
Список доступных типов сенсоров:
processor_use - текущая загрузка процессора в процентах.
processor_temperature - температура процессора. Если аппаратный датчик не доступен, например, в виртуальной машине, то сенсор не создается. Возможность выводить температуру по отдельным ядрам отсутствует, показываются только данные первого датчика.
load_1m - среднее значение загрузки системы (Load Average) за 1 минуту.
load_5m - среднее значение загрузки системы (Load Average) за 5 минут.
load_15m - среднее значение загрузки системы (Load Average) за 15 минут.
memory_use_percent - текущий размер использованной оперативной памяти в процентном показателе.
memory_use - количество использованной оперативной памяти.
memory_free - количество свободной оперативной памяти.
disk_use_percent - текущий размер использованного дискового пространства в процентном показателе. Данный тип может использоваться с необязательным аргументом, ссылающимся на монтированный раздел в папку (например, /home). По умолчанию используется корневой путь /.
disk_use - количество использованного дискового пространства. Данный тип может использоваться с необязательным аргументом, ссылающимся на монтированный раздел в папку (например, /home). По умолчанию используется корневой путь /.
disk_free - количество свободного дискового пространства. Данный тип может использоваться с необязательным аргументом, ссылающимся на монтированный раздел в папку (например, /home). По умолчанию используется корневой путь /.
swap_use_percent - текущий размер использованного пространства раздела Swap в процентном показателе.
swap_use - количество использованного пространства раздела Swap.
swap_free - количество свободного пространства раздела Swap.
throughput_network_in - текущая скорость входящего трафика. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
throughput_network_out - текущая скорость исходящего трафика. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
network_in - количество входящего трафика. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
network_out - количество исходящего трафика. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
packets_in - количество вошедших пакетов. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
packets_out - количество ушедших пакетов. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
ipv4_address - адрес IPv4 присвоенному интерфейсу. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
ipv6_address - адрес IPv6 присвоенному интерфейсу. В качестве обязательного аргумента указывается сетевой интерфейс (например, eth0).
process - состояние указанного процесса. В качестве обязательного аргумента необходимо указать наименование процесса (например, sshd).
last_boot - последняя загрузка системы.
Использование аргументов
Некоторые типы сенсоров используют обязательные и не обязательные аргументы. Их указание в файле будет configuration.yaml
следующим:
sensor: - platform: systemmonitor resources: - type: disk_use arg: /boot - type: process arg: sshd - type: throughput_network_in arg: enp1s0 - type: throughput_network_out arg: enp1s0
где тип сенсора disk_use
будет показывать использованное дисковое пространство для раздела boot
, а исходящий трафик для throughput_network_in
будет показан для сетевого интерфейса enp1s0
.
После добавления всех необходимых сенсоров сохраняем файл configuration.yaml
и выполняем проверку на наличие ошибок Configuration -> Server Controls -> Check configuration
. Перезагружаем Home Assistant.
Добавляем необходимые сенсоры на панель Lovelace.
Автоматизация
Как писалось ранее, к мониторингу я пришел из-за закончившегося места на диске. Создадим автоматизации, которые будут предупреждать о низком и критическом свободном месте.
Автоматизация будет присылать уведомление, когда свободного места на диске останется менее 10Gb. На основе этой автоматизации можно создать вторую, уведомляющую, когда свободное место на диске будет критическим, например, 3Gb. Добавляем в файл automations.yaml
.
- id: 'system_monitor_low_disk_space' alias: System monitor - Low disk space trigger: - platform: numeric_state entity_id: sensor.disk_free below: '10' condition: [] action: - service: persistent_notification.create data: title: ⚠ - Warning! message: Home Assistant server - Low disk space < 10Gb - service: telegram_bot.send_message data: message: ⚠ - Home Assistant server - Low disk space < 10Gb mode: single
Следующая автоматизация по команде /sysmon
боту в Telegram будет присылать текущее состояние системы, соответствующие типы сенсоров должны быть прописаны в разделе resources
. Добавляем в файл automations.yaml
.
- id: 'systemmonitor_telegram_system_state' alias: System Monitor - Telegram - System state trigger: - platform: event event_type: telegram_command event_data: command: /sysmon condition: [] action: - service: telegram_bot.send_message data: message: 'CPU: {{ states(''sensor.processor_use_percent'') }}%, Mem Use: {{ states(''sensor.memory_use_percent'') }}%, Disk use: {{ states(''sensor.disk_use_percent'') }}%, Load 1/5/15: {{ states(''sensor.load_1m'') }}/{{ states(''sensor.load_5m'') }}/{{ states(''sensor.load_15m'') }}' mode: single
Как настроить бота для Telegram подробно описано в статье: Подключение Telegram bot к Home Assistant для доставки уведомлений и управления умным домом.