Monitorare container e addon con Home Assistant

HassioHelp

Monitorare container e addon con Home Assistant

Premessa

Un container Docker è un’unità standard di software che racchiude il codice e tutte le sue dipendenze, in modo che l’applicazione funzioni rapidamente e in modo affidabile da un ambiente di elaborazione ad un altro. Un’immagine del container è un pacchetto software leggero, autonomo e eseguibile che include tutto il necessario per eseguire un’applicazione: codice, runtime, strumenti di sistema, librerie di sistema e impostazioni.

Entrando nel dettaglio Docker utilizza le funzionalità di isolamento delle risorse del kernel Linux come cgroups e namespaces per consentire quindi a “container” software indipendenti di coesistere sulla stessa istanza del sistema operativo Linux (e da non molto tempo esistono anche container nativi Windows).

Hass.io sfrutta le potenzialità dei container Docker per mantenere aggiornato Home Assistant senza la necessità per l’utente finale della CLI (riga di comando) di Linux, inoltre introduce il concetto di addon, i quali non sono altro che ulteriori container Docker, che aggiungono funzionalità al nostro sistema di domotica.

HA-Dockermon

Dopo la premessa veniamo subito al perché di questa guida: non sarebbe interessante controllare e monitorare gli addon di Hass.io ma anche alri container installati attraverso Home Assistant? Philip Hawthorne (https://philhawthorne.com) si è posto la stessa domanda e ha dato anche la risposta: HA-Dockermon.

HA-Dockermon è un servizio NodeJS che può essere eseguito come container Docker (o attraverso NodeJS) che espone un’API RESTful che Home Assistant può chiamare per vedere lo stato dei container. Le principali attività che può eseguire HA-Dockermon sono:

  • Ottenere lo stato di un container (running, stop, pause, etc).
  • Ottenere informazioni su ogni singolo container gestio da Docker
  • Avviare o arrestare un container inviando una richiesta POST
  • Avviare o arrestare un container inviando una richiesta GET ad un URL

Per installare HA-Dockermon come container su Docker occorre digitare le seguenti istruzioni su CLI Linux, per chi usa le varie distro Linux anche su Raspberry non ci sono problemi, per chi usa Hass.IO su ResinOS o HassOS occorre aprire una shell del SO come spiegato qui: https://developers.home-assistant.io/docs/en/hassio_debugging.html (questa procedura non è stata testata in quanto non utilizzo HassoOS).

x86/x64

Raspberry

API RESTful

Le principali API a disposizione sono:

      • GET /container/{container name} – restituisce lo stato del container
      • GET /container/{container name}/restart – restart del container
      • GET /container/{container name}/start – avvia il container
      • GET /container/{container name}/stop – ferma il container
      • GET /container/{container name}/unpause –  avvia un container in pausa
      • GET /container/{container name}/pause – mette in pausa il container
      • GET /container/{container name}/stat – restituisce informazioni sul container
      • POST /container/{container name}/exec – permette di eseguire comandi all’interno di un container

Configurazione HA

Poichè HA-Dockermon espone API RESTful occorre interrogare queste API per ottenere le informazioni che ci interessano, ad esempio per configurare degli switch in HA per avviare o fermare un container.

Informazione fondamentale per realizzare questi switch è conoscere l’esatto nome del container da monitorare/controllare.

Oltre alla configurazione manuale degli switch è possibile sfruttare due custom components che recuperano informazioni da HA-Dockermon ed effettuano il controllo dei container: (da verificare sul campo perché ad alcuni utenti hanno dato dei problemi di funzionamento)

  1. https://github.com/custom-components/switch.hadockermon
  2. https://github.com/custom-components/binary_sensor.hadockermon

Package

Il package si basa sulla “configurazione manuale” degli switch per controllare i container attraverso HA-Dockermon ed è suddiviso in tre sezioni:

  1. Sezione di customizzazione delle icone
  2. Sezione di definzione degli switch
  3. Sezione di automazione per il controllo dei container “critici”

Attraverso l’interfaccia grafica Lovelace è possibile definire quali sono i container che vogliamo assolutamente tenere sotto controllo inserendo il friendly-name oppure l’ entity_id negli input_text a disposizione. Alcune automazioni, la cui logica è illustrata di seguito, hanno il compito di rilvare correttamente i container critici da monitorare, ed inviare le notifiche attraverso il service notify.telegram (da personalizzare con il proprio servizio di notifica) per avvertire che un container è andato nello stato stop per qualche motivo, compito dell’utente sarà verificare cosa è accaduto.

Il seguente diagramma illustra quale è la logica di funzionamento del sistema:

  • se il numero di container critici che si trovano nello stato running è pari a 5 allora lo stato del sistema è “running”
  • se il numero di container critici che si trovano nello stato running è inferiore a 5 allora lo stato del sistema è “stopped”

 

Il componente sensor.container.critici.on è il template sensor che conteggia costantemente il numero di container critici attivi, su questo sensore sono basate le automazioni che configurano lo stato del sistema, mentre sensor.container_status è il template sensor che rileva lo stato attuale del sistema (“Running” o “Stopped”).

Il file in allegato (container.zip) contiene il package e la configurazione Lovelace; questo package ovviamente è solo un punto di partenza, infatti effettua il monitoraggio dello stato di alcuni addon/container ma le personalizzazioni  che si possono fare sono notevoli, ne possiamo discutere nel forum di HassioHelp!!

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *