Aller au contenu

Journaux et diagnostic

Tous les agents journalisent via syslog, donc via journalctl sur un système systemd.


Lire les journaux d'un agent

sudo journalctl -u abls-agent-modbus@MODBUS_CHAUFFERIE.service -f
sudo journalctl -u abls-agent-server.service -f
sudo -iu monutilisateur journalctl --user -u abls-agent-audio@AUDIO_SALON.service -f

Tous les agents d'une machine à la fois :

sudo journalctl -u 'abls-agent-*' -f

Depuis le dernier démarrage, avec horodatage précis :

sudo journalctl -u 'abls-agent-*' -b -o short-precise

Niveaux de verbosité

Le paramètre log_level suit la convention syslog.

Valeur Niveau Ce que vous voyez
0–2 EMERG, ALERT, CRIT Uniquement les arrêts sur erreur
3 ERR Erreurs
4 WARNING Avertissements (fichier de conf illisible, trame ignorée)
5 NOTICE Démarrages, connexions, changements d'état
6 INFO Défaut. Fonctionnement normal détaillé
7 DEBUG Trace complète, très verbeux

Filtrer par priorité :

sudo journalctl -u 'abls-agent-*' -p warning

Changer le niveau de verbosité

Temporairement, depuis la Console

C'est la méthode recommandée : elle n'exige aucun accès à la machine et prend effet immédiatement. L'API publie la consigne sur le topic MQTT <domain>/AGENT/<tech_id>/LOG.

Localement, dans le fichier de configuration

{ "log_level": 7 }

Puis redémarrer le service.

L'API reprend la main

La valeur locale n'est vraie qu'entre le démarrage du processus et la réponse d'enrôlement : l'API renvoie sa propre valeur de log_level et l'écrase.

Pour déboguer un agent qui n'arrive pas à s'enrôler, la valeur locale est en revanche la seule qui compte — c'est précisément le cas où elle est utile.

Pour une seule exécution, en avant-plan

sudo systemctl stop abls-agent-modbus@MODBUS_CHAUFFERIE.service
sudo -u abls ABLS_LOG_LEVEL=7 abls-agent-modbus --agent-tech-id MODBUS_CHAUFFERIE

Les messages qui comptent

Au démarrage

Message Signification
Apply ENVironment Variables Début de l'application des variables ABLS_*
Apply ENV 'X' -> 'y' = 'z' Une variable a été prise en compte
Trying to read config file '...' Lecture d'un fichier de configuration
Unable to read file config '...' Fichier absent ou JSON invalide — non bloquant
Apply Command-Line Arguments Prise en compte de la ligne de commande
local_config : { ... } Configuration effectivement retenue
api_config : { ... } Configuration renvoyée par l'API

Les arrêts sur erreur

Message Cause
There is no 'agent_tech_id', in config, exiting. tech_id non résolu
There is no 'api_url'/'domain_uuid'/'domain_secret', in config, exiting. Enrôlement incomplet
There is no 'master_hostname', in config, exiting. Mode standalone sans broker local
POST_CONFIG from API Failed. Unloading. API injoignable, signature refusée, horloge décalée
Agent disabled in API config. Unloading. Agent désactivé dans la Console
Must be root to save config to ... --save lancé sans root

Recettes de diagnostic

# Quelle configuration a réellement été retenue ?
sudo journalctl -u abls-agent-modbus@MODBUS_CHAUFFERIE.service | grep local_config | tail -1

# Pourquoi l'agent redémarre-t-il en boucle ?
sudo journalctl -u abls-agent-modbus@MODBUS_CHAUFFERIE.service -p err -n 50

# Quels agents ont échoué sur cette machine ?
systemctl list-units 'abls-agent-*' --state=failed

# Combien de redémarrages depuis ce matin ?
sudo journalctl -u 'abls-agent-*' --since today | grep -c 'Agent is starting'

Tester un agent à distance

L'API publie des commandes de test sur <domain>/AGENT/<tech_id>/TEST. Depuis la Console, la fiche d'un agent propose un bouton Tester qui déclenche un aller-retour complet et affiche le résultat. C'est le moyen le plus rapide de distinguer un problème de liaison MQTT d'un problème de matériel.


Maîtriser le volume des journaux

Un log_level à 7 sur un agent à 50 tours par seconde produit un volume considérable.

# Limiter la taille du journal persistant
sudo journalctl --vacuum-size=500M

# Voir l'espace occupé
sudo journalctl --disk-usage

Tip

Ne laissez jamais un agent en DEBUG durablement : vous risquez de saturer le disque et de dégrader les performances du moteur D.L.S.