Retrouver d’anciens logs Z2M
Partie 1 – Accès simple
Mon serveur zigbee2mqtt est installé un conteneur LXC au sein de mon Proxmox.
ID : 103
adresse IP : 192.168.0.103
Avec les informations ci-dessus, vous pouvez suivre cet autre article qui vous explique comment vous connecter en SSH pour la première fois avec WinSCP (ou tout autre moyen comme PuTTY etc).
Proxomox – Conteneur LXC – SSH
Voyons comment accéder en SSH à un conteneur LXC.
Nous allons utiliser un gestionnaire de fichiers pour naviguer et manipuler au mieux les fichiers. Il s’agit de WinSCP.
Dans WinSCP on va établir une nouvelle connexion SFTP (FTP via SSH).
-
-
- Protocole : SFTP
- Hôte : l’adresse IP du conteneur (ex. 192.168.0.103)
- Port : 22
- Utilisateur : root
- Mot de passe : celui qui viens d’être défini 1234
-
Voilà, à présent, une fois la connexion établie, naviguez jusqu’à :/opt/zigbee2mqtt/data/log/
Là vous trouverez des dossiers horodatés… Oui sauf qu’en réalité, par exemple, dans le fichier de logs de la journée du 12 je me retrouve avec la journée 16 ! C’est donc très… désarmant.
Partie 2 – Script d’automatisation.
🧭 Objectif
Créer un fichier unique contenant toutes les lignes de logs de Zigbee2MQTT, parfaitement triés dans l’ordre chronologique, afin de faciliter leur consultation et l’analyse sur PC.
Un second fichier sera créé au format .csv avec comme séparateur le symbole point virgule ; qui permettra une analyse avancée à l’aide d’un tableur.
✅ Pré-requis
- Zigbee2MQTT installé dans un conteneur LXC sur Proxmox.
- Accès SSH au conteneur.
- WinSCP installé sur Windows pour transférer les fichiers.
- Les logs Z2M sont présents dans
/opt/zigbee2mqtt/data/log/(log output enfiledans la config).
🛠️ Étapes complètes
🗂️ 1. Vérifier que les logs existent
⌨️ Via le shell du conteneur Z2M :
find /opt/zigbee2mqtt/data/log/ -type f -name "*.log"
Tu dois voir une liste de fichiers comme :
/opt/zigbee2mqtt/data/log/2025-07-16.14-53-13/log.log
/opt/zigbee2mqtt/data/log/2025-07-17.12-04-40/log.log
...
🖥 Via WinSCP, naviguer jusqu’à :
/opt/zigbee2mqtt/data/log/
Et vérifier la présence de sous-dossiers avec en leur sein des fichiers .log
📁 2. Si vide…
Z2M n’enregistre pas les logs. Pour y remédier, ouvrez ce fichier (généralement ici) :
⌨️ Via le shell du conteneur Z2M :
nano /opt/zigbee2mqtt/data/configuration.yaml
🖥 Via WinSCP, naviguer jusqu’à :
/opt/zigbee2mqtt/data/configuration.yaml
L’ouvrir pour l’éditer.
Et assurez-vous d’avoir bien une section comme celle-ci :
advanced:
log_output:
- file
log_level: info
➡️ Sans log_output: file, Zigbee2MQTT n’écrit pas dans des fichiers log.txt, uniquement dans la console (stdout).
➡️ Mais parfois, sans l’instruction explicite comme au dessus dans le fichier de configuration, ça fonctionne quand même…
📜 3. Créer le script de fusion
⌨️ Via le shell du conteneur Z2M :
nano /opt/zigbee2mqtt/export_logs/batch_logs.sh
🖥 Via WinSCP, naviguer jusqu’à :
/opt/zigbee2mqtt/
Créez un dossier : export_logs
A l’intérieur, créez un fichier : batch_logs.sh
Collez le script suivant :
#!/bin/bash
EXPORT_DIR="/opt/zigbee2mqtt/export_logs"
LOG_DIR="/opt/zigbee2mqtt/data/log"
OUTPUT="$EXPORT_DIR/zigbee2mqtt_all_logs.log"
mkdir -p "$EXPORT_DIR"
# Concatène tous les fichiers log*.log dans un fichier temporaire
find "$LOG_DIR" -type f -name "log*.log" -exec cat {} \; > "$EXPORT_DIR/tmp_combined_all.log"
# Trie les lignes par ordre chronologique (fonctionne si chaque ligne commence par un timestamp)
sort "$EXPORT_DIR/tmp_combined_all.log" > "$OUTPUT"
# Supprime le fichier temporaire
rm "$EXPORT_DIR/tmp_combined_all.log"
echo "✅ Fichier créé avec succès : $OUTPUT"
#
# formatage CSV
#
LOG_INPUT="$OUTPUT"
CSV_OUTPUT="$EXPORT_DIR/zigbee2mqtt_all_logs.csv"
# Écrit l'en-tête du CSV
echo "timestamp;level;message" > "$CSV_OUTPUT"
# Convertit chaque ligne log → CSV (timestamp;level;message)
# Suppose : timestamp = 2 premières colonnes, level = 3e, le reste = message
awk '{
ts = $1 " " $2;
level = $3;
message = "";
for (i=4; i<=NF; i++) {
message = message $i " ";
}
gsub(/^[ \t]+|[ \t]+$/, "", message); # Trim
print ts ";" level ";" message;
}' "$LOG_INPUT" >> "$CSV_OUTPUT"
echo "✅ Fichier CSV créé avec succès : $CSV_OUTPUT"
echo "✍️ Avec WinSCP, pensez à actualiser le dossier."
⌨️ Via le shell du conteneur Z2M :
Sauvegarde et quitte avec CTRL+O, Entrée, puis CTRL+X.
🖥 Via WinSCP :
Menu Encodage, cliquez sur « UTF-8« .
Sauvegardez avec CTRL + S
Vous pouvez fermer la fenêtre avec ALT + F4 ou la touche Echap
🔓 4. Rendre le script exécutable
⌨️ Via le shell du conteneur Z2M :
chmod +x /opt/zigbee2mqtt/export_logs/batch_logs.sh
🖥 Via WinSCP :
Faites un clic droit sur le fichier ainsi créé puis Propriétés.
Dans la fenêtre qui s’est ouverte, modifiez tout en bas les permission « Octal » à 0744.
Valider.
Vous pouviez aussi cliquer sur le « X » de la ligne « Propriétaire ».
▶️ 5. Exécuter le script
⌨️ Via le shell du conteneur Z2M :
/opt/zigbee2mqtt/export_logs/batch_logs.sh
🖥 Via WinSCP :
Faites un clic droit sur le fichier > Fichier de commandes personnalisées puis sur Exécuter.
Vous devriez voir un message :
✅ Fichier créé avec succès : /opt/zigbee2mqtt/export_logs/zigbee2mqtt_all_logs.log
💻 6. Récupérer le fichier (avec WinSCP)
- Se connecter en SFTP (utiliser l’IP du conteneur,
root, et le mot de passe associé). - Naviguer vers :
/opt/zigbee2mqtt/export_logs/ - Appuiez sur
F5pour rafraîchir le dossier. - Vous trouverez le fichier :
zigbee2mqtt_all_logs.log - Fais un glisser-déposer vers votre PC.
✅ 5. Résultat
Vous avez maintenant un fichier unique avec tous les logs triés comme ceci :
2025-07-16 14:45:00.123 INFO Starting Zigbee2MQTT
2025-07-16 14:45:01.456 INFO Adapter connected
...
En primer, un fichier .csv est présent aussi pour appliquer tous les filtres que vous souhaitez avec votre tableur préféré.
🔍 Bonus (optionnel) via invite de commande shell
-
🔎 Pour ne garder que les lignes contenant un mot-clé particulier :
grep "error" zigbee2mqtt_all_logs.log > only_errors.log
- 📅 Pour extraire les logs d’un jour :
grep "^2025-07-16" zigbee2mqtt_all_logs.log > logs_2025-07-16.log
- ↕️ Filtrer avec Excel :
https://fr.extendoffice.com/documents/excel/4447-excel-show-only-rows-with-certain-text.html


