Stupid House

Мониторинг локальной системы в Home Assistant


home assistant мониторинг systemmonitor

Необходимость мониторинга системы возникает по разным причинам. Помимо красивых индикаторов и графиков, мониторинг позволяет отследить какие ресурсы необходимо добавить, какие можно подрезать, дает возможность оценить позволяют ли текущие мощности развернуть очередной сервис. В моем случае это было закончившееся место диске в виртуальной машине, в которой работает 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.

home assistant systemmonitor

 

Автоматизация

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

Автоматизация будет присылать уведомление, когда свободного места на диске останется менее 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 для доставки уведомлений и управления умным домом.

Автор: muxa, 10.11.2020
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии