Основные задачи¶
Регулярные операционные процедуры 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/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¶
Retention: 30 дней / 20 GB. Если данные растут — можно уменьшить retention в docker-compose.yml.
5. Проверить истечение API токенов¶
GitLab project tokens и personal access tokens могут истекать. Проверить в Vaultwarden → GitLab & CI/CD.
Ротация серверов (при блокировке)¶
L2: только по согласованию с DevOps Lead
Ротация серверов затрагивает пользователей. Не делай без подтверждения.
Если VPN-сервер заблокирован провайдером или в РФ:
- Проверить состояние через admin panel (
http://10.99.87.64) - Если сервер недоступен — деактивировать в MySQL через Админпанель
- Заказать новый сервер у провайдера (MonoVM, TheHosting, DataPacket — см. Vaultwarden → VPN Providers)
- Задеплоить через Ansible:
ansible-playbook playbooks/vpn.yml - Добавить в 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 · Инвентарь серверов