v1.3.3Version stable

Version stable v1.3.3

Mode serve

Collecter en continu, exposer un état JSON et fournir des métriques Prometheus.

Après un cycle en échec, le tableau de bord affiche le dernier relevé complet avec son heure, en lecture seule. Avant le premier cycle réussi, aucun historique n’est disponible.

1. Démarrer l’agent

Après installation, lancez dans un terminal :

monit-docker serve --interval 30

Le premier cycle commence immédiatement. Chaque cycle est suivi de 30 secondes d’attente : ce n’est pas une fréquence fixe de début de cycle. Par défaut, l’agent écoute sur 127.0.0.1:9808. Sans règle, il observe et aucun fichier d’état n’est requis.

2. Vérifier les endpoints

Depuis un second terminal :

curl -fsS http://127.0.0.1:9808/healthz
curl -i http://127.0.0.1:9808/readyz
curl -fsS http://127.0.0.1:9808/v1/status
curl -fsS http://127.0.0.1:9808/metrics
EndpointSignification
/healthzHTTP 200 : processus vivant, même si Docker échoue.
/readyzHTTP 200 si prêt, 503 sinon.
/v1/statusDernier instantané, avec son champ ready ; HTTP 200 peut contenir ready=false.
/metricsFormat Prometheus. HTTP 200 ne garantit pas une collecte valide.

3. Variante Docker persistante

docker run -d --name monit-docker-agent --restart unless-stopped \
  -p 127.0.0.1:9808:9808 \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  decryptus/monit-docker:1.3.3 \
  monit-docker serve --bind 0.0.0.0 --interval 30

docker logs monit-docker-agent

Arrêtez l’agent du terminal avant de réutiliser le port 9808. Le bind 0.0.0.0 est interne au conteneur ; le port publié reste sur la boucle locale de l’hôte. Pour arrêter cette variante : docker stop monit-docker-agent.

4. Ajouter une règle

monit-docker --name 'web*' serve --interval 30 \
  --state-file "$HOME/.local/state/monit-docker/web.json" \
  --cooldown 600 --trigger-after 300 --max-gap 120 \
  --dry-run --cmd-if 'mem_percent > 90 ? restart'

Ce premier essai n’agit pas. Après revue, retirez --dry-run pour activer les actions et l’accumulation persistante des observations. Le fichier d’état devient obligatoire dès qu’il y a des règles, même en dry-run. Avec Docker, montez tout son répertoire, verrou compris.

Le délai max-gap doit dépasser l’intervalle de collecte. Une commande inconditionnelle --cmd n’attend pas trigger-after.

5. Exploiter l’agent

L’agent ne termine pas TLS. Par défaut, /metrics reste ouvert. Pour exiger une authentification, ajoutez serve --metrics-token-file FICHIER et configurez Prometheus avec le jeton Bearer correspondant. Utilisez --status-token-file pour la lecture du statut. Gardez-la sur localhost ou un réseau privé. Pour un navigateur, installez le proxy et l’interface HTTPS.

Par défaut, un instantané expire après max(90, 3 × interval) secondes. Une collecte échouée ou périmée masque les métriques des conteneurs. L’historique appartient à Prometheus ; les instantanés de l’agent sont en mémoire.

Ctrl+C ou SIGTERM demande l’arrêt, mais attend la fin du cycle courant. Le processus ne garantit pas un délai total maximal d’arrêt.

Le contrat API HTTP et métriques détaille les réponses, les erreurs, la fraîcheur et les exports, avec des exemples curl.

Réglages des commandes directes

Chaque commande lit sa propre section. Une option explicite en ligne de commande l’emporte sur le fichier. Les listes de règles et de ressources passées au lancement remplacent la liste correspondante. Une lecture explicite avec monit --rsc écarte les actions configurées pour cette invocation. La simulation reste accessible avec --dry-run.

stats:
  rsc: [cpu_percent, mem_usage]
  output: json
serve:
  interval: 60
  status_token_file: /run/secrets/status

Pour protéger GET et HEAD sur /v1/status, indiquez le chemin d’un secret distinct avec serve.status_token_file ou --status-token-file. Le client envoie le jeton Bearer. Avec le tableau de bord, configurez le proxy authentifié pour ajouter cet en-tête uniquement sur la route de statut vers l’agent.