Update 3 files
- /README.md - /docs/08-monitoring.md - /docs/09-ansible.md
This commit is contained in:
parent
1978136531
commit
0d8e11aa30
14
README.md
14
README.md
@ -11,13 +11,13 @@
|
|||||||
- [Виртуальные машины и LXC](docs/03-vms-lxcs.md)
|
- [Виртуальные машины и LXC](docs/03-vms-lxcs.md)
|
||||||
- [Сеть и доступ](docs/04-network.md)
|
- [Сеть и доступ](docs/04-network.md)
|
||||||
- [Samba – файловые шары](docs/05-samba.md)
|
- [Samba – файловые шары](docs/05-samba.md)
|
||||||
- [Сервисы и порты](docs/06-services.md) *(в разработке)*
|
- [Сервисы и порты](docs/06-services.md)
|
||||||
- [Проксирование и SSL (NPM)](docs/07-proxy-ssl.md) *(в разработке)*
|
- [Проксирование и SSL (NPM)](docs/07-proxy-ssl.md)
|
||||||
- [Мониторинг и логирование](docs/08-monitoring.md) *(в разработке)*
|
- [Мониторинг и логирование](docs/08-monitoring.md)
|
||||||
- [Управление конфигурацией (Ansible)](docs/09-ansible.md) *(в разработке)*
|
- [Управление конфигурацией (Ansible)](docs/09-ansible.md)
|
||||||
- [Безопасность](docs/10-security.md) *(в разработке)*
|
- [Безопасность](docs/10-security.md)
|
||||||
- [Резервное копирование](docs/11-backup.md) *(в разработке)*
|
- [Резервное копирование](docs/11-backup.md)
|
||||||
- [Решение проблем](docs/12-troubleshooting.md) *(в разработке)*
|
- [Решение проблем](docs/12-troubleshooting.md)
|
||||||
|
|
||||||
## 🚀 Краткий обзор
|
## 🚀 Краткий обзор
|
||||||
|
|
||||||
|
|||||||
169
docs/08-monitoring.md
Normal file
169
docs/08-monitoring.md
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
# 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)
|
||||||
243
docs/09-ansible.md
Normal file
243
docs/09-ansible.md
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
# 09. Управление конфигурацией (Ansible)
|
||||||
|
|
||||||
|
## Обзор
|
||||||
|
|
||||||
|
Для автоматизации развёртывания и поддержки инфраструктуры используется **Ansible**. Управляющий хост — `ansible` (192.168.1.210). Все конфигурации хранятся в репозитории, секреты зашифрованы с помощью Ansible Vault.
|
||||||
|
|
||||||
|
## Структура репозитория
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible/
|
||||||
|
├── inventory/
|
||||||
|
│ └── hosts # файл инвентаря
|
||||||
|
├── group_vars/
|
||||||
|
│ ├── all.yml # общие переменные (несекретные)
|
||||||
|
│ └── vault.yml # зашифрованные секреты
|
||||||
|
├── roles/
|
||||||
|
│ ├── base_setup/ # базовая настройка всех хостов
|
||||||
|
│ ├── system_cleanup/ # удаление ненужных пакетов
|
||||||
|
│ ├── docker/ # установка Docker, настройка мониторинга
|
||||||
|
│ ├── npm/ # Nginx Proxy Manager
|
||||||
|
│ ├── heimdall/ # Heimdall дашборд
|
||||||
|
│ ├── mealie/ # Mealie
|
||||||
|
│ ├── bookstack/ # BookStack
|
||||||
|
│ ├── bitwarden/ # Bitwarden (Vaultwarden)
|
||||||
|
│ ├── ampache/ # Ampache
|
||||||
|
│ ├── audiobookshelf/ # Audiobookshelf
|
||||||
|
│ ├── calibre-web/ # Calibre-web
|
||||||
|
│ ├── jellyfin/ # Jellyfin
|
||||||
|
│ ├── flibusta/ # Flibusta
|
||||||
|
│ ├── immich/ # Immich
|
||||||
|
│ ├── mumble/ # Mumble
|
||||||
|
│ ├── teamspeak/ # TeamSpeak
|
||||||
|
│ ├── minecraft/ # Minecraft (закомментирована)
|
||||||
|
│ ├── meshcentral/ # MeshCentral
|
||||||
|
│ ├── grafana/ # Grafana
|
||||||
|
│ ├── loki/ # Loki
|
||||||
|
│ ├── gitlab/ # GitLab
|
||||||
|
│ ├── torrserver/ # TorrServer
|
||||||
|
│ ├── qbittorrent/ # qBittorrent
|
||||||
|
│ ├── promtail/ # Promtail (сбор логов)
|
||||||
|
│ ├── cadvisor/ # cAdvisor (закомментирована)
|
||||||
|
│ ├── proxmox_base_setup/ # настройка Proxmox хоста
|
||||||
|
│ └── proxmox_monitoring/ # настройка Proxmox VE Exporter
|
||||||
|
└── olimp-deploy.yml # основной playbook
|
||||||
|
```
|
||||||
|
|
||||||
|
## Инвентарь (`inventory/hosts`)
|
||||||
|
|
||||||
|
Хосты сгруппированы по ролям:
|
||||||
|
|
||||||
|
```
|
||||||
|
[infra]
|
||||||
|
proxmox ansible_host=192.168.1.200 int_ip=192.168.1.200
|
||||||
|
gateway ansible_host=192.168.1.201 int_ip=192.168.1.201
|
||||||
|
data ansible_host=192.168.1.202 int_ip=192.168.1.202
|
||||||
|
media ansible_host=192.168.1.203 int_ip=192.168.1.203
|
||||||
|
photo ansible_host=192.168.1.204 int_ip=192.168.1.204
|
||||||
|
talk ansible_host=192.168.1.206 int_ip=192.168.1.206
|
||||||
|
games ansible_host=192.168.1.207 int_ip=192.168.1.207
|
||||||
|
manage ansible_host=192.168.1.208 int_ip=192.168.1.208
|
||||||
|
git ansible_host=192.168.1.209 int_ip=192.168.1.209
|
||||||
|
ansible ansible_host=192.168.1.210 int_ip=192.168.1.210
|
||||||
|
torrent ansible_host=192.168.1.211 int_ip=192.168.1.211
|
||||||
|
test ansible_host=192.168.1.212 int_ip=192.168.1.212
|
||||||
|
|
||||||
|
[pve-server]
|
||||||
|
proxmox
|
||||||
|
|
||||||
|
[gateway-server]
|
||||||
|
gateway
|
||||||
|
|
||||||
|
[data-server]
|
||||||
|
data
|
||||||
|
|
||||||
|
[media-server]
|
||||||
|
media
|
||||||
|
|
||||||
|
[photo-server]
|
||||||
|
photo
|
||||||
|
|
||||||
|
[talk-server]
|
||||||
|
talk
|
||||||
|
|
||||||
|
[games-server]
|
||||||
|
games
|
||||||
|
test
|
||||||
|
|
||||||
|
[manage-server]
|
||||||
|
manage
|
||||||
|
|
||||||
|
[git-server]
|
||||||
|
git
|
||||||
|
|
||||||
|
[ansible-server]
|
||||||
|
ansible
|
||||||
|
|
||||||
|
[torrent-server]
|
||||||
|
torrent
|
||||||
|
```
|
||||||
|
|
||||||
|
## Playbook (`olimp-deploy.yml`)
|
||||||
|
|
||||||
|
Основной playbook запускает роли для каждой группы хостов с тегами для выборочного применения.
|
||||||
|
|
||||||
|
```
|
||||||
|
- hosts: all:!pve-server
|
||||||
|
roles:
|
||||||
|
- {role: base_setup, tags: deploy_base}
|
||||||
|
- {role: system_cleanup, tags: deploy_cleanup}
|
||||||
|
- {role: promtail, tags: deploy_promtail}
|
||||||
|
|
||||||
|
- hosts: pve-server
|
||||||
|
roles:
|
||||||
|
- { role: proxmox_base_setup, tags: deploy_proxmox_base }
|
||||||
|
- { role: proxmox_monitoring, tags: deploy_proxmox_monitoring }
|
||||||
|
|
||||||
|
- hosts: gateway-server
|
||||||
|
roles:
|
||||||
|
- { role: docker, tags: deploy_docker }
|
||||||
|
- { role: npm, tags: deploy_npm }
|
||||||
|
- { role: heimdall, tags: deploy_heimdall }
|
||||||
|
|
||||||
|
- hosts: data-server
|
||||||
|
roles:
|
||||||
|
- { role: docker, tags: deploy_docker }
|
||||||
|
- { role: mealie, tags: deploy_mealie }
|
||||||
|
- { role: bookstack, tags: deploy_bookstack }
|
||||||
|
- { role: bitwarden, tags: deploy_bitwarden }
|
||||||
|
|
||||||
|
# ... остальные группы аналогично
|
||||||
|
```
|
||||||
|
|
||||||
|
## Переменные
|
||||||
|
|
||||||
|
### Общие переменные (`group_vars/all.yml`)
|
||||||
|
|
||||||
|
Содержат несекретные настройки:
|
||||||
|
|
||||||
|
- временная зона, локали
|
||||||
|
- список IP-адресов всех серверов
|
||||||
|
- порты для мониторинга
|
||||||
|
- пути к каталогам для сервисов
|
||||||
|
- публичные SSH-ключи
|
||||||
|
- списки пакетов для установки
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```
|
||||||
|
timezone: Asia/Yekaterinburg
|
||||||
|
system_locale: ru_RU.UTF-8
|
||||||
|
|
||||||
|
server_ips:
|
||||||
|
olimp: "192.168.1.200"
|
||||||
|
gateway: "192.168.1.201"
|
||||||
|
# ... остальные
|
||||||
|
|
||||||
|
monitoring_ports:
|
||||||
|
node_exporter: 9100
|
||||||
|
cadvisor: 8080
|
||||||
|
loki: 3100
|
||||||
|
promtail: 9080
|
||||||
|
|
||||||
|
base_packages:
|
||||||
|
- curl
|
||||||
|
- wget
|
||||||
|
- htop
|
||||||
|
- git
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Секреты (`group_vars/vault.yml`)
|
||||||
|
|
||||||
|
Все пароли, токены и другие чувствительные данные хранятся в зашифрованном файле `vault.yml`. Шифрование выполняется командой:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-vault encrypt group_vars/vault.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример содержимого (незашифрованный вид):
|
||||||
|
|
||||||
|
```
|
||||||
|
vault_bitwarden_admin_token: "super_secret_token"
|
||||||
|
vault_bitwarden_smtp_password: "smtp_password"
|
||||||
|
vault_mealie_db_password: "mealie_db_pass"
|
||||||
|
vault_immich_db_password: "immich_db_pass"
|
||||||
|
vault_mumble_server_password: "mumble_pass"
|
||||||
|
vault_mumble_superuser_password: "mumble_super_pass"
|
||||||
|
vault_matrix_postgres_password: "matrix_db_pass"
|
||||||
|
vault_matrix_synapse_secret: "synapse_secret"
|
||||||
|
vault_matrix_macaroon_secret: "macaroon_secret"
|
||||||
|
vault_matrix_form_secret: "form_secret"
|
||||||
|
vault_samba_password_qb: "qb_samba_pass"
|
||||||
|
grafana_admin_password: "strong_grafana_pass"
|
||||||
|
# ... и другие
|
||||||
|
```
|
||||||
|
|
||||||
|
## Запуск плейбуков
|
||||||
|
|
||||||
|
Для применения конфигурации используется команда:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts olimp-deploy.yml --ask-vault-pass
|
||||||
|
```
|
||||||
|
|
||||||
|
Для запуска только определённых тегов:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts olimp-deploy.yml --tags deploy_docker --ask-vault-pass
|
||||||
|
```
|
||||||
|
|
||||||
|
## Пример роли (docker)
|
||||||
|
|
||||||
|
Роль `docker` выполняет установку Docker и настройку мониторинга. Ключевые задачи:
|
||||||
|
|
||||||
|
- Установка зависимостей (`apt-transport-https`, `ca-certificates`, `curl`, `gnupg`, `lsb-release`)
|
||||||
|
- Добавление GPG-ключа Docker и репозитория
|
||||||
|
- Установка `docker-ce`, `docker-ce-cli`, `containerd.io`, `docker-compose-plugin`
|
||||||
|
- Запуск и включение службы Docker
|
||||||
|
- Развёртывание скрипта `docker_metrics.sh` для сбора метрик в Node Exporter
|
||||||
|
- Создание systemd-таймера для регулярного сбора метрик
|
||||||
|
- Обновление `runc` до версии 1.2.4 (если требуется)
|
||||||
|
|
||||||
|
## Проблемы и рекомендации
|
||||||
|
|
||||||
|
### 🔴 Хранение паролей в открытом виде в `all.yml`
|
||||||
|
На момент аудита некоторые пароли (например, `grafana_admin_password`) находились в `all.yml` в открытом виде. **Немедленно перенести их в `vault.yml` и зашифровать.**
|
||||||
|
|
||||||
|
### 🟡 Использование тегов и ролей
|
||||||
|
Некоторые роли закомментированы (например, `cadvisor`, `minecraft`). Если они не используются, следует удалить их из плейбука, чтобы избежать путаницы.
|
||||||
|
|
||||||
|
### 🟢 Версионирование и резервное копирование
|
||||||
|
Рекомендуется хранить репозиторий Ansible в Git (локальном или на GitLab) и регулярно делать резервные копии `vault.yml` с паролем.
|
||||||
|
|
||||||
|
### 🟠 Управление SSH-ключами
|
||||||
|
В `all.yml` заданы публичные ключи. Необходимо убедиться, что на всех хостах нет лишних ключей, а вход по паролю отключён.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Связанные разделы:**
|
||||||
|
- [Виртуальные машины и LXC](03-vms-lxcs.md)
|
||||||
|
- [Сеть и доступ](04-network.md)
|
||||||
|
- [Мониторинг и логирование](08-monitoring.md)
|
||||||
|
- [Безопасность](10-security.md)
|
||||||
Loading…
Reference in New Issue
Block a user