# 🛡️ PHP Monitoring System by Cédrix Ce projet est une solution de monitoring **légère**, **modulaire** et **auto-hébergée** pour serveurs Linux. Elle combine la simplicité de sondes Bash avec la puissance d'un moteur de traitement PHP pour centraliser les logs et envoyer des alertes intelligentes via **ntfy** ou **email**. ## 🚀 Fonctionnalités clés * **Moteur PHP & Sondes Hybrides :** Traitement performant des alertes en PHP, tout en gardant des sondes système simples (Bash ou PHP). * **Alertes Intelligentes :** Envoi via **ntfy** (avec tags et priorités) ou **email**, incluant un système de **déduplication** pour éviter le spam. * **Logs JSONL :** Centralisation au format standard `JSON Lines` dans `/var/log/monitoring/events.jsonl` pour une exploitation facile. * **Configuration en cascade :** Système de fichiers `.local.conf.php` pour protéger vos réglages lors des mises à jour. * **Auto-update & Audit :** Mise à jour automatique via manifeste et script d'audit pour détecter les nouvelles options de configuration manquantes. --- ## 📦 Installation L'installation se fait via un script Bash qui configure l'environnement et installe les dépendances nécessaires (PHP, curl). ```bash # Passer en root sudo -s # Télécharger et lancer l'installateur curl -sSL https://git.abonnel.fr/cedricAbonnel/scripts-bash/raw/branch/main/servers/linux/monitoring/bin/install-monitoring.sh | bash ``` ### Structure du système : * `/opt/monitoring/bin/` : Exécutables (sondes, moteur `alert-engine.php`, updater). * `/opt/monitoring/lib/` : Bibliothèque partagée (`monitoring-lib.php`). * `/opt/monitoring/conf/` : Fichiers de configuration PHP. * `/var/log/monitoring/` : Journal des événements (`events.jsonl`). * `/var/lib/monitoring/` : Index (offsets de lecture, états de déduplication). --- ## ⚙️ Configuration Le système utilise des fichiers PHP pour la configuration afin de permettre une logique dynamique. ### 1. Alertes (ntfy / Mail) Ne modifiez pas les fichiers `.conf.php` (risques d'écrasement). Créez vos fichiers locaux : `cp /opt/monitoring/conf/alert-engine.conf.php /opt/monitoring/conf/alert-engine.local.conf.php` Éditez le fichier local pour renseigner : * `NTFY_TOKEN` & `NTFY_TOPIC`. * `DEST` (votre email de réception). ### 2. Audit de configuration Après une mise à jour, lancez l'outil d'audit pour vérifier si de nouvelles options sont disponibles : ```bash php /opt/monitoring/bin/monitoring-update-config.php ``` --- ## 🕒 Planification (Crontab) Le système est conçu pour être piloté par `cron`. Voici la configuration recommandée : | Tâche | Fréquence | Commande | | --- | --- | --- | | **Sondes (ex: Disque)** | Toutes les 5 min | `php /opt/monitoring/bin/check_disk.php` | | **Moteur d'alerte** | Chaque minute | `php /opt/monitoring/bin/alert-engine.php` | | **Mise à jour** | 1x par jour | `php /opt/monitoring/bin/monitoring-update.php` | --- ## 🛠️ Développer une nouvelle sonde Le système est agnostique. Pour ajouter un check : 1. Créez un script qui écrit une ligne JSON dans `/var/log/monitoring/events.jsonl`. 2. Format attendu : `{"time":"...", "level":"ERROR", "app":"my_app", "event":"disk_full", "msg":"..."}`. 3. Le moteur PHP `alert-engine.php` traitera l'alerte automatiquement au prochain passage. --- ## ⚖️ Licence Ce projet est distribué sous licence **GNU Affero General Public License (AGPLv3)**. *Note : Si vous modifiez ce code pour l'utiliser via un réseau (SaaS), vous devez rendre vos modifications publiques.*