Update container documentation to reflect disk space adjustments and Docker log management
Expand the root disk size from 35 GB to 50 GB and implement log size limits for Docker containers. Add details about the new monitoring dashboard for homelab services, including deployment instructions and access URL. Ensure clarity on log rotation policies and risks associated with disk space usage.
This commit is contained in:
@@ -14,8 +14,8 @@
|
||||
- **Доступ:** SSH под пользователем **admin** (не root): `ssh admin@192.168.1.200` с хоста 192.168.1.150 или из LAN. Для выполнения команд с правами root: `sudo ...`.
|
||||
|
||||
**Диски:**
|
||||
- **Корневой диск** (sda1): 35 GB, занято **~29 GB (87%)** — система, образы/кэш в пределах корня. **Критично:** мало свободного места; при росте логов или обновлениях возможны сбои. Следить за местом и логированием (см. TODO).
|
||||
- **Данные** (sdb1): 344 GB, смонтирован в **/mnt/data**, занято ~177 GB (55%). Здесь: библиотека Immich, БД PostgreSQL, Docker root, containerd, Ollama, данные deduper.
|
||||
- **Корневой диск** (sda1): 50 GB — система, образы/кэш в пределах корня. Логи Docker ограничены (см. ниже).
|
||||
- **Данные** (sdb1): 350 GB, смонтирован в **/mnt/data**. Здесь: библиотека Immich, БД PostgreSQL, Docker root, containerd, Ollama, данные deduper.
|
||||
|
||||
---
|
||||
|
||||
@@ -184,10 +184,10 @@ sudo resize2fs /dev/sdb1
|
||||
## Логи и ротация
|
||||
|
||||
- **Базовая политика (как в LXC):** на ВМ настроен logrotate `/etc/logrotate.d/homelab-lxc.conf` — 14 дней, 50 MB, 5 архивов, сжатие (системные логи в `/var/log`). На ВМ 200 пакет `logrotate` был установлен вручную (в образе по умолчанию не было); после установки активен таймер `logrotate.timer`. Подробнее: [Logrotate — базовая политика homelab](../maintenance/logrotate/README.md).
|
||||
- **Docker:** данные Docker (образы, контейнеры, overlay) хранятся в **/mnt/data/docker** (Docker Root Dir). Логи контейнеров — драйвер **json-file** без ограничения размера и количества файлов (Config:{} у immich_server и immich_postgres). При активной работе логи могут разрастаться и занимать место на **корневом** разделе (если логи пишутся на корень) или в overlay на /mnt/data — уточнить расположение логов контейнеров (часто в /mnt/data/docker/containers). В любом случае ограничение логов не задано (см. TODO).
|
||||
- **Docker:** данные Docker (образы, контейнеры, overlay) хранятся в **/mnt/data/docker** (Docker Root Dir). Логи контейнеров — драйвер **json-file** с ограничениями в `/etc/docker/daemon.json`: `max-size: "10m"`, `max-file: "3"` (до 30 MB на контейнер). Логи пишутся в `/mnt/data/docker/containers`.
|
||||
- **Системный logrotate:** стандартные правила (apt, dpkg, cloud-init, unattended-upgrades, wtmp) плюс homelab-lxc.conf. Отдельных правил для Immich или Docker нет.
|
||||
|
||||
**Риск:** корневой диск заполнен на 87%. Рост логов, обновления и кэш могут привести к нехватке места. Необходимо ограничить логи Docker и следить за местом на корне (см. TODO).
|
||||
Корневой диск расширен до 50 GB; логи Docker ограничены.
|
||||
|
||||
---
|
||||
|
||||
@@ -208,18 +208,17 @@ sudo resize2fs /dev/sdb1
|
||||
## Уязвимости и риски
|
||||
|
||||
1. **Секреты в .env:** В `/opt/immich/.env` и `/opt/immich-deduper/.env` хранятся пароли БД, API-ключи (IMMICH_API_KEY, GEMINI_API_KEY), креды для deduper (PSQL_*). Файлы не должны попадать в публичный репозиторий. Ограничить права (chmod 600), хранить бэкапы в защищённом месте.
|
||||
2. **Корневой диск 87%:** Критично мало свободного места. При 100% возможны сбои обновлений и работы сервисов. Срочно: освободить место и/или перенести часть данных на /mnt/data, ограничить логи Docker (см. TODO).
|
||||
3. **Логи Docker без лимитов:** Ротация не настроена — возможен рост логов и заполнение диска.
|
||||
4. **Доступ по портам:** Сервисы доступны по 2283, 2284, 8001, 8501, 8086 из LAN. Снаружи доступ только через NPM (https://immich.katykhin.ru → 2283). Не пробрасывать порты напрямую в интернет.
|
||||
5. **GPU и PCI-passthrough:** ВМ использует hostpci0 (VGA). Убедиться, что драйверы NVIDIA и доступ к GPU корректны для immich_machine_learning.
|
||||
2. **Корневой диск:** Расширен до 50 GB; логи Docker ограничены (10m × 3 файла на контейнер). Следить за местом при обновлениях.
|
||||
3. **Доступ по портам:** Сервисы доступны по 2283, 2284, 8001, 8501, 8086 из LAN. Снаружи доступ только через NPM (https://immich.katykhin.ru → 2283). Не пробрасывать порты напрямую в интернет.
|
||||
4. **GPU и PCI-passthrough:** ВМ использует hostpci0 (VGA). Убедиться, что драйверы NVIDIA и доступ к GPU корректны для immich_machine_learning.
|
||||
|
||||
---
|
||||
|
||||
## TODO по ВМ 200
|
||||
|
||||
- [x] **Базовая политика logrotate:** для системных логов настроена (homelab-lxc.conf — 14 дней, 50 MB, 5 архивов, как в LXC). См. [Logrotate — базовая политика homelab](../maintenance/logrotate/README.md).
|
||||
- [ ] **Корневой диск:** Снизить использование корня (87%). Варианты: перенести логи Docker на /mnt/data (если сейчас пишутся на корень), очистить старые образы/кэш (`docker system prune` с осторожностью), увеличить размер корневого диска ВМ в Proxmox. Настроить мониторинг и оповещение при заполнении >90%.
|
||||
- [ ] **Логи Docker:** Включить ограничение размера логов для всех контейнеров Immich и deduper: в `docker-compose.yml` добавить для каждого сервиса `logging: driver: json-file options: max-size: "100m" max-file: "3"` или задать default в `/etc/docker/daemon.json`. Убедиться, что Docker Root Dir остаётся на /mnt/data и логи не пишутся на корень. После изменений перезапустить контейнеры.
|
||||
- [x] **Корневой диск:** Расширен до 50 GB (было 35 GB). Логи Docker ограничены.
|
||||
- [x] **Логи Docker:** В `/etc/docker/daemon.json` заданы `log-driver: json-file`, `max-size: "10m"`, `max-file: "3"`. Логи в /mnt/data/docker/containers.
|
||||
- [ ] **Права на конфиги:** Ограничить доступ к .env (chmod 600), не коммитить в публичные репозитории.
|
||||
- [ ] **Резервное копирование:** Регулярный бэкап критичных данных (оценка размеров на момент документации):
|
||||
- **`/mnt/data/library`** — библиотека Immich (фото, видео, превью). ~148 GB. Основной объём; бэкап обязателен (внешний диск, сетевое хранилище).
|
||||
|
||||
@@ -45,6 +45,17 @@
|
||||
| backup-restic-yandex.sh | 04:00 | restic → Yandex (без photos) |
|
||||
| backup-restic-yandex-photos.sh | 04:10 | restic → Yandex (только photos) |
|
||||
|
||||
### Дашборд мониторинга
|
||||
|
||||
| Компонент | Назначение |
|
||||
|-----------|------------|
|
||||
| homelab-dashboard.service | Дашборд homelab (хост, контейнеры, сервисы) на порту 19998 |
|
||||
| /root/scripts/dashboard/ | Скрипты: dashboard-exporter.py, dashboard-server.py, index.html |
|
||||
| deploy-dashboard.sh | Деплой дашборда на хост |
|
||||
| add-to-homepage.sh | Добавить ссылку в Homepage (CT 103) |
|
||||
|
||||
**URL:** http://192.168.1.150:19998
|
||||
|
||||
### Мониторинг и уведомления
|
||||
|
||||
| Скрипт | Назначение |
|
||||
|
||||
146
docs/monitoring/dashboard-plan.md
Normal file
146
docs/monitoring/dashboard-plan.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# План реализации дашборда мониторинга homelab
|
||||
|
||||
Дашборд для Netdata (http://192.168.1.150:19999) с блоками: хост, контейнеры, критические сервисы.
|
||||
|
||||
---
|
||||
|
||||
## Текущее состояние (по результатам проверки на сервере)
|
||||
|
||||
### Netdata
|
||||
- **Версия:** v2.9.0
|
||||
- **Режим:** локальный, Cloud отключён
|
||||
- **API:** http://localhost:19999/api/v1/ — доступен
|
||||
|
||||
### Доступные метрики
|
||||
|
||||
| Блок | Метрика | Chart / источник | Статус |
|
||||
|------|---------|------------------|--------|
|
||||
| **Хост** | CPU total | `system.cpu` (user, system, nice, iowait, …) | ✅ |
|
||||
| | RAM total | `system.ram` | ✅ |
|
||||
| | Disk usage | `disk_space./`, `disk_space./mnt/backup`, `disk_space./mnt/nextcloud-hdd`, `disk_space./tank`, … (в API: URL-encode слэши) | ✅ |
|
||||
| | iowait | `system.cpu` dimension `iowait` | ✅ |
|
||||
| | load | `system.load` (load1, load5, load15) | ✅ |
|
||||
| **Контейнеры** | CPU % | `cgroup_<name>.cpu_limit` (used) | ✅ |
|
||||
| | RAM % | `cgroup_<name>.mem_utilization` | ✅ |
|
||||
| | Disk % | скрипт `pct exec ID -- df -P /` | ✅ кастомный экспортер |
|
||||
| | OOM count | `/sys/fs/cgroup/lxc/ID/memory.events` (oom_kill) | ✅ кастомный экспортер |
|
||||
| **Сервисы** | Immich, Nextcloud, nginx, VPN | ссылки на charts Netdata | ✅ без response time/connections |
|
||||
|
||||
### Контейнеры в cgroups (по данным Netdata)
|
||||
- `nginx` (CT 100)
|
||||
- `nextcloud` (CT 101)
|
||||
- `gitea` (CT 103)
|
||||
- `paperless` (CT 104)
|
||||
- `rag-service` (CT 105)
|
||||
- `misc` (CT 107, Invidious)
|
||||
- `galene` (CT 108)
|
||||
- `local-vpn` (CT 109)
|
||||
- `qemu_immich` (VM 200)
|
||||
|
||||
---
|
||||
|
||||
## Решения (по ответам пользователя)
|
||||
|
||||
1. **Disk % по контейнерам** — в приоритете. I/O не нужен. Реализация: скрипт на хосте, `pct exec ID -- df -P /` для каждого LXC, VM 200 — отдельно (`qm guest exec` или аналог).
|
||||
2. **OOM** — `cgroup memory.events` (oom_kill) по каждому контейнеру. Путь: `/sys/fs/cgroup/lxc/ID/memory.events` (LXC), для VM — cgroup QEMU.
|
||||
3. **Response time / open connections** — отложено, не требуется.
|
||||
4. **Размещение** — на хосте (192.168.1.150).
|
||||
5. **Netdata Cloud** — не рассматривается.
|
||||
|
||||
---
|
||||
|
||||
## Варианты реализации дашборда
|
||||
|
||||
### Вариант A: Netdata Cloud — не используется (Cloud отключён)
|
||||
|
||||
### Вариант B: Кастомная HTML-страница (выбран)
|
||||
- Страница на хосте (192.168.1.150), которая:
|
||||
- запрашивает Netdata API (`/api/v1/data?chart=...`)
|
||||
- рендерит блоки: хост, таблица контейнеров, сервисы
|
||||
- Плюсы: полный контроль, работает без Cloud
|
||||
- Минусы: нужна разработка и хостинг страницы
|
||||
|
||||
### Вариант C: Доработка стандартного дашборда Netdata
|
||||
- `dashboard_info.js` — изменение порядка/группировки charts
|
||||
- Плюсы: используем встроенный UI
|
||||
- Минусы: ограниченная кастомизация, в v2 подход мог измениться
|
||||
|
||||
---
|
||||
|
||||
## Рекомендуемый план (поэтапно)
|
||||
|
||||
### Этап 1: Дашборд на базе Netdata API (Вариант B)
|
||||
Создать кастомную HTML-страницу с тремя блоками.
|
||||
|
||||
**Блок 1 — Хост**
|
||||
- CPU total: `system.cpu` (сумма user+system или 100-idle)
|
||||
- RAM total: `system.ram` (used, cached, free)
|
||||
- Disk usage: `disk_space./`, `disk_space./mnt/backup`, `disk_space./mnt/nextcloud-hdd`, `disk_space./tank` (avail/used %)
|
||||
- iowait: `system.cpu` dimension iowait
|
||||
- load: `system.load` (load15)
|
||||
|
||||
**Блок 2 — Контейнеры (таблица)**
|
||||
- Колонки: имя, CPU %, RAM %, Disk %, OOM count
|
||||
- CPU/RAM: `cgroup_<name>.cpu_limit`, `cgroup_<name>.mem_utilization` (Netdata API)
|
||||
- Disk %: кастомный API (скрипт `pct exec ID -- df -P /` + парсинг)
|
||||
- OOM: кастомный API (LXC: `/sys/fs/cgroup/lxc/ID/memory.events`, VM 200: `/sys/fs/cgroup/qemu.slice/200.scope/memory.events` → oom_kill)
|
||||
|
||||
**Блок 3 — Критические сервисы**
|
||||
- Immich, Nextcloud, nginx, VPN — ссылки на charts Netdata (cgroup_*, app.nginx_*)
|
||||
- Response time / open connections — не требуются
|
||||
|
||||
### Этап 2: Кастомный экспортер (скрипт + HTTP API)
|
||||
Скрипт на хосте, запускаемый по таймеру или по запросу:
|
||||
- **Disk %:** для каждого LXC (100–109) — `pct exec ID -- df -P /`; для VM 200 — `qm guest exec` или fallback (lvs/zfs)
|
||||
- **OOM:** чтение `oom_kill` из `/sys/fs/cgroup/lxc/ID/memory.events` (LXC), `/sys/fs/cgroup/qemu.slice/200.scope/memory.events` (VM 200)
|
||||
- Отдача JSON на HTTP (например, порт 19998 или через nginx на хосте)
|
||||
|
||||
### Этап 3: Размещение и интеграция
|
||||
- Дашборд: статика на хосте (nginx или python -m http.server), запросы к Netdata API (localhost:19999) и кастомному API
|
||||
- Добавить ссылку в Homepage (services.yaml)
|
||||
|
||||
---
|
||||
|
||||
## VM 200 (Immich) — RAM после увеличения
|
||||
|
||||
При увеличении RAM с 6 до 10 GB «потребление» может визуально «упасть» по нескольким причинам:
|
||||
|
||||
1. **Процент vs абсолютное значение** — 32% от 10 GB ≈ 3.2 GB. Та же нагрузка при 6 GB давала бы ~53%. Дашборд показывает RAM % (cgroup mem_utilization).
|
||||
2. **Сброс кэша** — при нехватке памяти гость держит кэш; после добавления RAM ядро может освободить кэш, и «used» уменьшается.
|
||||
3. **Balloon** — virtio-balloon мог забирать память при 6 GB; после увеличения лимита balloon отдаёт память гостю, но реальное использование приложений может остаться ~3 GB.
|
||||
|
||||
**Проверка:** `qm guest exec 200 -- free -h` (требует qemu-guest-agent в гостевой ОС) — смотреть `Mem: used` внутри гостя.
|
||||
|
||||
---
|
||||
|
||||
## Реализовано (2026-02-28)
|
||||
|
||||
- **URL дашборда:** http://192.168.1.150:19998
|
||||
- **Ссылка в Homepage:** добавлена (Сервисы → Homelab Dashboard)
|
||||
- **Скрипты:** `scripts/dashboard/` (exporter, server, index.html, deploy, add-to-homepage)
|
||||
- **Systemd:** `homelab-dashboard.service` (порт 19998)
|
||||
|
||||
---
|
||||
|
||||
## Маппинг CT/VM → cgroup name (Netdata)
|
||||
|
||||
| ID | Назначение | cgroup name |
|
||||
|----|------------|-------------|
|
||||
| 100 | nginx | cgroup_nginx |
|
||||
| 101 | nextcloud | cgroup_nextcloud |
|
||||
| 103 | gitea | cgroup_gitea |
|
||||
| 104 | paperless | cgroup_paperless |
|
||||
| 105 | rag-service | cgroup_rag-service |
|
||||
| 107 | misc (Invidious) | cgroup_misc |
|
||||
| 108 | galene | cgroup_galene |
|
||||
| 109 | local-vpn | cgroup_local-vpn |
|
||||
| 200 | immich (VM) | cgroup_qemu_immich |
|
||||
|
||||
---
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- [netdata-proxmox-setup.md](netdata-proxmox-setup.md) — установка и алерты
|
||||
- [smartd-setup.md](smartd-setup.md) — SMART дисков
|
||||
- [container-100](../containers/container-100.md) — NPM, log-dashboard
|
||||
- [architecture](../architecture/architecture.md) — обзор контейнеров
|
||||
@@ -196,7 +196,16 @@ Netdata на хосте видит общие метрики (CPU, RAM, диск
|
||||
|
||||
---
|
||||
|
||||
## Дашборд homelab
|
||||
|
||||
Кастомный дашборд с метриками хоста, контейнеров и сервисов: **http://192.168.1.150:19998**
|
||||
|
||||
Ссылка добавлена в Homepage (Сервисы → Homelab Dashboard). Деплой: `scripts/dashboard/deploy-dashboard.sh`. Подробнее: [dashboard-plan.md](dashboard-plan.md).
|
||||
|
||||
---
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- [dashboard-plan.md](dashboard-plan.md) — план и реализация кастомного дашборда
|
||||
- [smartd-setup.md](smartd-setup.md) — SMART и диски
|
||||
- [backup-howto](../backup/backup-howto.md) — бэкапы
|
||||
|
||||
Reference in New Issue
Block a user