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:#fee2e2

Uptime 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:

  1. Створіть бота через @BotFather
  2. Отримайте token: 123456789:ABC...
  3. Дізнайтесь chat_id:
    - Додайте бота в групу
    - Відправте повідомлення
    - Відкрийте https://api.telegram.org/bot<TOKEN>/getUpdates
  4. Налаштуйте в 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 має вбудовану публічну сторінку статусу:

  1. Settings → Status Pages → Create
  2. Додайте монітори
  3. Налаштуйте домен: status.eliah.one

Це дозволяє користувачам бачити статус сервісів без доступу до внутрішньої інфраструктури.

Пов'язані теми

Шлях: infrastructure/monitoring.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications