Files
sless/doc/run_and_logs.md
T

184 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Run & Logs — инструкции по запуску и сбору логов
Дата: 2026-03-11 (обновлено 2026-03-11)
## ГЛАВНОЕ ОТКРЫТИЕ: запускать всё на удалённой машине
**Проблема:** lokальная машина (`remote_dev`) ходит в интернет через VPN, который нестабилен:
- `docker push` — TLS handshake timeout
- `terraform apply` — TLS timeout при скачивании провайдера
- HTTP-запросы к `sless-api.kube5s.ru` — иногда падают
**Решение:** удалённая машина `192.168.1.220` имеет **прямой выход в интернет без VPN**.
Все долгие операции нужно запускать **там через SSH**, а не локально.
Агент Copilot делает это автоматически: пишет команду через `sshpass ssh`, читает вывод/логи.
### Что запускаем на удалённой машине (192.168.1.220):
- `terraform init / apply / destroy` — все E2E и стресс-тесты
- `git pull / push`
- `docker build / push`
- `kubectl` деплой оператора — kubeconfig скопирован в `~/.kube/config` (2026-03-11)
- `run_stress_test.sh`, `run_e2e_tests.sh`
- HTTP-проверки к `sless-api.kube5s.ru`
- `go build / go test` (если нужно проверить без VPN)
### Что остаётся локально:
- VS Code + Copilot — правка кода
- `git commit + push` (файлы редактируются здесь)
### Шаблон: запустить команду на удалённой машине
```bash
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 '<команда>'
```
### Шаблон: запустить долгий скрипт в фоне и смотреть лог
```bash
# Запуск в фоне:
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 \
'cd /home/naeel/dev/sless && nohup bash run_stress_test.sh > /tmp/stress.log 2>&1 & echo PID=$!'
# Следить за логом:
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'tail -30 /tmp/stress.log'
```
---
1) Предварительные условия
- На локальной машине должен быть доступ в репозиторий (этот проект).
- Для удалённого запуска через SSH используйте ключ или пароль пользователя `naeel`.
- Если нужен неинтерактивный ввод пароля, установите `sshpass`.
**Реквизиты удалённой машины:**
- Host: `192.168.1.220`
- User: `naeel`
- Password: `p`
- Repo path: `/home/naeel/dev/sless`
Пример подключения:
```bash
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'echo OK'
```
2) Скрипты (подготовленные в репо)
- Диагностика системы: `.tmp/ssh_diag.sh`
- Сбор логов ssh: `.tmp/ssh_logs.sh`
- Тест пуша в pearlharbor: `test_pearlharbor_push.sh` (в корне репо)
3) Быстрый запуск диагностик (одной командой, безопасно)
Если `sshpass` установлен, запустить локально и направить вывод в файл на локальной машине:
```bash
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'bash -s' < .tmp/ssh_diag.sh > /tmp/ssh_diag_output.txt 2>&1
scp -o StrictHostKeyChecking=no naeel@192.168.1.220:/tmp/ssh_diag_output.txt ./
```
Или интерактивно (ввести пароль вручную):
```bash
ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'bash -s' < .tmp/ssh_diag.sh
```
4) Сбор системных логов вручную (на хосте)
Запустите эти команды на хосте (через ssh) и сохраните результаты в `/tmp` для удобного скачивания:
```bash
sudo journalctl -u ssh -n 200 --no-pager > /tmp/ssh_journal.log
sudo tail -n 200 /var/log/auth.log > /tmp/auth.log
sudo systemctl status ssh --no-pager > /tmp/ssh_status.txt
sudo cat /etc/ssh/sshd_config > /tmp/sshd_config.txt
```
Docker логи и состояние:
```bash
docker --version > /tmp/docker_version.txt 2>&1 || true
docker ps -a > /tmp/docker_ps.txt 2>&1 || true
docker logs <container_name> > /tmp/docker_<container_name>.log 2>&1 || true
```
Если использовался `nohup` или фоновые скрипты, проверьте их лог-файлы (пример):
```bash
ls -la /tmp | grep pearlharbor
cat /tmp/pearlharbor_bg.log > /tmp/pearlharbor_bg.log.copy || true
```
5) Забрать логи на локальную машину
```bash
scp naeel@192.168.1.220:/tmp/ssh_journal.log ./
scp naeel@192.168.1.220:/tmp/auth.log ./
scp naeel@192.168.1.220:/tmp/docker_ps.txt ./
```
6) Запуск `test_pearlharbor_push.sh` (мультипуш тест)
Файл: `test_pearlharbor_push.sh` (в корне репозитория). Примеры использования:
```bash
# простая однократная прогонка (локально, когда docker настроен)
bash ./test_pearlharbor_push.sh
# с параметрами окружения
# NUM_PUSHES=5 CLEANUP=true ./test_pearlharbor_push.sh
# CREATE_PROJECT=true NUM_PUSHES=3 ./test_pearlharbor_push.sh
```
Скрипт печатает сводку по каждому пушу и возвращает HTTP/registry статусы. При включённом `CLEANUP=true` он попытается удалить тестовые теги через Harbor API.
7) Рекомендации по безопасности
- Никогда не выкладывайте содержимое `secrets/pearlharbor_registry.txt` публично.
- Если используете `sshpass`, убедитесь, что доступ к вашей машине ограничен и удалённый пароль меняется по окончании тестов.
8) Что делать при проблемах
- Если `docker push` даёт TLS handshake timeout — проверьте VPN/маршрутизацию и повторы (retry) сети.
- При `401 Unauthorized` — проверьте правильность тега `registry/PROJECT/REPO:TAG` и существование проекта в Harbor (создаётся через API либо через WebUI).
- Для ошибок ssh — смотрите `/var/log/auth.log` и `journalctl -u ssh`.
9) Контактные точки (быстрый чек-лист)
- Скрипты: `.tmp/ssh_diag.sh`, `.tmp/ssh_logs.sh`
- Тест пуш: `test_pearlharbor_push.sh`
- Логи на хосте: `/var/log/auth.log`, `journalctl -u ssh`, `docker logs <container>`
Файл создан автоматически агентом 2026-03-11.
10) Соответствие локальных и удалённых путей
На локальной машине репозиторий находится в `/home/naeel/remote_dev/sless`,
на удалённой — в `/home/naeel/dev/sless`.
Это не обязательно значит, что содержимое одинаково. При проверке в данной сессии было обнаружено,
что оба репозитория указывают на один и тот же коммит:
```
3dc39ddc20648b15e1f154d5e0b238ccf9789ba0
```
Команды для проверки соответствия и синхронизации:
- Проверить текущий git-HEAD локально и на удалённой машине:
```bash
git -C /home/naeel/remote_dev/sless rev-parse HEAD
ssh naeel@serv 'git -C /home/naeel/dev/sless rev-parse HEAD'
```
- Сравнить списки файлов (локально собрать и получить с удалённой):
```bash
find /home/naeel/remote_dev/sless -type f | sort > /tmp/files_local_sless.txt
ssh naeel@serv 'find /home/naeel/dev/sless -type f | sort' > /tmp/files_remote_sless.txt
diff -u /tmp/files_local_sless.txt /tmp/files_remote_sless.txt | less
```
- Быстрая проверка синхронизации через `rsync` (dry-run):
```bash
rsync -av --dry-run --delete /home/naeel/remote_dev/sless/ naeel@serv:/home/naeel/dev/sless/
```
Если хэши совпадают, репозитории находятся в одном состоянии на уровне коммита. Если нужно, могу
запустить подробный `diff` или предложить команды для синхронизации (rsync/пуш/клонирование).