Jak przekazywać opóźnienia przetwarzania oparte na kolejce nietechnicznym członkom zespołu?

13

Jestem odpowiedzialny za zestaw zadań przetwarzania kolejek SQS z polityką skalowania w ApproximateNumberOfMessagesVisiblemetodzie CloudWatch. Zadania te mogą nie nadążyć za liczbą wysłanych wiadomości z wielu powodów:

  • Degradacja usług zmniejsza pojemność wiadomości, które można przetwarzać.
  • AutoScaling osiągnięto maksymalny limit, a głębokość kolejki nadal rośnie.
  • Awaria S3 wpływa na inne zależne usługi AWS ( AutoScalingusługi), których używa zadanie przetwarzania kolejki, aby nadążyć za popytem.

Omawiając awarie z nietechnicznymi członkami zespołu, chciałbym poinformować o konkretnych opóźnieniach przetwarzania kolejek, które mogą przełożyć się na widoczne dla klientów pogorszenie. Jak mogę to zrobić za pomocą kolejek SQS?

Anthony Neace
źródło

Odpowiedzi:

15

Podobnie jak w przypadku każdej komunikacji dotyczącej awarii, czytelnik nietechniczny będzie przede wszystkim chciał zrozumieć:

  • Jak długie to było?
  • Jak źle było?

Metryki Amazon CloudWatch zapewniają następujące metryki dla kolejek SQS, które mogą pomóc odpowiedzieć na te pytania:

  • NumberOfMessagesSent: liczba wiadomości dodanych do kolejki.
  • NumberOfMessagesReceived: liczba komunikatów zwracanych przez wywołania akcji API ReceiveMessage.
  • ApproximateNumberOfMessagesVisible: liczba komunikatów dostępnych do pobrania z kolejki.

Po prawidłowym wykreśleniu wskaźniki te mogą być skutecznymi pomocnikami wizualnymi w opisywaniu opóźnień w przetwarzaniu kolejek. Oto kilka przykładów z awarii, której doświadczyłem, gdy zdolność zadania do przetwarzania komunikatów w kolejce została poważnie ograniczona:

NumberOfMessagesSent & NumberOfMessagesReceived

  • Typ wykresu: Wykres liniowy
  • Statystyka: Suma
  • Okres: 5 minut

NumberOfMessagesSent & NumberOfMessagesReceived

Pokazuje wykres kontrastu między wiadomościami wysyłanymi i odbieranymi, co pomaga w określeniu, który składnik przetwarzania jest odpowiedzialny za opóźnienie. Na tym wykresie odebrane dane dramatycznie spadają, podczas gdy wysłane dane kontynuują normalny trend, więc możemy wywnioskować, że problem leży w składniku odczytu kolejki zamiast w komponencie zapisu w kolejce.

Czy to odpowiada, jak długo / jak złe było wydarzenie? Tak; opisuje procesy, na które wpływa czas.

NumberOfMessagesReceived & ApproximateNumberOfMessagesVisible

  • Typ wykresu: Wykres warstwowy
  • Statystyka: Suma
  • Okres: 5 minut

NumberOfMessagesReceived & ApproximateNumberOfMessagesVisible

To pokazuje głębokość kolejki na podstawie odebranych wiadomości, co pomaga pokazać, jak daleko utworzono kopię zapasową kolejki i jak ją odzyskała. Na tym wykresie możemy zobaczyć, że głębokość kolejki gwałtownie się cofnęła, gdy wystąpił problem z komponentem do czytania w kolejce, i zaczęła się ona odzyskiwać, gdy komponent do czytania w kolejce ponownie zaczął czytać wiadomości.

Czy to odpowiada, jak długo / jak złe było wydarzenie? Tak; opisuje wiadomości, na które wpłynął upływ czasu.


Graficzna dyskusja

Na obu wykresach przetwarzanie kolejki można ogólnie uznać za zdrowe, gdy linie się nakładają, i niezdrowe, gdy linie się rozchodzą. Jest to prosty wzór do nauczenia dla nietechnicznego członka zespołu i może pomóc w szybkim rozróżnieniu, gdzie i jak występują problemy, gdy są przedstawione na tych wykresach.

Aby dalej komunikować określone punkty na wykresach, wystarczy je opatrzyć adnotacjami:

Oba poprzednie wykresy z adnotacjami.

Wskazówki dotyczące wykresów:

  • Oznacz jednostki i osie.
  • Używaj spójnych kolorów do dopasowywania wskaźników na wykresach. Zauważ, że NumberOfMessagesReceived ma kolor pomarańczowy na obu wykresach; Pomoże to zwizualizować tę samą metrykę na różnych wykresach.
  • Wyrównaj w pionie wykresy opisujące podobne metryki, aby łatwiej było je porównywać w czasie.

Uwaga: Sformatowałem te wykresy do prezentacji na StackExchange, więc niekoniecznie tak przedstawiłbym je w sekcji zwłok. W tym miejscu wyraźnie usunąłem wartości z lewej osi, aby ukryć je w StackExchange; będziesz chciał zatrzymać ich w sekcji zwłok.


Dodatkowe wskazówki

  • Wzmocnij swój zespół: po przeszkoleniu członków zespołu do czytania tych wykresów, nie ma powodu, aby ukrywać ich. Zastanów się nad utworzeniem pulpitu nawigacyjnego CloudWatch i zapewnieniem swoim nietechnicznym członkom zespołu dostępu do usługi IAM tylko do odczytu do CloudWatch , aby mogli oni oglądać te wykresy w dowolnym momencie.
  • Konfigurowanie powiadomień: rozważ skonfigurowanie alarmów Cloudwatch na podstawie metryki ApproximateNumberOfMessagesVisible, jeśli przekracza ona pewną uzgodnioną wysoką wartość, i zasubskrybuj członków zespołu, aby powiadomić ich o potencjalnych problemach. Alarmy w Cloudwatch mają pola opisu, które są wysyłane wraz z e-mailami z powiadomieniami - pamiętaj o dołączeniu czytelnego dla człowieka opisu, aby pomóc członkom nietechnicznym w rozpowszechnieniu alarmu.
  • Przeglądaj inne dane: według komentarza Evgeny , eksploruj inne dane poza tym, co zapewnia CloudWatch, i zastanów się, jak możesz przekazać te dane swojemu zespołowi. Jego przykład użycia czasu życia wiadomości w kolejce do utworzenia histogramu jest doskonałym przykładem tego kreatywnego myślenia i można to osiągnąć, rejestrując zarówno czasy wysłania, jak i odebrania wiadomości w aplikacji. Komunikat Znacznik czasu wysłania można uzyskać za pomocą atrybutu SentTimeStamp na każdej kolejce komunikatu interfejsu API ReceiveMessage. Więcej informacji tutaj .
Anthony Neace
źródło
1
Bardzo przydatne jest również przeglądanie danych z różnych punktów widzenia, nie tylko tych dostarczanych przez CloudWatch. Na przykład, jeśli możesz pokazać histogram, jak długo każda wiadomość pozostaje w kolejce, pokazując, że niektóre wiadomości pozostają przez X, a inne przez X * 2. A podczas przestojów histogram przesuwa swoje wysokie punkty w kierunku X * 4 lub czegoś ... niezwykle potężnego do zobaczenia.
Evgeny
4
Ponadto, chcę tylko powiedzieć: to jedna absolutnie niesamowita odpowiedź.
Evgeny,
Dzięki @Evgeny! To świetny pomysł i na tej podstawie dodałem kolejną wskazówkę, z podziękowaniem dla twojego komentarza.
Anthony Neace,