Archifutura / Aeneia

Utrzymanie aplikacji

Ślady, metryki i logi: jak znaleźć źródło opóźnienia w aplikacji

Dowiedz się, jak łączyć metryki, ślady i logi, by diagnozować opóźnienia aplikacji, a przy tym chronić dane użytkowników.

Tworzyliśmy rozwiązania dla

  • L'Oréal
  • Garnier
  • Netflix
  • Carrefour
  • Warner Bros. Discovery
  • Biedronka
  • HBO Max
  • Wolt
  • Żabka
  • COSRX
  • Mixa
  • Ambasada Chin w Polsce

Doświadczenie Aeneia, firmy stojącej za Archifutura.

Pracownik zgłasza, że zatwierdzenie dokumentu trwa długo. Inna osoba odpowiada, że u niej wszystko działa. Serwer nie zgłasza awarii, a na wykresie średni czas odpowiedzi wygląda zwyczajnie. Bez dodatkowych informacji trudno ustalić, czy problem dotyczy przeglądarki, samej aplikacji, bazy danych, czy usługi zewnętrznej.

W takim dochodzeniu pomagają trzy rodzaje sygnałów: metryki, logi i ślady. Pierwsze pokazują zmiany w liczbach, drugie zapisują wybrane zdarzenia, trzecie pomagają odtworzyć drogę konkretnej operacji przez system. Każdy sygnał ma ograniczenia. Warto korzystać z nich razem, zaczynając od pytania, co przeżył użytkownik.

Przykłady w tym artykule są hipotetyczne. Sposób pomiaru i dostępność danych zależą od budowy konkretnej aplikacji oraz narzędzi. Nie zakładamy, że każdą przyczynę da się wskazać na podstawie jednego wykresu.

Zacznij od drogi użytkownika

Opis „aplikacja działa wolno” jest początkiem rozmowy, nie diagnozą. Zapytajcie, jaki ekran i zadanie sprawia trudność, kiedy pojawił się problem oraz czy dotyczy pojedynczej sprawy, grupy użytkowników czy wszystkich. Pomocny może być identyfikator zgłoszenia lub przybliżony czas zdarzenia. Nie proście o hasło, treść poufnego dokumentu ani zrzut z niepotrzebnymi danymi.

W hipotetycznym panelu zakupowym użytkownik wybiera zamówienie i naciska przycisk zatwierdzenia. Wrażenie oczekiwania obejmuje kilka etapów: działanie przeglądarki, przesłanie żądania, pracę serwera oraz odpowiedź. Sam pomiar czasu na serwerze może nie pokazać opóźnienia w ładowaniu strony albo przesyłaniu dużego pliku. Najpierw ustalcie, jaki odcinek naprawdę mierzycie.

Warto opisać również oczekiwany rezultat: dokument został zapisany i pojawił się status, czy także dotarło powiadomienie do kolejnej osoby? W monitorowaniu automatyzacji problem może wystąpić po pozornie udanym kliknięciu, gdy zadanie czeka jeszcze na obsługę przez inny system.

Kontekst przydaje się przed analizą wykresów. Jeśli operacja jest wolna tylko przy konkretnym typie dokumentu, sprawdzicie inne zależności niż wtedy, gdy wszystkie ekrany przestają odpowiadać. Zapiszcie hipotezę i warunki jej sprawdzenia, ale nie traktujcie pierwszego podejrzenia jako ustalonej przyczyny.

Przy zbieraniu zgłoszenia zapytajcie także, czy podobne zadanie zakończyło się poprawnie wcześniej i czy dostępne jest bezpieczne środowisko do powtórzenia próby. Ta informacja pomaga dobrać kolejny pomiar bez niepotrzebnego wykonywania operacji na rzeczywistych danych.

Metryki pokazują zmianę w czasie

Metryka to pomiar opisany liczbą i kontekstem, na przykład liczba zakończonych żądań albo rozkład ich czasu. Porównanie kolejnych okresów może pokazać, od kiedy wzrosło opóźnienie i czy towarzyszą mu błędy. Przydatna bywa także liczba operacji oczekujących w kolejce, jeśli system rzeczywiście z niej korzysta.

Średnia potrafi ukryć problem dotyczący części użytkowników. Jeżeli większość operacji kończy się szybko, a niewielka część czeka znacznie dłużej, sam średni wynik może wyglądać spokojnie. Dlatego obok niego warto oglądać rozkład czasów i liczbę pomiarów. Wynik z kilku prób nie daje takiego samego obrazu jak dane z reprezentatywnego okresu.

Każdy pomiar wymaga opisu: od jakiego do jakiego momentu jest liczony, jakich operacji dotyczy oraz czy obejmuje błędy. Porównanie dwóch wykresów o różnych definicjach może prowadzić do błędnego wniosku. Przed ustawieniem alarmu ustalcie też, kto go odbiera i jakie działanie ma podjąć. Powiadomienie bez właściciela nie skraca czasu reakcji.

Nie każda liczba potrzebuje osobnego wykresu. Zacznijcie od najważniejszych ścieżek, takich jak zapis zgłoszenia czy pobranie raportu, a następnie dodawajcie pomiary odpowiadające na konkretne pytania. Przy planowaniu utrzymania systemu AI podobnie trzeba ustalić, co rzeczywiście warto obserwować i kto korzysta z tych informacji.

Logi opisują wybrane zdarzenia

Log jest zapisem zdarzenia, na przykład nieudanej próby połączenia z usługą albo zakończenia przetwarzania zadania. Przy diagnozie przydają się czas, nazwa operacji, wynik i identyfikator pozwalający połączyć zapis z odpowiednią sprawą. Format powinien umożliwiać wyszukiwanie bez ręcznego przeglądania niepowiązanych komunikatów.

Więcej tekstu nie zawsze oznacza więcej wiedzy. Komunikat „błąd” nic nie mówi o etapie pracy, natomiast pełna treść żądania może zawierać dane osobowe albo poufne informacje. OWASP zaleca świadomie wybierać, co zapisywać i czego nie umieszczać w logach. Zakres zależy od ryzyka, celu diagnostycznego i zasad organizacji.

Nie zapisujcie haseł ani kluczy dostępowych. Zastanówcie się także, czy potrzebny jest adres e-mail, treść formularza lub cały dokument. Często do wyszukania operacji wystarczy techniczny identyfikator. Dostęp do logów powinien być ograniczony, a czas ich przechowywania uzgodniony z osobami odpowiedzialnymi za dane i utrzymanie.

W tekście o przekazaniu kodu i utrzymaniu opisujemy potrzebę uporządkowania dostępu oraz dokumentacji. Dotyczy to także miejsca przechowywania logów, sposobu ich przeszukiwania i osoby kontaktowej, gdy sygnałów brakuje lub są nieczytelne.

Ślad pokazuje przebieg jednej operacji

Ślad opisuje drogę konkretnego żądania przez fragmenty systemu. Może obejmować na przykład przyjęcie żądania przez aplikację, odczyt danych oraz wywołanie zewnętrznej usługi. Poszczególne odcinki pokazują czas i powiązanie z większą operacją. Dzięki temu zespół może zobaczyć, gdzie spędzono najwięcej czasu w konkretnym przypadku.

Załóżmy, że zatwierdzenie trwało osiem sekund. Ślad wskazuje, że część aplikacyjna zakończyła pracę szybko, a większość czasu zajęło oczekiwanie na odpowiedź usługi zewnętrznej. To wskazówka do dalszej analizy, nie dowód, że winę ponosi dostawca. Trzeba sprawdzić moment wysłania, warunki sieci oraz to, czy żądanie miało prawidłową postać.

Jeżeli system przekazuje zadanie do kolejki i wraca z odpowiedzią przed zakończeniem pracy, trzeba oddzielnie mierzyć przyjęcie zadania oraz czas do uzyskania końcowego wyniku. Inaczej szybka odpowiedź serwera może ukryć długie oczekiwanie na raport. W integracjach API i webhookach takie rozróżnienie pomaga opisać odpowiedzialność poszczególnych systemów.

Ślady również mogą być niepełne. Nie każdy dostawca przekazuje informacje diagnostyczne dalej, a system może zapisywać tylko część operacji. Brak fragmentu nie oznacza automatycznie, że dany etap trwał zero sekund. Dokumentujcie granice pomiaru i sprawdzajcie, co faktycznie obejmuje obserwowany ślad.

Połącz sygnały w jedno dochodzenie

Zacznijcie od zgłoszenia: użytkownik wskazał godzinę i numer sprawy. Metryki pokazują, że w tym okresie wzrósł czas zatwierdzania części dokumentów. Następnie zespół odnajduje odpowiadający operacji ślad i sprawdza długi etap. Log z tego samego przepływu może wskazać, że aplikacja kilkukrotnie oczekiwała na odpowiedź usługi. Dopiero po zestawieniu informacji warto sprawdzać konkretną hipotezę.

Identyfikator żądania pomaga powiązać wpisy. Powinien być generowany i przekazywany w uzgodniony sposób, bez ujawniania informacji o użytkowniku w samym identyfikatorze. Przy zadaniu wykonywanym później może być potrzebne dodatkowe powiązanie z pierwotnym zgłoszeniem. Jeśli jedna część systemu nie zachowuje tego kontekstu, poszukiwanie może urwać się na granicy integracji.

Odróżniajcie pojedynczy przypadek od problemu systemowego. Jeden ślad może pokazać przyczynę konkretnego opóźnienia, ale nie dowodzi, że wszystkie wolne operacje mają to samo źródło. Sprawdźcie inne przykłady oraz metryki z tego okresu. Jeśli dane są niewystarczające, zapiszcie brak i zdecydujcie, jaki dodatkowy pomiar jest uzasadniony.

Tę samą ostrożność warto zachować przy przejściu od pilota AI do produkcji. Opóźnienie może pojawić się przy pobieraniu dokumentów, wywołaniu modelu albo dalszym przetwarzaniu. Bez pomiaru granic poszczególnych etapów trudno powiedzieć, który element wymaga poprawy.

Gdy analiza potwierdzi problem z wymianą danych, zespołowi potrzebna będzie również procedura dalszych działań. Przykładowe decyzje omawiamy w instrukcji na wypadek awarii integracji.

Jak zaprojektować alarm, który pomaga

Alarm powinien wskazywać problem wymagający decyzji, a nie tylko informować, że wykres się poruszył. Jeżeli panel raportów jest używany głównie rano, pojedynczy wolny odczyt w nocy może nie wymagać natychmiastowego budzenia zespołu. Dłuższa niedostępność funkcji przyjmowania zamówień ma inny wpływ i może wymagać szybkiej reakcji.

Ustalcie właściciela każdego alarmu, sposób przekazania zastępstwa oraz miejsce, w którym opisano pierwsze kroki. W komunikacie przydaje się nazwa operacji, czas i odnośnik do odpowiedniego widoku diagnostycznego. Nie należy zamieszczać w nim danych klienta tylko dlatego, że wiadomość trafia do wewnętrznego kanału.

Po wprowadzeniu alarmów sprawdźcie ich zachowanie w kontrolowanym teście. Czy osoba dyżurna otrzymała sygnał? Czy rozumie, co on oznacza? Czy może znaleźć instrukcję i przekazać sprawę dalej? Jeżeli alert pojawia się często, a nie prowadzi do żadnego działania, warto przejrzeć jego warunki. Nadmiar powiadomień może sprawić, że ważny sygnał zginie wśród pozostałych.

Przed poprawką zachowaj punkt odniesienia

Gdy zespół znajdzie prawdopodobne źródło opóźnienia, zapiszcie warunki pomiaru przed zmianą. Wybierzcie porównywalną operację, zakres czasu i sposób liczenia. Po poprawce sprawdźcie ten sam odcinek oraz wpływ na błędy. Szybsza odpowiedź nie jest sukcesem, jeśli system pomija część wymaganych czynności.

Uważajcie na wpływ otoczenia. W innym dniu może pojawić się inna liczba użytkowników, większy dokument albo wolniejsza usługa zewnętrzna. Dlatego pojedyncza szybka próba po wdrożeniu nie dowodzi trwałej poprawy dla wszystkich. Zapiszcie, co zostało sprawdzone, jakie dane porównano i czego nadal nie wiadomo.

Jeśli poprawka zmienia sposób pobierania danych albo komunikacji z dostawcą, sprawdźcie również rezultat biznesowy. W panelu zamówień liczy się poprawny stan zamówienia, nie tylko czas odpowiedzi. Pomiary techniczne i kontrola efektu przez osobę znającą proces uzupełniają się podczas odbioru.

Odpowiedzialność za dalszą obserwację trzeba przekazać konkretnej osobie lub zespołowi. Ustalcie, kiedy należy wrócić do wyników i jak zgłosić nawrót problemu. Instrukcja powinna podawać nazwę operacji oraz miejsca pomiaru, żeby kolejna osoba nie musiała odtwarzać całego dochodzenia od początku.

Warto też sprawdzić, czy porównywane operacje obejmują te same grupy użytkowników i dane. Inaczej pozorna poprawa może wynikać ze zmiany rodzaju zadań, a nie z poprawki. Jeśli reprezentatywne dane nie są dostępne, nazwijcie to ograniczenie i umówcie kolejny przegląd po zebraniu odpowiednich pomiarów.

Sprawdź pomiary przed uznaniem ich za wiarygodne

Zegar na różnych urządzeniach może być ustawiony inaczej, a niektóre zdarzenia docierają do narzędzia z opóźnieniem. Uzgodnijcie strefy czasowe, sposób prezentacji i pochodzenie znacznika czasu. Zapis „o 10:15” ma sens dopiero wtedy, gdy wiadomo, do której strefy się odnosi i czy opisuje wykonanie operacji, czy jej późniejsze zapisanie.

Przy testach użyjcie danych, które można bezpiecznie wykorzystać do diagnozy. Wywołajcie przykładową operację, znajdźcie jej identyfikator, sprawdźcie odpowiednie logi i ślad oraz porównajcie je z zachowaniem na ekranie. Jeśli jeden element nie jest dostępny, zapiszcie ograniczenie zamiast uznawać cały proces za zweryfikowany.

W kryteriach odbioru aplikacji można określić, jakie ścieżki mają być mierzone oraz kto sprawdza jakość danych. Nie trzeba od razu obserwować każdego kliknięcia. Większą wartość daje kilka wiarygodnych pomiarów dla istotnych zadań niż rozbudowany zestaw wykresów bez właściciela.

Jeśli planujesz rozwój aplikacji dla swojej firmy, wyślij krótki brief: opisz zadanie, w którym pojawia się opóźnienie, używane systemy i dostępne informacje. Wspólnie łatwiej ustalić, co trzeba najpierw zmierzyć, zanim zapadnie decyzja o zmianie kodu.

Źródła i dokumentacja

Materiały sprawdzone przy opracowaniu tekstu. Przy wyborze usługi lub technologii potwierdzamy warunki dla konkretnego projektu.

Kiedy potrzebujesz spojrzeć szerzej

Projekt nie kończy się na kodzie.

Twój proces, Twój zakres

Sprawdźmy, co ma powstać w Twojej firmie.

Nie potrzebujesz gotowej specyfikacji. Opisz zadanie, obecne narzędzia i to, co dziś wymaga ręcznej pracy.

Opisz swój projekt

Narzędzia i integracje, z których korzystamy

  • Google
  • OpenAI
  • Microsoft
  • Stripe
  • Anthropic
  • Linear

Dobór technologii i dostępnych połączeń ustalamy dla konkretnego projektu.