Перейти к содержанию

Основные задачи

Регулярные операционные процедуры DevOps.


Ежедневно

1. Проверить Grafana алерты

Открыть Grafana → Alerting → Alert rules.

Критичные алерты (требуют реакции):

Алерт Что означает Действие
VPN: Mass Server Drop >50% серверов недоступно Runbooks: API недоступен
VPN: Online Zero Онлайн упал до 0 Проверить VCS worker, MySQL
VPN: Sync Stale Sync не работал >1ч Проверить docker logs vpn-config-worker
DISK Usage Диск >85% Runbooks: Диск заполнен
# Быстрая проверка состояния контейнеров
./scripts/ssh-internal.sh 10.99.87.249 \
  "docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.RunningFor}}'"

2. Проверить worker VPN Config Service

# Последние строки лога worker — должны быть "Online sync done: X sessions" каждые 60с
./scripts/ssh-internal.sh 10.99.87.249 "docker logs vpn-config-worker --tail 20"

# Проверить API health
curl -s http://10.99.87.249:8000/health

Ожидаемое: строки Online sync done, Config sync done, временные метки не старше 5 мин.

3. Проверить дисковое пространство

./scripts/ssh-internal.sh 10.99.87.249 "df -h /"
./scripts/ssh-internal.sh 10.99.87.62 "df -h /"
./scripts/ssh-internal.sh 10.99.87.5 "df -h /"

Порог тревоги: >80%. Если Prometheus/Loki занимает много на 10.99.87.5 — см. Runbooks: Диск заполнен.

4. Проверить активные инциденты

Открыть CURRENT-STATUS.md (monorepo) и просмотреть активные проблемы.


Еженедельно

1. Проверить бэкапы

На данный момент автоматических бэкапов MySQL нет — критическая проблема.

# Создать ручной дамп MySQL PROD
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
./scripts/ssh-internal.sh 10.99.87.62 \
  "docker exec vpn-db mysqldump -uvpn -p'$(см. Vaultwarden  Databases)' \
    --single-transaction --quick vpn" | gzip > shiva_backup_${TIMESTAMP}.sql.gz

Полная процедура: Бэкап и восстановление БД.

2. Просмотреть логи ошибок

# Backend ошибки за последние 24ч
./scripts/ssh-internal.sh 10.99.87.249 \
  "docker logs vpn-back-blue --since 24h 2>&1 | grep -i 'error\|exception' | tail -50"

# VCS worker ошибки
./scripts/ssh-internal.sh 10.99.87.249 \
  "docker logs vpn-config-worker --since 24h 2>&1 | grep -i 'error\|critical\|exception' | tail -30"

3. Проверить срок сертификатов

# Проверить основные домены
for domain in api.shivavpn.io shiva-app.io vault.shivavpn.io monitor.karmann.tech; do
  echo -n "$domain: "
  echo | openssl s_client -connect $domain:443 -servername $domain 2>/dev/null \
    | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2
done

Подробнее: SSL-сертификаты.

4. Обновить инвентарь серверов

Если добавлялись/выводились серверы:

# Аудит Ansible ↔ MySQL ↔ VCS
python3 scripts/inventory_reconcile.py

Источник истины: ansible/shiva-ansible/inventory/servers.ini.

5. Проверить очередь sync

# Длина очереди (должна быть 0 или близко к 0)
./scripts/ssh-internal.sh 10.99.87.249 \
  "docker exec redis redis-cli LLEN vpn:sync:queue"

Если очередь растёт — проверить worker и SSH pool.


Ежемесячно

1. Аудит документации

  • Просмотреть docs/ — актуальны ли процедуры?
  • Проверить каталог скриптов в monorepo — все ли скрипты актуальны?
  • Обновить CURRENT-STATUS.md если есть устаревшие записи

2. Проверить зависимости

# VPN Config Service — проверить версии библиотек
./scripts/ssh-internal.sh 10.99.87.249 \
  "docker exec vpn-config-service pip list --outdated"

3. Аудит пользователей Vaultwarden

Открыть vault.shivavpn.io/admin → Users.

Проверить: - Нет ли неактивных пользователей (уволившиеся) - У всех ли актуальные роли

4. Проверить использование диска Prometheus

./scripts/ssh-internal.sh 10.99.87.5 "du -sh /opt/grafana/prometheus-data"

Retention: 30 дней / 20 GB. Если данные растут — можно уменьшить retention в docker-compose.yml.

5. Проверить истечение API токенов

GitLab project tokens и personal access tokens могут истекать. Проверить в Vaultwarden → GitLab & CI/CD.


Ротация серверов (при блокировке)

L2: только по согласованию с DevOps Lead

Ротация серверов затрагивает пользователей. Не делай без подтверждения.

Если VPN-сервер заблокирован провайдером или в РФ:

  1. Проверить состояние через admin panel (http://10.99.87.64)
  2. Если сервер недоступен — деактивировать в MySQL через Админпанель
  3. Заказать новый сервер у провайдера (MonoVM, TheHosting, DataPacket — см. Vaultwarden → VPN Providers)
  4. Задеплоить через Ansible: ansible-playbook playbooks/vpn.yml
  5. Добавить в MySQL, обновить servers.ini в shiva-ansible

Подробнее: Деплой VPN-сервера.


Полезные команды

# Все контейнеры на всех серверах
for ip in 10.99.87.249 10.99.87.62 10.99.87.5 10.99.87.64 10.99.87.63; do
  echo "=== $ip ==="
  ./scripts/ssh-internal.sh $ip "docker ps --format '{{.Names}} {{.Status}}'" 2>/dev/null
done

# Backend health
curl -s http://10.99.87.249:8080/actuator/health | python3 -m json.tool

# Активные аккаунты (примерный запрос)
./scripts/ssh-internal.sh 10.99.87.62 \
  "docker exec vpn-db mysql -uvpn -p'$(см. Vaultwarden  Databases)' vpn \
    -e 'SELECT COUNT(*) FROM account WHERE status=\"ACTIVE\"'"

См. также: DevOps скрипты · Runbooks · Мониторинг · VPN Config Service · Ansible · Инвентарь серверов