From 07171b46b78b1cdad1856c1e1c8eeb1c3d885310 Mon Sep 17 00:00:00 2001 From: Maciej Pienczyn Date: Thu, 15 Jan 2026 07:35:05 +0100 Subject: [PATCH] =?UTF-8?q?docs:=20Raport=20incydentu=20CPU=20+=20ostrze?= =?UTF-8?q?=C5=BCenia=20o=20uruchamianiu=20skrypt=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dodano INCIDENT_REPORT_20260115.md dokumentujący incydent wysokiego CPU spowodowany wielokrotnym uruchomieniem skryptu - Dodano ostrzeżenia do CLAUDE.md o uruchamianiu skryptów: - SSH timeout NIE oznacza nieudanego wykonania - Sprawdzaj procesy przed ponownym uruchomieniem - Używaj QEMU guest agent jako alternatywy Co-Authored-By: Claude Opus 4.5 --- CLAUDE.md | 10 +++- docs/INCIDENT_REPORT_20260115.md | 100 +++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 docs/INCIDENT_REPORT_20260115.md diff --git a/CLAUDE.md b/CLAUDE.md index 493269d..defd23a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,7 +27,8 @@ nordabiz/ ├── scripts/ # Narzędzia Node.js └── docs/ # Dokumentacja ├── architecture/ # Architektura systemu (diagramy, przepływy) - └── INCIDENT_REPORT_20260102.md + ├── INCIDENT_REPORT_20260102.md + └── INCIDENT_REPORT_20260115.md ``` ## Dokumentacja architektury @@ -95,6 +96,13 @@ Kompletna dokumentacja architektury systemu dostępna w katalogu `docs/architect - Brave Search: 2,000 req/miesiąc - Szczegóły: [06-external-integrations.md](docs/architecture/06-external-integrations.md) +**Uruchamianie skryptów na produkcji (KRYTYCZNE!):** +- SSH timeout NIE oznacza że komenda nie została wykonana! +- ZAWSZE sprawdź czy poprzedni proces nie działa przed ponowną próbą: `ps aux | grep ` +- Dla długich operacji używaj `nohup` lub `screen` +- Przy problemach z SSH użyj QEMU guest agent: `ssh root@10.22.68.123 "qm guest exec 249 -- "` +- Incydent: [INCIDENT_REPORT_20260115.md](docs/INCIDENT_REPORT_20260115.md) + ## Technologie | Warstwa | Technologia | diff --git a/docs/INCIDENT_REPORT_20260115.md b/docs/INCIDENT_REPORT_20260115.md new file mode 100644 index 0000000..49da432 --- /dev/null +++ b/docs/INCIDENT_REPORT_20260115.md @@ -0,0 +1,100 @@ +# Raport incydentu - 2026-01-15 + +## Podsumowanie + +| Parametr | Wartość | +|----------|---------| +| **Data/Czas** | 2026-01-15, ~06:20-06:42 UTC | +| **Czas trwania** | ~22 minuty | +| **Serwer** | NORDABIZ-01 (VM 249, 10.22.68.249) | +| **Wpływ** | Wysokie CPU (85%+), spowolnienie SSH | +| **Status** | Rozwiązany | + +## Opis zdarzenia + +### Chronologia + +1. **06:20** - Pierwsza próba uruchomienia skryptu `fix_google_news_images.py` przez SSH +2. **06:26** - Druga próba (timeout SSH, ale proces się uruchomił) +3. **06:30** - Trzecia próba (timeout SSH, kolejny proces) +4. **06:39** - Alert Zabbix: CPU VM 249 > 85% przez 5 minut +5. **06:41** - Diagnostyka przez QEMU guest agent +6. **06:42** - Procesy zabite, system wraca do normy + +### Przyczyna + +SSH timeout do serwera NORDABIZ-01 nie oznaczał, że komendy nie zostały wykonane. Procesy uruchomiły się na serwerze, ale odpowiedź SSH nie wróciła do klienta (timeout during banner exchange). + +W efekcie uruchomiono 3 instancje skryptu `fix_google_news_images.py`: + +| PID | CPU | RAM | Start | +|-----|-----|-----|-------| +| 1005812 | 34.8% | 33% | 06:20 | +| 1006003 | 30.9% | 26% | 06:26 | +| 1006162 | 24.6% | 21% | 06:30 | + +**Łącznie: ~90% CPU, ~80% RAM** + +### Objawy + +- SSH timeout (Connection timed out during banner exchange) +- Zabbix alert: CPU > 85% przez 5 minut +- Potencjalne spowolnienie strony (nie potwierdzone - health check działał) + +## Rozwiązanie + +1. Diagnostyka przez SSH do Proxmox (10.22.68.123) +2. Użycie QEMU guest agent do sprawdzenia procesów: `qm guest exec 249 -- ps aux` +3. Zabicie procesów: `qm guest exec 249 -- pkill -f 'fix_google_news_images.py'` +4. Weryfikacja powrotu do normy + +## Wnioski i działania zapobiegawcze + +### Problem 1: SSH timeout nie oznacza nieudanego wykonania + +**Ryzyko:** Przy timeout SSH, komenda może zostać wykonana ale odpowiedź nie wraca. + +**Rozwiązanie:** +- Zawsze sprawdzaj czy poprzedni proces nie działa przed ponowną próbą +- Używaj `nohup` lub `screen` dla długich operacji +- Przed ponownym uruchomieniem sprawdź `ps aux | grep ` + +### Problem 2: Brak bezpośredniego dostępu SSH do VM 249 + +**Przyczyna nieustalona:** SSH timeout during banner exchange mimo otwartego portu 22. + +**Możliwe przyczyny:** +- Obciążenie CPU uniemożliwiło odpowiedź sshd +- Problem z konfiguracją sshd po hardeningu +- Ograniczenia firewall na poziomie VM + +**Do zbadania:** +- Sprawdzić logi sshd na VM 249 +- Zweryfikować konfigurację `/etc/ssh/sshd_config` +- Sprawdzić czy fail2ban nie blokuje IP + +### Problem 3: Brak alternatywnego dostępu + +**Rozwiązanie wdrożone:** Użycie QEMU guest agent przez Proxmox API + +**Komenda diagnostyczna:** +```bash +ssh root@10.22.68.123 "qm guest exec 249 -- " +``` + +## Akcje do wykonania + +- [x] Zabić procesy obciążające CPU +- [x] Zweryfikować działanie strony +- [x] Utworzyć raport incydentu +- [ ] Zbadać dlaczego SSH nie działa bezpośrednio +- [ ] Dodać ostrzeżenia do CLAUDE.md +- [ ] Uruchomić skrypt poprawnie (jedna instancja) + +## Kontakt + +- **Zabbix Dashboard:** https://zabbix4norda.inpi.pl/zabbix/ +- **Proxmox:** https://10.22.68.123:8006/ + +--- +*Raport wygenerowany: 2026-01-15 06:45 UTC*