# 08. Мониторинг и логирование ## Обзор Для централизованного мониторинга и сбора логов используется стек: - **VictoriaMetrics** – хранилище временных рядов (метрики) - **Grafana** – визуализация и дашборды - **Loki** – хранение логов - **Promtail** – сбор и отправка логов - **Node Exporter** – системные метрики на всех хостах - **cAdvisor** – метрики Docker-контейнеров (включён на некоторых хостах) - **Proxmox VE Exporter** – сбор метрик гипервизора Все компоненты работают на хосте `manage` (192.168.1.208) в Docker-контейнерах, за исключением Node Exporter и Promtail, которые установлены на каждом хосте. ## Структура сбора данных ```mermaid graph LR subgraph Хосты NE[Node Exporter :9100] PT[Promtail :9080] CA[cAdvisor :8080] end NE --> VM[VictoriaMetrics :8428] CA --> VM PT --> Loki[Loki :3100] VM --> Grafana[Grafana :45132] Loki --> Grafana Proxmox[Proxmox VE Exporter] --> VM ``` # 08. Мониторинг и логирование ## Метрики ### Node Exporter Установлен на всех хостах (включая Proxmox). Собирает: - Загрузка CPU, память, диски, сеть - uptime, количество процессов - метрики ядра (TCP, UDP, etc.) Порт: `9100` ### cAdvisor Собирает метрики Docker-контейнеров: - CPU, память, сеть, диски на уровне контейнера - количество контейнеров, их статусы Порт: `8080` Включён на хостах: `gateway`, `data`, `media`, `photo`, `talk`, `games`, `manage` (фактически везде, где есть Docker, хотя в Ansible роль `cadvisor` закомментирована – уточнить) ### Proxmox VE Exporter Собирает метрики гипервизора: - состояние ВМ и LXC (CPU, память, диски, сеть) - нагрузка на хранилища - статус кластера Порт: `9223` Запущен на хосте `olimp` (Proxmox). Аутентификация через API-токен (пользователь `pve_exporter@pve`). ### VictoriaMetrics Хранилище временных рядов. Принимает метрики от: - Node Exporter (все хосты) - cAdvisor (хосты с Docker) - Proxmox VE Exporter - vmagent (если используется) Порт: `8428` Запущен на хосте `manage` в Docker-контейнере. ## Логи ### Promtail Установлен на каждом хосте, где есть сервисы. Собирает логи: - системные логи (syslog, auth) - логи Docker-контейнеров (через драйвер `json-file`) - логи приложений (например, NPM, Jellyfin) из файлов Конфигурация Promtail находится в `/etc/promtail/promtail.yaml` на каждом хосте. Отправляет логи в Loki по порту `3100`. ### Loki Хранилище логов на хосте `manage`. Retention: 30 дней. Доступен для запросов из Grafana. Порт: `3100` Запущен в Docker-контейнере. ## Визуализация (Grafana) Grafana доступна по домену `mon.zailon.ru`. Используются дашборды: - **Node Exporter Full** – системные метрики всех хостов - **Docker Monitoring** – метрики контейнеров (cAdvisor) - **Proxmox** – состояние ВМ и хранилищ - **Loki Logs** – просмотр логов - **NPM** – статистика запросов (если настроен сбор логов NPM) ### Доступ - Администратор: `admin` / пароль (хранится в Ansible Vault) - URL: `https://mon.zailon.ru` ## Алерты Алерты настроены через **Grafana Alerting**. Основные правила: | Условие | Действие | |---------|----------| | Высокая загрузка CPU (>90% в течение 15 мин) | Уведомление в Telegram (если настроено) | | Недоступность хоста (Node Exporter down) | Уведомление | | Ошибки 5xx в NPM > 10 за 5 мин | Уведомление | | Низкое свободное место на диске (<10%) | Уведомление | *Конкретные правила могут уточняться.* ## Настройка через Ansible Все компоненты мониторинга управляются Ansible. Роли: - `promtail` – установка и настройка Promtail - `grafana` – развёртывание Grafana, импорт дашбордов - `loki` – настройка Loki - `node_exporter` – установка Node Exporter (входит в роль `base_setup`) - `cadvisor` – развёртывание cAdvisor (закомментирована) Переменные заданы в `group_vars/all.yml`: ```yaml monitoring_ports: node_exporter: 9100 cadvisor: 8080 proxmox_exporter: 9223 vmagent: 8429 victoriametrics: 8428 loki: 3100 promtail: 9080 grafana_admin_password: "{{ vault_grafana_admin_password }}" loki_retention_days: 30 ``` ## Проблемы и рекомендации ### 🔴 cAdvisor не включён на всех хостах В плейбуке `olimp-deploy.yml` роль `cadvisor` закомментирована. Если нужны метрики контейнеров на всех хостах, следует её включить. ### 🟡 Отсутствие алертов на логи Настроены только метрики. Желательно добавить алерты на появление в логах критических событий (например, `error`, `panic`, `failed`). Это можно сделать через Loki Alerting. ### 🟢 Мониторинг роутера и внешних устройств Сейчас собираются метрики только с серверов. Хорошо бы добавить мониторинг роутера (SNMP) и умных устройств (например, через ping). ### 🟠 Настройка дашбордов Проверьте, что все дашборды корректно отображают данные. Для NPM нужно убедиться, что логи попадают в Loki и настроен соответствующий источник данных. --- **Связанные разделы:** - [Проксирование и SSL (NPM)](07-proxy-ssl.md) - [Управление конфигурацией (Ansible)](09-ansible.md) - [Безопасность](10-security.md)