TrueNAS
Сервер хранения на ZFS (TrueNAS SCALE, ныне TrueNAS Community Edition): состояние каждого пула и отказавший диск, scrub и resilver, использование пулов и датасетов относительно квот, снапшоты и репликация, температура дисков и самотесты SMART, оповещения, которые TrueNAS поднимает сам, службы и сама машина.
Сбой, для которого это нужно
Заголовок раздела «Сбой, для которого это нужно»Зеркало или vdev RAIDZ, потерявший диск, продолжает отдавать данные. Общий
ресурс остаётся смонтированным, резервные копии продолжают работать, веб-интерфейс
любого другого инструмента остаётся зелёным — а у пула больше нет избыточности.
Второй диск уносит пул. truenas_pool_healthy падает до 0 уже на первом,
срабатывает правило NAS pool degraded, и страница монитора называет диск.
Страница монитора
Заголовок раздела «Страница монитора»Помимо общих графиков, монитор TrueNAS показывает три панели, которые читаются из сохранённых опросом данных — открытие страницы никогда не обращается к самому NAS:
- Pools and disks — каждый пул с состоянием одним словом, собственной фразой
ZFS, когда что-то не так, степенью заполнения, его раскладкой (mirror, RAIDZ,
cache, log), числом ошибок чтения, записи и контрольной суммы и, главное,
именем любого диска, который не
ONLINE. Идущий scrub или resilver показывает свой прогресс. Затем каждый диск: модель, серийный номер, тип, размер, пул, температура и результат его последнего самотеста SMART. - Datasets and protection — каждый датасет с использованием относительно квоты, числом снапшотов и временем, когда его последний раз охватывала задача снапшотов; последний scrub каждого пула и просрочен ли он; каждая задача репликации и периодических снапшотов с её состоянием, последним запуском, последним обработанным снапшотом и, при сбое, собственной фразой об ошибке от TrueNAS.
- NAS health — оповещения, поднятые самим TrueNAS, сначала самые серьёзные, затем остановленные службы, затем машина: версия, аптайм, нагрузка, память, CPU.
Что отслеживается
Заголовок раздела «Что отслеживается»Все метрики имеют префикс dumbmonit_truenas_.
| Семейство | Метрики | Метки |
|---|---|---|
| Идентификация | version_info (версия без префикса TrueNAS-SCALE-, который старые выпуски ставили впереди) | version |
| Машина | uptime_seconds, load1/5/15, memory_total_bytes, cpu_count | |
| Пулы | pool_healthy (собственный вердикт ZFS: 0 и для DEGRADED, и для FAULTED), pool_warning (resilvering, функции не включены), pool_status_info, pool_size/allocated/free_bytes, pool_used_percent, pool_fragmentation_percent | pool, а для информационной серии ещё status |
| Устройства пула | pool_device_errors (накоплено с последнего zpool clear), pool_devices_unhealthy (обе отсутствуют, если пул не удаётся открыть) | pool, kind (read, write, checksum) |
| Scrub | pool_scan_running, pool_scan_percent (только пока идёт), pool_last_scrub_age_seconds, pool_last_scrub_errors, pool_scrub_threshold_days | pool, function (SCRUB, RESILVER) |
| Датасеты | dataset_used_bytes, dataset_available_bytes, dataset_quota_bytes и dataset_quota_used_percent (отсутствуют без квоты), dataset_snapshots, dataset_snapshot_age_seconds (возраст последнего снапшота, сделанного периодической задачей, охватывающей датасет; отсутствует, если такой нет), dataset_locked (только для зашифрованных датасетов) | dataset, pool |
| Снапшоты | snapshots (всего) | |
| Диски | disk_temperature_celsius, disk_size_bytes, disk_smart_failed (отсутствует для диска, который ни разу не тестировался) | disk, serial |
| Оповещения | alerts — число активных оповещений по уровням, включая ноль | level (INFO … EMERGENCY) |
| Задачи | replication_error, replication_last_run_age_seconds, snapshot_task_error, snapshot_task_last_run_age_seconds (только включённые задачи) | task |
| Службы | service_running (только службы, запускаемые вместе с NAS) | service |
| Сбор | up, scrape_errors, scrape_duration_seconds |
Несколько особенностей TrueNAS, которые стоит знать:
- Последний scrub живёт только в записи сканирования пула. В API нет
истории scrub, а resilver перезаписывает запись сканирования: после resilver
дата последнего scrub просто неизвестна до завершения следующего, и
pool_last_scrub_age_secondsотсутствует, а не неверна. - Пул, который не удаётся открыть — экспортированный или с слишком большим
числом отсутствующих дисков — всё равно отображается, без раскладки и
размеров. Его
pool_healthyравен 0; серии устройств и размеров отсутствуют, а не равны нулю. - Незаданная квота — это не квота ноль. TrueNAS отвечает
parsed: nullдля “нет квоты”, и DumbMonit не публикует для такого датасета серий квоты.quotaимеет приоритет надrefquota, если заданы обе. - Количества снапшотов берутся из собственного кэша ZFS
(
snapshots_count), а общее — из быстрого подсчёта снапшотов TrueNAS: ни один снапшот никогда не перечисляется. Общее число больше суммы количеств по датасетам: оно включает снапшоты внутренних датасетов TrueNAS, которые список датасетов скрывает. - Возраст самого нового снапшота датасета — это последний запуск периодической задачи снапшотов, которая его охватывает, напрямую или через рекурсивный родительский датасет. TrueNAS не может сообщить дату самого нового снапшота без перечисления их всех, поэтому у датасета, который не охватывает ни одна задача, возраста нет — что само по себе полезно знать.
- Температуры читаются из кэша TrueNAS (
only_cached), обновляемого TrueNAS примерно раз в пять минут. Спящий диск никогда не будится, а у диска без показаний серии нет. - Ничего никогда не запускается. Ни scrub, ни тест SMART, ни проверка обновлений, ни репликация. Опрос только читает.
- Пути, менявшиеся между версиями, необязательны.
zfs/snapshotсталpool/snapshotв 25.10, и пробуются оба;smart/test/resultsисчез в 25.10 и тогда молча пропускается.
Применяемые встроенные правила: Monitor unreachable, NAS pool degraded, NAS disk errors, NAS pool almost full, NAS scrub found errors, NAS scrub overdue, NAS disk failed its SMART test, NAS disk too hot, NAS dataset near its quota, NAS replication failed, NAS snapshot task failed, NAS snapshots stale, TrueNAS alert raised, NAS service stopped. Уведомления называют соответствующий пул, диск, датасет, задачу или службу.
Что подготовить в TrueNAS
Заголовок раздела «Что подготовить в TrueNAS»Приведённые ниже шаги совпадают с теми, что показывает уведомление рядом с
формой. Сначала нужно знать одно: через REST API, который использует DumbMonit,
в TrueNAS нет ключа только для чтения. Его роли только для чтения были
подключены лишь к более новому API WebSocket; ключ, чей пользователь —
Read-Only Administrator, отклоняется с пустым 403 при каждом вызове REST. Это
проверено на TrueNAS 25.04.2.6: ключ Read-Only Administrator получил 403 на
всех 55 опробованных путях REST, а тот же самый ключ работал через API
WebSocket. Ключ должен принадлежать пользователю с привилегией Local
Administrator — поэтому ему выделяются собственные пользователь и группа, и
ничего больше.
-
В веб-интерфейсе: Credentials → Groups → Add. Назовите группу так, как указано ниже, и дайте ей привилегию Local Administrator.
dumbmonit -
Почему Local Administrator, а не Read-Only Administrator: TrueNAS подключил свои роли только для чтения лишь к API WebSocket. Через REST API, который использует DumbMonit, ключ только для чтения отклоняется при каждом вызове. Сам DumbMonit только читает: он никогда не запускает scrub, тест SMART, обновление или репликацию.
-
Credentials → Users → Add. Назовите учётную запись так, как указано ниже, сделайте dumbmonit её основной группой и оставьте доступ к оболочке, sudo и SSH выключенными: ничто из этого не нужно.
dumbmonit -
Создайте ключ: Credentials → Users → API Keys → Add, выберите пользователя dumbmonit и дайте ключу имя. TrueNAS показывает ключ только один раз: скопируйте его. В TrueNAS 24.10 путь — меню пользователя справа вверху → API Keys → Add, и ключ не принадлежит никакому пользователю.
-
В DumbMonit введите адрес NAS, например “nas.lan”, и вставьте ключ. Оставьте HTTPS: TrueNAS отзывает ключ, который хоть раз получил по обычному HTTP с другой машины.
Адрес: 192.168.1.20, nas.lan, nas.lan:8443, [fd00::20] или полный URL.
Схема https и порт 443 добавляются, если отсутствуют.
TrueNAS объявил, что REST API будет удалён в TrueNAS 26 в пользу API WebSocket. До тех пор REST — это то, что обслуживает каждый выпуск вплоть до 25.10.
| Ключ | Название | По умолчанию | Справка |
|---|---|---|---|
scheme | Protocol | https | Оставьте HTTPS: TrueNAS отзывает ключ API, полученный по обычному HTTP с другой машины. |
port | Web interface port | 443 | Используется, если в адресе не указан порт. |
insecure_tls | Accept an unverifiable certificate | false | TrueNAS по умолчанию поставляется с самоподписанным сертификатом. |
request_timeout_seconds | Timeout per request (seconds) | 20 | Время, отведённое на каждый вызов API, от 1 до 120. |
datasets | Watch the datasets | true | Использование относительно квоты, число снапшотов, последнее изменение снапшота. |
disks | Watch the disks | true | Инвентарь и температуры из кэша; спящий диск никогда не будится. |
smart | Read the SMART test results | true | Последний самотест каждого диска; ни один никогда не запускается. |
alerts | Read TrueNAS’s own alerts | true | Список оповещений, который TrueNAS ведёт сам, без отклонённых оповещений. |
tasks | Watch replication and snapshot tasks | true | Состояние, последний запуск и последний снапшот каждой задачи. |
services | Watch the services | true | Службы, запускаемые вместе с NAS, и работают ли они. |
Типичные ошибки
Заголовок раздела «Типичные ошибки»| Симптом | Вероятная причина |
|---|---|
| Ошибка аутентификации с упоминанием Local Administrator | Пользователь ключа не является полным администратором — как правило, это Read-Only Administrator. TrueNAS отклоняет такой ключ при каждом вызове REST с пустым 403. |
| Ошибка аутентификации “Invalid API key” | Ключ набран с ошибкой, удалён, истёк — или отозван TrueNAS, потому что хоть раз был отправлен по обычному HTTP с другой машины. Создайте новый и оставьте HTTPS. |
| Ошибка сертификата | Самоподписанный сертификат: установите доверенный (ACME встроен) или включите insecure_tls. |
| Нет температур дисков | NAS работает в виртуальной машине, или TrueNAS ещё не опрашивал диски с момента запуска. Показания берутся из его кэша. |
| Нет серий SMART | На этом диске ни разу не выполнялся самотест, либо NAS работает на TrueNAS 25.10, где этот вызов удалён. Запланируйте тесты SMART в Data Protection. |
Нет pool_last_scrub_age_seconds | Последним сканированием этого пула был resilver, который стирает запись о последнем scrub, либо пул никогда не проходил scrub. |
| У датасета нет серии квоты | У него нет квоты. Незаданная квота — это не квота ноль. |
| “NAS pool degraded”, а страница не показывает имени диска | Пул вообще не удаётся открыть (экспортирован или слишком много отсутствующих дисков): тогда TrueNAS не сообщает раскладки. |
scrape_errors больше нуля | Один необязательный вызов не удался по причине, отличной от отсутствующего пути, — обычно таймаут. Остальные метрики не затронуты. |