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)
Заголовок раздела «Фоновые задания (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 токен мониторинга
Заголовок раздела «Выдайте Nextcloud токен мониторинга»-
Приложение 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 -
Если occ сообщает, что serverinfo отключено, сначала включите его. Сразу после задания токена Nextcloud может отклонить самое первое чтение (401), пока токен не вступит в силу: DumbMonit повторяет попытку один раз через две секунды, так что совсем новая цель не показывает ложную ошибку «token refused».
php occ app:enable serverinfo -
В DumbMonit введите адрес, по которому вы открываете Nextcloud, например «cloud.example.com» (HTTPS на 443) или «http://10.0.0.5:8080», и вставьте токен. Хост должен входить в доверенные домены Nextcloud, иначе Nextcloud отклонит запрос.
-
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 (официальный образ).