Open Source / Shizuku · Myaku
Open Source · Bundle Symfony

Myaku Health Check.

Monitoring de santé pour Symfony, disque, RAM, base de données et cache derrière un unique endpoint sécurisé.

PHP ≥ 8.2 Symfony 7.4 · 8.0 MIT
$ composer require devexploris/myaku-health-check
01 — Introduction

Un endpoint, quatre checks

Myaku Health Check expose un unique endpoint GET /health qui rapporte l'état de ton disque, de la RAM, de la base de données et du cache. Base de données et cache sont auto-détectés, aucune configuration supplémentaire.

Contrôle d'accès
Whitelist IP + header x-myaku-token. Deux gardes indépendants évalués dans l'ordre.
Auto-détection
doctrine.dbal.default_connection et cache.app se branchent automatiquement si présents. Les services absents sont ignorés.
Seuils
Configure des seuils d'alerte pour le disque et la RAM. Dépasser l'un d'eux retourne un 503.
02 — Requirements

Dépendances

PackageVersionRôle
php≥ 8.2Requis par Symfony 7.4+
symfony/http-kernel^7.4 · ^8.0AbstractBundle, Gestion des requêtes
symfony/console^7.4 · ^8.0Injection de dépendances
doctrine/dbal^3.0 · ^4.0Check de connectivité base de données
symfony/cache-contracts^3.0Interface de cache (optionnel)
Optionnel : doctrine/doctrine-bundle et symfony/cache sont auto-branchés si présents leurs checks sont simplement ignorés en cas d'absence.
03 — Installation

Mise en place

01 — Require

$ composer require devexploris/myaku-health-check

02 — Enregistrer le bundle

// config/bundles.php
return [
    Devexploris\MyakuHealthCheck\MyakuHealthCheckBundle::class => ['all' => true],
];

03 — Enregistrer la route

# config/routes.yaml
myaku_health_check:
    resource: Devexploris\MyakuHealthCheck\Controller\HealthCheckController
    type: attribute
04 — Configuration

Configuration

Créer config/packages/myaku_health_check.yaml :

myaku_health_check:
    threshold:                              # optionnel
        space: 80                           # alerte si disque utilisé à plus de X% (0-100)
        memory: 90                          # alerte si RAM utilisée à plus de X% (0-100)
    space:
        path: /                             # point de montage à surveiller (défaut : /)
    security:
        token: "%env(APP_MYAKU_TOKEN)%"     # générer avec : openssl rand -hex 24
        whitelist:                          # optionnel si vide, toutes les IPs sont autorisées
            - "127.0.0.1"
            - "172.21.0.1"

Seuils

Les deux seuils sont optionnels. Lorsqu'ils sont configurés, un usage supérieur au seuil déclenche un 503 et positionne threshold_targeted: true dans la réponse JSON.

CléTypeDescription
threshold.spaceint (0–100)Seuil d'alerte usage disque (%)
threshold.memoryint (0–100)Seuil d'alerte usage RAM(%) pour Linux uniquement
space.pathstringPoint de montage à surveiller (défaut : /)

Clés de sécurité

CléDescription
security.tokenToken requis dans le header x-myaku-token
security.whitelistListe des IPs clientes autorisées. Si vide, toutes les IPs sont acceptées
05 — Endpoint

GET /health

Point d'entrée unique pour tous les checks de santé. Retourne 200 quand tout est sain, 503 si au moins un check échoue ou dépasse son seuil.

CodeSignification
200 Tous les checks sont sains
403 IP non autorisée ou token invalide
503 Au moins un check est en erreur ou dépasse son seuil
06 — Security

Deux gardes, un ordre

Deux contrôles sont appliqués dans l'ordre. Le premier échec retourne immédiatement 403, le second garde n'est jamais évalué.

01
IP Whitelist
02
x-myaku-token
01Whitelist IP si la liste n'est pas vide, l'IP cliente doit y figurer. Sinon 403. Une whitelist vide autorise toutes les IPs.
02Token le header x-myaku-token doit correspondre au token configuré. Sinon 403.
Exemple de requête :
curl -H "x-myaku-token: your_token_here" https://your-app.com/health
07 — Response

Réponse JSON

Réponse saine

Les champs threshold et threshold_targeted n'apparaissent que si le seuil correspondant est configuré.

{
    "space": {
        "free": "45.30 Go",
        "used": "54.70 Go",
        "total": "100.00 Go",
        "threshold": "80%",
        "threshold_targeted": false
    },
    "memory": {
        "free": "4.77 Go",
        "used": "10.04 Go",
        "total": "14.81 Go",
        "threshold": "90%",
        "threshold_targeted": false
    },
    "database": {
        "connected": true,
        "latency": "1.23ms"
    },
    "cache": {
        "connected": true,
        "latency": "0.45ms"
    }
}
threshold_targeted: true le pourcentage d'utilisation dépasse le seuil configuré. Cela seul déclenche un 503.

Réponses en erreur

Quand un service est injoignable, connected est false et le champ error contient le message d'exception. La réponse globale passe en 503.

Database

{
    "database": {
        "connected": false,
        "error": "SQLSTATE[HY000] [2002] Connection refused"
    }
}

Cache

{
    "cache": {
        "connected": false,
        "error": "No cache configured"
    }
}
08 — Compatibility

Support par plateforme

Check Linux macOS Windows
Espace disque
RAM
Base de données
Cache
RAM: Linux only. MemoryChecker lit /proc/meminfo, disponible uniquement sur Linux. Sur les autres systèmes, le check mémoire est silencieusement ignoré.