Перейти к содержанию

Nextcloud

Обслуживает ли Nextcloud запросы или завис: режим обслуживания, оставшийся включённым, обновление базы данных, ожидающее после обновления, обновления Nextcloud и приложений, активные пользователи, свободное место для каталога данных, размер базы данных и OPcache PHP.

DumbMonit читает публичный status.php и статистику приложения serverinfo, которое поставляется с Nextcloud, с помощью токена мониторинга (NC-Token). Токен открывает эту статистику и ничего больше: он не может войти в систему, перечислить пользователей, открыть файл или изменить настройку.

Сбой, за которым стоит следить: обновление, которое не завершилось. После обновления Nextcloud может остаться в режиме обслуживания или ждать occ upgrade; веб-страница тогда показывает уведомление, которого никто не видит, пока кто-нибудь не попробует синхронизироваться. Оба случая читаются из status.php, который отвечает даже тогда.

За чем он следит

Все метрики имеют префикс dumbmonit_nextcloud_.

Метрика Что Метки
maintenance 1, пока включён режим обслуживания
needs_db_upgrade 1, пока Nextcloud ждёт occ upgrade
version_info значение 1 version
update_available 1, когда собственная проверка обновлений Nextcloud нашла более новый выпуск available_version
apps_installed, app_updates_available установленные приложения и число тех, у которых в магазине приложений есть более новая версия
app_update_available значение 1 для каждого приложения с обновлением (не более 32) app, available_version
active_users пользователи, замеченные за последние 5 минут, час и сутки window (5m, 1h, 24h)
users, files, shares учётные записи, файлы и общие ресурсы экземпляра
free_space_bytes свободное место там, где Nextcloud хранит свои данные
database_size_bytes размер базы данных
platform_info значение 1 database, database_version, php_version
php_memory_limit_bytes memory_limit PHP
opcache_enabled, opcache_full OPcache включён; в OPcache закончилось место
opcache_memory_used_percent, opcache_interned_strings_used_percent, opcache_hit_rate_percent, opcache_oom_restarts насколько заполнен OPcache и насколько хорошо он обслуживает
fpm_active_processes, fpm_total_processes, fpm_listen_queue, fpm_max_children_reached, fpm_slow_requests пул PHP-FPM, когда Nextcloud работает за PHP-FPM (образы -fpm, AIO)

Пока Nextcloud находится в режиме обслуживания или ждёт обновления, его API отвечает 503: тогда записываются только maintenance, needs_db_upgrade и version_info, и монитор не сообщается как недоступный.

Применяемые встроенные правила: Nextcloud stuck in maintenance, Nextcloud database upgrade pending, Nextcloud update available, Nextcloud OPcache full, Nextcloud free space low, а также Device unreachable.

Фоновые задания (cron)

Nextcloud не сообщает токену мониторинга, когда фоновые задания выполнялись в последний раз: прочитать это может только учётная запись со всеми правами на экземпляр, а DumbMonit её не запрашивает. Следите за cron вместо этого с помощью Heartbeat: создайте его в DumbMonit, затем обращайтесь к его URL в конце строки cron, запускающей фоновые задания Nextcloud, чтобы он вызывался, только когда cron.php отработал успешно:

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

При ожидаемом интервале в 5 минут heartbeat поднимает тревогу, как только cron останавливается, по любой причине (контейнер перезапущен без своего cron, ошибка PHP, фоновые задания оставлены на AJAX).

Клиентские устройства

Nextcloud не предоставляет через какой-либо API общий для администратора список клиентов синхронизации или мобильных устройств. Личная страница «Devices & sessions» (Settings → Security) перечисляет только учётную запись, под которой выполнен вход, опираясь на сессию браузера, а не на API-токен, а единственный эквивалент для администратора — командная строка (occ user:auth-tokens:list <user>, по одной учётной записи за раз) — то, до чего токен мониторинга дотянуться не может и что DumbMonit не просит администратора встраивать в скрипт опроса. API serverinfo, который читает DumbMonit, тоже не имеет списка устройств: он даёт числа активных пользователей (active_users, выше), но никогда не говорит, кто или что они такие.

Это намеренное ограничение, а не недостающая функция: предоставление DumbMonit списка устройств означало бы расширение токена мониторинга до полной административной учётной записи, чего вся остальная страница всячески старается избежать. Если когда-нибудь Nextcloud предоставит это через OCS, DumbMonit последует тому же шаблону клиентских устройств, который уже используется для Immich, Proxmox Backup Server и Veeam.

Страница монитора

Панель над графиками читает то, что сохранил опрос; открытие страницы никогда не обращается к Nextcloud. Сначала она говорит, что не так (обслуживание, ожидающее обновление, OPcache заполнен или выключен), затем обновления, затем активные пользователи, свободное место, размер базы данных, пользователи, файлы и показатели OPcache, затем приложения, подлежащие обновлению, по именам, и платформа (база данных, PHP).

Выдайте Nextcloud токен мониторинга

  1. Приложение serverinfo Nextcloud, поставляемое и включённое вместе с Nextcloud, отвечает на токен мониторинга, который открывает его статистику и ничего больше: ни файлов, ни пользователей, ни общих ресурсов. На сервере Nextcloud задайте длинный случайный токен и выведите его обратно. Запускайте occ от имени пользователя веб-сервера; в Docker поставьте перед командой docker exec -u www-data и имя контейнера.

    php occ config:app:set serverinfo token --value "$(openssl rand -hex 32)"
    php occ config:app:get serverinfo token
    
  2. Если occ сообщает, что serverinfo отключено, сначала включите его. Сразу после задания токена Nextcloud может отклонить самое первое чтение (401), пока токен не вступит в силу: DumbMonit повторяет попытку один раз через две секунды, так что совсем новая цель не показывает ложную ошибку «token refused».

    php occ app:enable serverinfo
    
  3. В DumbMonit введите адрес, по которому вы открываете Nextcloud, например «cloud.example.com» (HTTPS на 443) или «http://10.0.0.5:8080», и вставьте токен. Хост должен входить в доверенные домены Nextcloud, иначе Nextcloud отклонит запрос.

  4. DumbMonit читает только status.php и статистику serverinfo. Он никогда не открывает файл, никогда не перечисляет пользователей и никогда не меняет настройку, а токен нигде не может войти в систему.

Warning

Nextcloud не сообщает токену, когда фоновые задания (cron) выполнялись в последний раз: прочитать это может только учётная запись со всеми правами на экземпляр. Чтобы узнавать об остановке cron, добавьте Heartbeat в DumbMonit и обращайтесь к его URL в конце строки cron, как показано в документации.

С Nextcloud AIO запускайте occ в контейнере nextcloud-aio-nextcloud: docker exec -u www-data nextcloud-aio-nextcloud php occ …. Почему не группа с делегированным администрированием: Nextcloud открывает API serverinfo только токену или членам полной группы admin, и делегирование этого не меняет.

Проверка токена вручную с хоста DumbMonit:

curl -H 'NC-Token: YOUR-TOKEN' 'https://cloud.example.com/ocs/v2.php/apps/serverinfo/api/v1/info?format=json'

Учётные данные

Учётные данные Поля
Токен мониторинга (NC-Token) Токен serverinfo. DumbMonit отправляет его в заголовке NC-Token вместе с OCS-APIRequest: true.

Адрес: имя хоста (cloud.example.com), host:port или полный URL с префиксом пути (https://example.com/nextcloud); завершающие /index.php или /login принимаются. Параметры: протокол (по умолчанию HTTPS), порт (443), проверка сертификата и тайм-аут запроса (15 с).

Число обновлений приложений запрашивается у кэша магазина приложений Nextcloud; на экземпляре, не имеющем доступа к магазину приложений, это число остаётся равным 0.

Проверено на Nextcloud 35.0.1 (официальный образ).