Перейти к содержимому

Nextcloud

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

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

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

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

МетрикаЧтоМетки
maintenance1, пока включён режим обслуживания
needs_db_upgrade1, пока Nextcloud ждёт occ upgrade
version_infoзначение 1version
update_available1, когда собственная проверка обновлений 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значение 1database, database_version, php_version
php_memory_limit_bytesmemory_limit PHP
opcache_enabled, opcache_fullOPcache включён; в 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.

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).

  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. Он никогда не открывает файл, никогда не перечисляет пользователей и никогда не меняет настройку, а токен нигде не может войти в систему.

С 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 (официальный образ).