33800 Docs

← Retour

Proposition : Dashboard Monitoring 33800

Status : IMPLEMENTEE

Date : 18/12/2024

Objectif

Créer un système de monitoring automatique qui :

  1. Collecte l'état de tous les serveurs toutes les 15 minutes
  2. Génère un dashboard HTML accessible via dashboard.33800.nowhere84.com
  3. Log l'historique des données collectées
  4. Documente toute l'infrastructure

Architecture

┌─────────────────┐
│  CRON (15 min)  │  Sur prod-portainer
│  collect.sh     │
└────────┬────────┘
         │ SSH vers chaque serveur
         ▼
┌─────────────────────────────────────────────────────┐
│  Collecte données                                    │
│  - pve (ZFS, NFS, VMs)                              │
│  - proxmox1 (VMs, NFS mount)                        │
│  - prod-portainer (Docker, containers)              │
│  - dev-portainer (Docker, containers)               │
│  - gitlab (services, version)                       │
│  - nginx (configs, SSL)                             │
│  - jellyfin (service)                               │
└────────┬────────────────────────────────────────────┘
         │
         ▼
┌─────────────────┐     ┌─────────────────┐
│  generate.sh    │────▶│  dashboard.html │
│  Génère HTML    │     │  (sur nginx)    │
└────────┬────────┘     └─────────────────┘
         │
         ▼
┌─────────────────┐
│  logs/          │  Historique JSON
│  YYYY-MM-DD.log │  pour analyse
└─────────────────┘

Données collectées par serveur

pve (192.168.1.10)

proxmox1 (192.168.1.155)

prod-portainer (192.168.1.11)

dev-portainer (192.168.1.51)

gitlab (192.168.1.196)

nginx (192.168.1.104)

jellyfin (192.168.1.199)


Structure des fichiers

/mnt/stock_36to/data/33800-stack/
├── monitoring/
│   ├── collect.sh          # Script de collecte
│   ├── generate.sh         # Génère le HTML
│   ├── logs/               # Historique JSON
│   │   ├── 2024-12-18.json
│   │   └── ...
│   └── templates/
│       └── dashboard.html  # Template HTML
│
└── docs/
    ├── infrastructure.md   # Doc complète infra
    ├── servers.md          # Liste des serveurs
    └── services.md         # Liste des services

Sur nginx :

/var/www/dashboard/
└── index.html              # Dashboard généré

Dashboard HTML

Design

Sections

  1. Header : Dernière mise à jour, status global
  2. Proxmox : pve + proxmox1 avec VMs
  3. Docker : prod-portainer + dev-portainer avec containers
  4. Services : GitLab, Nginx, Jellyfin
  5. Stockage : ZFS, NFS, espaces disques
  6. Historique : Graphique des dernières 24h (optionnel)

Configuration Nginx

server {
    listen 80;
    server_name dashboard.33800.nowhere84.com;

    # Accès réseau local uniquement
    allow 192.168.1.0/24;
    allow 127.0.0.1;
    deny all;

    root /var/www/dashboard;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Cron

# Sur prod-portainer - /etc/cron.d/monitoring-33800
*/15 * * * * gouroubleu /mnt/stock_36to/data/33800-stack/monitoring/collect.sh >> /var/log/monitoring-33800.log 2>&1

Logging

Chaque exécution génère une entrée JSON :

{
  "timestamp": "2024-12-18T03:15:00Z",
  "servers": {
    "pve": {
      "status": "ok",
      "zfs": {"state": "ONLINE", "used": "29.2T", "total": "54.6T"},
      "nfs": {"active": true, "clients": 4},
      "vms": [{"id": 206, "name": "prod-portainer", "status": "running"}]
    },
    ...
  }
}

Rotation : garder 30 jours de logs.


Actions à réaliser

  1. Créer les scripts de collecte et génération
  2. Créer le template HTML du dashboard
  3. Configurer Nginx (route + restriction IP)
  4. Installer le cron sur prod-portainer
  5. Créer la documentation infrastructure
  6. Tester et valider

Validation requise