← Retour aux articles
19 December 2025 2 min de lecture MétriquesSelf-HostingGoMonitoring

SHM — Pourquoi j'ai créé un système de métriques pour le self-hosted

Self-Hosted Metrics : un système léger pour collecter et visualiser les métriques de vos services auto-hébergés sans la complexité de Prometheus.

Prometheus est fantastique. Mais pour un serveur dédié qui héberge une dizaine de services Docker, c’est parfois sortir le bazooka pour tuer une mouche.

Le constat

Quand vous auto-hébergez vos services, vous voulez savoir trois choses :

  1. Est-ce que tout tourne ?
  2. Combien de ressources ça consomme ?
  3. Est-ce que quelque chose a changé depuis hier ?

Prometheus + Grafana répondent à ces questions, mais avec un coût non négligeable en ressources et en complexité de configuration. Pour un petit serveur, ça peut représenter 20-30% de la RAM disponible juste pour le monitoring.

SHM : Self-Hosted Metrics

J’ai donc créé SHM — un collecteur de métriques minimaliste, écrit en Go, conçu spécifiquement pour le self-hosting.

Le principe est simple :

  • Un seul binaire Go qui scrape vos containers Docker
  • Stockage en SQLite (pas besoin de base de données dédiée)
  • Dashboard web intégré, pas besoin de Grafana
  • Alertes par webhook (Discord, Slack, email)
  • Empreinte mémoire : ~15MB
// Collecte des métriques Docker
func collectContainerMetrics(cli *client.Client) []Metric {
    containers, _ := cli.ContainerList(ctx, container.ListOptions{})
    
    var metrics []Metric
    for _, c := range containers {
        stats, _ := cli.ContainerStats(ctx, c.ID, false)
        
        metrics = append(metrics, Metric{
            Container: c.Names[0],
            CPU:       calculateCPU(stats),
            Memory:    stats.MemoryStats.Usage,
            Network:   stats.Networks,
            Timestamp: time.Now(),
        })
    }
    return metrics
}

Quand utiliser SHM vs Prometheus

SHM est fait pour vous si :

  • Vous avez un seul serveur avec 5-20 containers
  • Vous voulez un monitoring simple sans configuration complexe
  • Vos ressources serveur sont limitées

Prometheus reste le bon choix si :

  • Vous avez une architecture multi-serveurs
  • Vous avez besoin de PromQL pour des requêtes avancées
  • Vous instrumentez votre code applicatif avec des métriques custom

Les deux ne sont pas incompatibles — SHM peut exporter ses métriques au format Prometheus si vous décidez de scaler plus tard.

En pratique

# docker-compose.yml
services:
  shm:
    image: ghcr.io/btouchard/shm:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - shm-data:/data
    environment:
      - SHM_INTERVAL=30s
      - SHM_WEBHOOK_URL=https://discord.com/api/webhooks/...
    labels:
      - traefik.enable=true
      - traefik.http.routers.shm.rule=Host(`metrics.domain.com`)

Un docker compose up -d et c’est parti. Pas de fichier prometheus.yml à configurer, pas de datasource Grafana à connecter. Ça tourne.

Le projet est encore jeune, mais il répond à un vrai besoin : monitorer simplement sans sur-ingénierie. Si ça vous parle, le code est sur GitHub.

Besoin d'aide sur ce sujet ?

Réserver un créneau