Początek roku 2023 zaczął się od jednej z największych awarii Sertum, z jakimi mieliśmy do czynienia w ostatnich latach. Awaria objawiała się praktycznie 100% obciążeniem procesorów na serwerach Azure, na których działa Sertum i to niezależnie od ilości instancji oraz mocy serwerów. Powodowało to, że część wywołań aplikacji kończyła się błędem (timeoutem – zapytanie użytkownika nie zostało wykonane w założonym czasie).
Jak widać na powyższym wykresie, problemy zaczęły się już w poniedziałek rano, kiedy większość aptek została uruchomiona (czyli jeszcze przed aktualizacją systemu, która miała miejsce w nocy z poniedziałku na wtorek). To czego nie widać na tym wykresie to zmiany mocy obliczeniowej oraz liczby maszyn, na których działa Sertum. W poniedziałek Sertum pracowało jeszcze na 2 instancjach. We wtorek kiedy Sertum działało z dużymi utrudnieniami, zwiększyliśmy ich liczbę do 16 (rozłożone na 3 kopie), przechodząc na najmocniejsze maszyny dostępne w Azure.
Zwiększenie mocy i liczby maszyn, nie poprawiało działania Sertum. Padło podejrzenie na wersję, która została wydana w poniedziałek w nocy, więc podjęliśmy decyzję o jej wycofaniu. Wycofanie wersji także nie poprawiło sytuacji.
Sprawa wyglądała bardzo dziwnie. Nie wiadomo z jakich przyczyn, nasze serwery pracowały wolno za to serwery SQL’a się nudziły. Przez ponad 25 godzin (poniedziałek – wtorek) siedzieliśmy przy komputerach i szukaliśmy przyczyny. Wyłączaliśmy poszczególne serwisy, rekonfigurowaliśmy usługi i zmienialiśmy moc serwerów, a hotline odbierał telefony od użytkowników (z aptek oraz hurtowni). Im więcej nad tym siedzieliśmy tym coraz bardziej utwierdzaliśmy się w przekonaniu, że to nie jest problem po naszej stronie. W takich sytuacjach zazwyczaj pomagała zmiana rozmiaru maszyny (wtedy Azure przerzuca nasz serwer do innego kontenera, który ma więcej wolnej mocy obliczeniowej) – niestety nie tym razem 😭. Dziwne także było to, iż Azure nie raportował problemów po swojej stronie.
We wtorek około południa postanowiliśmy się skontaktować z Microsoft Polska, w celu ustalenia czy coś się dzieje w Azure i czy mają więcej zgłoszeń od innych klientów. Microsoft zasugerował założenie incydentu i odezwanie się bezpośrednio do inżynierów Azure.
Od godziny 14:00 mieliśmy już kontakt z inżynierem Azure z Dublina, z którym pracowaliśmy do godziny 18:00 nad rozwiązaniem problemu. Robiliśmy zrzuty pamięci instancji serwera, analizowaliśmy logi i wyniki były sprzeczne. Wszystko wskazywało na to, że na serwerze generuje się ogromna liczba wątków, które nie mogą się zamknąć, ponieważ nie odpowiada SQL (który się nudzi i nic nie robi). W pewnym momencie inżynier Azure stwierdził, że mamy bardzo dużo wyjątków w usłudze Aplication Insights (https://azure.microsoft.com/en-us/products/monitor). Jest to usługa firmy Microsoft wbudowana w Azure posiadająca agenta, który odpowiada za zbieranie danych, potrzebnych do analizy i monitorowania sposobu działania aplikacji (takie bardzo, bardzo zaawansowane logi). Jak to Pan z Azure stwierdził: “Gdzieś to kiedyś, u jakiegoś klienta już widziałem. Wyłączmy agenta, być może jest uszkodzony” 🤨No i to okazało się właściwą decyzją. Wyłączenie agenta usługi Aplication Insight rozwiązało problem od ręki.
Okazuje się, że bardzo rzadko, ale jednak czasami ten agent się buntuje i zaczyna żyć własnym życiem (coś jak Agent Smith z filmu Matrix 😀), generując przy tym dużo komunikatów i pożerając zasoby maszyny oraz sieci na której działa. Prawdopodobnie to miało także wpływ na nasze pozostałe kopie serwerów (w sumie we wtorek to mieliśmy już uruchomione 3 kopie serwerów o łącznej liczbie możliwych instancji: 16).
Ogólnie inżynier Azure podsumował to w ten sposób:
Ogólnie to co się wydarzyło, to strasznie rzadki przypadek. Zbiegł się on z naszym wydaniem wersji, chociaż z analizy logów wynika, że Agent zaczął przejmować kontrolę już w poniedziałek rano. Tylko dzięki zwiększaniu liczby instancji, sytuacja nie była od razu odczuwalna.
Teraz musimy wraz z Microsoft ustalić, co dokładnie się stało i określić co trzeba zrobić, aby taka sytuacja jak ta nie miała miejsca w przyszłości – być może trzeba obudzić wybrańca 😀
W tym miejscu chciałbym podziękować naszym wszystkim klientom za wyrozumiałość. Pracowaliśmy ile się dało, aby ten problem rozwiązać jak najszybciej. No i udało się.
Jak zwykle nie poddajemy się i walczymy do końca.
Seweryn.
12 stycznia 2023 o 17:53
Kolejne doświadczenie… zwłaszcza lekcja cierpliwości za nami 😛