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