Aller au contenu

Nextcloud

Si Nextcloud sert bien ou est bloqué : mode maintenance laissé actif, une mise à jour de base de données en attente après une mise à jour, mises à jour de Nextcloud et des applications, utilisateurs actifs, espace libre pour le répertoire de données, taille de la base de données, et l’OPcache de PHP.

Du serveur DumbMonit (ou de son agent relais) vers l’équipement :

PortProtocoleUsage
443TCPAPI (HTTPS, par défaut)
80TCPSeulement avec l’option de schéma http

DumbMonit lit le status.php public et les statistiques de l’application serverinfo, fournie avec Nextcloud, avec un jeton de surveillance (NC-Token). Le jeton ouvre ces statistiques et rien d’autre : il ne peut pas se connecter, lister les utilisateurs, ouvrir un fichier ni changer un réglage.

La panne à surveiller : une mise à jour qui ne s’est pas terminée. Après une mise à jour, Nextcloud peut rester en mode maintenance, ou attendre occ upgrade ; la page web montre alors un avis que personne ne voit jusqu’à ce que quelqu’un essaie de synchroniser. Les deux sont lus depuis status.php, qui répond même alors.

Toutes les métriques sont préfixées dumbmonit_nextcloud_.

MétriqueQuoiLabels
maintenance1 tant que le mode maintenance est actif
needs_db_upgrade1 tant que Nextcloud attend occ upgrade
version_infovaleur 1version
update_available1 quand la propre vérification de mise à jour de Nextcloud a trouvé une release plus récenteavailable_version
apps_installed, app_updates_availableapplications installées, et combien ont une version plus récente dans la boutique d’applications
app_update_availablevaleur 1 par application avec une mise à jour (32 au plus)app, available_version
active_usersutilisateurs vus dans les 5 dernières minutes, l’heure et le jourwindow (5m, 1h, 24h)
users, files, sharescomptes, fichiers et partages sur l’instance
free_space_bytesespace libre où Nextcloud garde ses données
database_size_bytestaille de la base de données
platform_infovaleur 1database, database_version, php_version
php_memory_limit_bytesmemory_limit de PHP
opcache_enabled, opcache_fullOPcache activé ; OPcache sans place
opcache_memory_used_percent, opcache_interned_strings_used_percent, opcache_hit_rate_percent, opcache_oom_restartsà quel point OPcache est plein et comme il sert bien
fpm_active_processes, fpm_total_processes, fpm_listen_queue, fpm_max_children_reached, fpm_slow_requestspool PHP-FPM, quand Nextcloud tourne derrière PHP-FPM (les images -fpm, AIO)

Pendant que Nextcloud est en maintenance ou attend une mise à niveau, son API répond 503 : seuls maintenance, needs_db_upgrade et version_info sont alors écrits, et la surveillance n’est pas rapportée inaccessible.

Les règles intégrées qui s’appliquent : Nextcloud bloqué en maintenance, mise à niveau de base de données Nextcloud en attente, mise à jour Nextcloud disponible, OPcache Nextcloud plein, espace libre Nextcloud faible, plus Surveillance inaccessible.

Nextcloud ne dit pas au jeton de surveillance quand les tâches de fond ont tourné pour la dernière fois : seul un compte avec tous les droits sur l’instance peut le lire, et DumbMonit n’en demande pas un. Surveillez le cron avec un battement de cœur à la place : créez-en un dans DumbMonit, puis appelez son URL à la fin de la ligne cron qui lance les tâches de fond de Nextcloud, pour qu’il n’appelle que lorsque cron.php a réussi :

*/5 * * * * php -f /var/www/html/cron.php && curl -fsS -m 10 --retry 3 https://monit.example.com/api/push/<token> > /dev/null

Avec un intervalle attendu de 5 minutes, le battement de cœur alerte dès que le cron s’arrête, quelle qu’en soit la raison (un conteneur redémarré sans son cron, une erreur PHP, les tâches de fond laissées sur AJAX).

Nextcloud n’expose aucune liste à l’échelle administrateur des clients de synchro ou des appareils mobiles via une API. La page personnelle « Devices & sessions » (Settings → Security) ne liste que le compte actuellement connecté, portée par une session de navigateur plutôt qu’un jeton d’API, et le seul équivalent à l’échelle administrateur est la ligne de commande (occ user:auth-tokens:list <user>, un compte à la fois) — pas quelque chose que le jeton de surveillance peut atteindre, et pas quelque chose que DumbMonit demande à un administrateur de scripter dans une sonde. L’API serverinfo que DumbMonit lit n’a pas non plus de liste d’appareils : elle donne des compteurs d’utilisateurs actifs (active_users, ci-dessus), jamais qui ou quoi ils sont.

C’est une limite délibérée, pas une fonctionnalité manquante : donner à DumbMonit une liste d’appareils signifierait élargir le jeton de surveillance en un compte d’administration complet, ce que le reste de cette page évite soigneusement. Si Nextcloud expose un jour cela via OCS, DumbMonit suivra le même schéma appareils clients déjà utilisé pour Immich, Proxmox Backup Server et Veeam.

Le panneau au-dessus des graphiques lit ce que la sonde a stocké ; ouvrir la page n’appelle jamais Nextcloud. Il dit d’abord ce qui ne va pas (maintenance, mise à niveau en attente, OPcache plein ou désactivé), puis les mises à jour, puis les utilisateurs actifs, l’espace libre, la taille de la base de données, les utilisateurs, fichiers et chiffres OPcache, puis les applications à mettre à jour par nom et la plateforme (base de données, PHP).

  1. Sur le serveur Nextcloud, posez un jeton aléatoire avec occ en tant qu’utilisateur du serveur web (sous Docker : docker exec -u www-data, puis le nom du conteneur).

    php occ config:app:set serverinfo token --value "$(openssl rand -hex 32)"
    php occ config:app:get serverinfo token
  2. Si occ dit que serverinfo est désactivée, activez l’application Monitoring : menu du profil → Applications → Monitoring → Activer.

  3. Dans DumbMonit, saisissez l’adresse avec laquelle vous ouvrez Nextcloud et collez le jeton.

Documentation de l’éditeur : https://github.com/nextcloud/serverinfo#api

L’application serverinfo de Nextcloud répond à un jeton de surveillance qui ouvre ses statistiques et rien d’autre : aucun fichier, aucun utilisateur, aucun partage, et le jeton ne permet de se connecter nulle part. L’application Monitoring ne documente aucun écran pour définir ce jeton : occ est donc le moyen de le poser. DumbMonit lit seulement status.php et les statistiques de serverinfo : il n’ouvre jamais un fichier, ne liste jamais les utilisateurs et ne change aucun réglage.

Juste après la pose du jeton, Nextcloud peut refuser la toute première lecture (401) avant qu’il ne soit pris en compte : DumbMonit réessaie une fois après deux secondes, si bien qu’une cible toute neuve n’affiche pas d’erreur « jeton refusé » parasite. Pour activer l’application en ligne de commande, php occ app:enable serverinfo fait la même chose que la page Applications.

L’adresse doit faire partie des domaines de confiance de Nextcloud (trusted_domains dans config.php).

Avec Nextcloud AIO, lancez occ dans le conteneur nextcloud-aio-nextcloud : docker exec -u www-data nextcloud-aio-nextcloud php occ …. Pourquoi pas un groupe d’administration délégué : Nextcloud n’ouvre l’API serverinfo qu’au jeton ou aux membres du groupe admin complet, et la délégation ne change pas ça.

Vérifier le jeton à la main, depuis l’hôte DumbMonit :

curl -H 'NC-Token: YOUR-TOKEN' 'https://cloud.example.com/ocs/v2.php/apps/serverinfo/api/v1/info?format=json'
IdentifiantChamps
Jeton de surveillance (NC-Token)Le jeton serverinfo. DumbMonit l’envoie dans l’en-tête NC-Token, avec OCS-APIRequest: true.

Adresse : un nom d’hôte (cloud.example.com), host:port, ou une URL complète avec un préfixe de chemin (https://example.com/nextcloud) ; un /index.php ou /login final est accepté. Options : protocole (HTTPS par défaut), port (443), vérification du certificat et délai de requête (15 s).

Le compteur de mises à jour d’applications demande le cache de la boutique d’applications de Nextcloud ; sur une instance qui ne peut pas atteindre la boutique, ce compteur reste à 0.

Validé avec Nextcloud 35.0.1 (image officielle).