✅ Good
Моніторинг¶
Моніторинг — це очі та вуха вашої інфраструктури. Без нього ви дізнаєтесь про проблему, коли користувачі почнуть скаржитись. З моніторингом — отримаєте сповіщення за секунди після падіння.
Два типи моніторингу
- **Uptime monitoring** — чи відповідає сервіс? (Uptime Kuma)
- **Metrics monitoring** — як він працює? CPU, RAM, latency (Prometheus + Grafana)
Архітектура моніторингу¶
flowchart TB
subgraph monitoring["Моніторинг"]
KUMA["Uptime Kuma<br/>Доступність"]
PROM["Prometheus<br/>Метрики"]
GRAFANA["Grafana<br/>Візуалізація"]
end
subgraph targets["Що моніторимо"]
WEB["Веб-сервіси<br/>HTTPS endpoints"]
SERVER["Сервери<br/>node_exporter"]
DOCKER["Контейнери<br/>cAdvisor"]
end
subgraph alerts["Сповіщення"]
TG["Telegram"]
EMAIL["Email"]
end
WEB --> KUMA
SERVER --> PROM
DOCKER --> PROM
PROM --> GRAFANA
KUMA --> alerts
GRAFANA --> alerts
style monitoring fill:#dbeafe
style targets fill:#d1fae5
style alerts fill:#fee2e2Uptime Kuma¶
Uptime Kuma — це self-hosted моніторинг доступності з красивим веб-інтерфейсом. Ідеальний для UMTC: простий, легкий, зрозумілий.
Встановлення¶
# docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- uptime-kuma:/app/data
volumes:
uptime-kuma:
# Запуск
docker compose up -d
# Відкрийте http://server:3001
# Створіть адмін акаунт
Налаштування моніторів¶
HTTP(S) Monitor¶
Type: HTTP(s)
URL: https://wiki.eliah.one/api/health
Method: GET
Expected Status: 200
Interval: 60 seconds
Retries: 3
Timeout: 30 seconds
TCP Port Monitor¶
Type: TCP Port
Hostname: server.eliah.one
Port: 22
Interval: 60 seconds
Ping Monitor¶
Type: Ping
Hostname: 10.10.0.1
Interval: 60 seconds
Що моніторимо в UMTC¶
| Сервіс | Тип | URL/Endpoint | Інтервал |
|---|---|---|---|
| Wiki | HTTPS | wiki.eliah.one | 60s |
| Auth | HTTPS | auth.eliah.one | 60s |
| Matrix | HTTPS | matrix.eliah.one/_matrix/federation/v1/version | 60s |
| Git | HTTPS | git.eliah.one | 60s |
| VPN gateway | Ping | 10.10.0.1 | 60s |
| SSH | TCP:22 | server.eliah.one | 60s |
Prometheus + Grafana¶
Для глибшого моніторингу (CPU, RAM, disk, network) використовуємо Prometheus для збору метрик та Grafana для візуалізації.
Docker Compose стек¶
# docker-compose.yml
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=15d'
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=secure_password
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
volumes:
prometheus_data:
grafana_data:
Prometheus config¶
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'docker'
static_configs:
- targets: ['cadvisor:8080']
Grafana Dashboards
Імпортуйте готові дашборди з grafana.com:
- **1860** — Node Exporter Full
- **893** — Docker monitoring
Сповіщення¶
Telegram¶
Найзручніший спосіб для UMTC:
- Створіть бота через @BotFather
- Отримайте token:
123456789:ABC... - Дізнайтесь chat_id:
- Додайте бота в групу
- Відправте повідомлення
- Відкрийтеhttps://api.telegram.org/bot<TOKEN>/getUpdates - Налаштуйте в Uptime Kuma:
- Settings → Notifications → Telegram
- Вставте token та chat_id
Email (SMTP)¶
SMTP Host: smtp.gmail.com
SMTP Port: 587
Security: STARTTLS
Username: your@gmail.com
Password: app-password (не основний пароль!)
Реагування на інциденти¶
flowchart TB
ALERT["🔔 Сповіщення"]
CHECK["Перевірити статус<br/>в Uptime Kuma"]
SSH["SSH на сервер"]
LOGS["Перевірити логи"]
FIX["Виправити проблему"]
VERIFY["Підтвердити<br/>відновлення"]
ALERT --> CHECK
CHECK -->|"Недоступний"| SSH
SSH --> LOGS
LOGS --> FIX
FIX --> VERIFY
style ALERT fill:#fee2e2
style VERIFY fill:#d1fae5Швидка діагностика¶
# Чи живий контейнер?
docker ps -a | grep service_name
# Логи контейнера
docker logs --tail 100 -f service_name
# Системні логи
journalctl -u service -n 100 -f
# Ресурси
htop
df -h
free -h
# Мережа
ping target
mtr target
ss -tulpn
Типові проблеми¶
| Симптом | Ймовірна причина | Рішення |
|---|---|---|
| 502/504 | Backend не відповідає | docker compose restart |
| Високий ping | Мережеві проблеми | Перевірити ISP/VPN |
| SSL error | Сертифікат прострочений | docker compose restart caddy |
| Диск 100% | Логи/docker images | docker system prune -a |
| OOM kill | Не вистачає RAM | Збільшити RAM / оптимізувати |
При падінні критичного сервісу
1. **Не панікуйте** — спочатку зберіть інформацію
2. Перевірте чи це локальна проблема (ваш ISP?) чи глобальна
3. Якщо глобальна — діагностуйте по SSH
4. Зберігайте логи перед перезапуском
Status Page¶
Uptime Kuma має вбудовану публічну сторінку статусу:
- Settings → Status Pages → Create
- Додайте монітори
- Налаштуйте домен: status.eliah.one
Це дозволяє користувачам бачити статус сервісів без доступу до внутрішньої інфраструктури.
Пов'язані теми¶
Шлях: infrastructure/monitoring.md