Używanie Slacka do monitorowania aplikacji

Opublikowany: 2022-03-10
Szybkie podsumowanie ↬ Od kilku miesięcy buduję aplikację typu oprogramowanie jako usługa (SaaS) i przez cały proces rozwoju zdałem sobie sprawę, jak potężnym narzędziem może być Slack (lub ogólnie czat zespołowy) do monitorowania zachowania użytkowników i aplikacji. Po odrobinie integracji zapewnił widok w czasie rzeczywistym w naszej aplikacji, który wcześniej nie istniał, i był tak nieoceniony, że nie mogłem się powstrzymać od napisania tego „pokaż i opowiedz”.

Wszystko zaczęło się od wizyty w małym startupie w Denver w Kolorado. Podczas mojej wizyty co kilka minut zacząłem słyszeć subtelne i czarujące „ding” w kącie biura. Kiedy poszedłem zbadać ten dziwny dźwięk, znalazłem dzwonek serwisowy podłączony do Raspberry Pi z małym metalowym młotkiem podłączonym do płytki drukowanej. Jak się okazało, Pi odbierało wiadomości z serwera zespołu i uderzało małym młotkiem w dzwonek za każdym razem, gdy rejestrował się nowy klient .

Zawsze uważałem, że to świetny motywator zespołowy i skłoniło mnie to do myślenia o tym, jak wykorzystać czat zespołowy, aby osiągnąć podobne wrażenia oraz jak możemy analizować i wizualizować dane dziennika.

Ponieważ używaliśmy już Slacka do czatu zespołowego i ponieważ ma on pięknie udokumentowane API, był to oczywisty wybór do eksperymentu.

Dalsze czytanie na SmashingMag:

  • Interfejsy konwersacyjne: gdzie jesteśmy dzisiaj? Dokąd zmierzamy?
  • Współpraca zespołowa i zamykanie luk w wydajności w projektowaniu responsywnym
  • Co powinieneś wiedzieć o procesie projektowania aplikacji
  • Ruszaj na wyścigi: Pierwsze kroki w sprintach projektowych
Więcej po skoku! Kontynuuj czytanie poniżej ↓

Skonfiguruj Slack

Najpierw musieliśmy uzyskać „adres URL webhooka” ze Slacka, aby programowo publikować wiadomości na naszym kanale Slack.

Skonfiguruj Slack
Wykonaj powyższe kroki, aby uzyskać adres URL webhooka ze Slack (wyświetl dużą wersję)

Teraz, gdy mieliśmy już adres URL webhooka, nadszedł czas na zintegrowanie komunikatów Slack z naszą aplikacją Node.js. W tym celu znalazłem przydatny moduł Node.js o nazwie node-slack.

Najpierw zainstalowaliśmy moduł Node.js:

 npm install node-slack --save

Teraz moglibyśmy wysyłać wiadomości ze Slacka na wybrany przez nas kanał za pomocą kilku linijek kodu.

 // dependency setup var Slack = require('node-slack'); var hook_url = 'hook_url_goes_here'; var slack = new Slack(hook_url); // send a test Slack message slack.send({ text: ':rocket: Nice job, I\'m all set up!', channel: '#test', username: 'MyApp Bot' });

(Możesz znaleźć podobne pakiety integracyjne Slacka dla Ruby, Pythona i prawie każdego innego języka.)

Po wykonaniu ten kod wygenerował następujący komunikat w naszym kanale #test Slack:

Konfiguracja luzu

Powyższy kod jest minimalny, ale jest specyficzny dla interfejsu API Slack i modułu node-slack. Nie chciałem być zablokowany w żadnej konkretnej usłudze przesyłania wiadomości, więc stworzyłem ogólną funkcję modułu Node.js do wykonywania kodu specyficznego dla usługi:

 // Messenger.js // dependency setup var hook_url = my_hook_url; var Slack = require('node-slack'); var slack = new Slack(hook_url); module.exports = { sendMessage: function(message, channel, username) { if (!message){ console.log('Error: No message sent. You must define a message.') } else { // set defaults if username or channel is not passed in var channel = (typeof channel !== 'undefined') ? channel : "#general"; var username = (typeof username !== 'undefined') ? username : "MyApp"; // send the Slack message slack.send({ text: message, channel: channel, username: username }); return; } } };

Teraz możemy używać tego modułu w dowolnym miejscu aplikacji za pomocą dwóch linijek kodu, a jeśli w przyszłości zdecydujemy się na wysyłanie wiadomości do innej usługi, możemy to łatwo zamienić w Messenger.js.

 var messenger = require('./utilities/messenger'); messenger.sendMessage(':rocket: Nice job, I\'m all set up!', '#test');

Teraz, gdy mamy już skonfigurowane podstawy, byliśmy gotowi do uruchamiania komunikatów z poziomu aplikacji.

Śledź rejestracje

Pierwszym zadaniem było osiągnięcie parytetu usługi i dzwonka. Zlokalizowałem wywołanie zwrotne funkcji rejestracji użytkownika i dodałem ten kod:

 messenger.sendMessage('New user registration! ' + user.email);

Teraz, gdy ktoś się zarejestruje, otrzymamy tę wiadomość:

Nowa wiadomość użytkownika

Nawet dzwoni! To był dobry początek i dał mi to satysfakcjonujące uczucie dzwonka do służby, ale sprawiło, że byłem spragniony więcej.

Nurkuj głębiej

W miarę jak moja ciekawość rosła z każdym uderzeniem, zacząłem zastanawiać się nad takimi rzeczami, jak: A jeśli nie udało się utworzyć nowego użytkownika? Co się stanie, jeśli użytkownik zarejestrował się, zalogował, ale nie ukończył procesu dołączania? Jaki jest wynik naszych zaplanowanych zadań? Teraz, gdy fundamenty były gotowe, odpowiedzi na te pytania były bułką z masłem.

Monitoruj wyjątki i krytyczne błędy na zapleczu

Jednym z najważniejszych błędów, o których chcieliśmy wiedzieć, było to, czy nie udało się utworzyć nowego użytkownika. Wszystko, co musieliśmy zrobić, to znaleźć wywołanie zwrotne błędu w funkcji rejestracji użytkownika i dodać ten kod:

 messenger.sendMessage(':x: Error While adding a new user ' + formData.email + ' to the DB. Registration aborted!' + error.code + ' ' + error.message);

Teraz od razu wiedzieliśmy, kiedy rejestracje się nie powiodły, dlaczego się nie udało i, co ważniejsze, dla kogo się nie udało:

Błąd rejestracji użytkownika
(Wyświetl dużą wersję)

Było wiele ciekawych miejsc, w których mogliśmy wysyłać wiadomości (prawie wszędzie z błędem wywołania zwrotnego). Jednym z tych miejsc była ta ogólna funkcja catch-all error:

 app.use(function(err, req, res, next) { var message = ':x: Generic Server Error! '+ err + '\n Request: \n' + req.protocol + '://' + req.get('host') + req.originalUrl + '\n' + JSON.stringify(req.headers) + 'Request Payload:\n' + JSON.stringify(req.body); messenger.sendMessage(message, '#server-errors'); res.status(err.status || 500); res.json({'error': true }); });

Ten kod pomógł nam odkryć, jak wygląda żądanie dotyczące nieobsługiwanych wyjątków. Patrząc na żądanie, które wywołało te błędy, mogliśmy prześledzić główne przyczyny i naprawić je, dopóki nie będzie więcej ogólnych błędów.

Mając wszystkie te powiadomienia o błędach, mieliśmy teraz pociechę, wiedząc, że jeśli coś poważnego zawiedzie w aplikacji, dowiemy się o tym natychmiast.

Monitoruj finanse

Następnie chciałem wysłać powiadomienie, gdy w aplikacji wydarzy się zdarzenie finansowe. Ponieważ nasz produkt SaaS integruje się ze Stripe, stworzyliśmy punkt końcowy webhooka, który jest pingowany ze Stripe, gdy ludzie uaktualniają swój plan, obniżają swój plan, dodają informacje o płatnościach, zmieniają informacje o płatności i wiele innych zdarzeń związanych z płatnościami za subskrypcję, z których wszystkie są wysyłane do Luźny:

Wiadomość o płatności

Monitoruj zachowanie użytkownika w interfejsie użytkownika

W interfejsie było kilka przypadków, w których chcieliśmy zrozumieć zachowanie użytkowników w sposób, którego nie mógł zapewnić zaplecze, dlatego stworzyliśmy punkt końcowy do wysyłania wiadomości ze Slacka bezpośrednio z interfejsu. Ponieważ nasz adres URL webhooka Slack jest chroniony za punktem końcowym POST , ryzyko narażenia na wysyłanie wiadomości Slack do naszego zespołu za pośrednictwem punktu końcowego było minimalnym ryzykiem.

Z punktem końcowym na miejscu, moglibyśmy teraz uruchamiać wiadomości ze Slacka za pomocą prostego wywołania AngularJS $http.post :

 // send Slack notification from the front end var message = ":warning: Slack disconnected by " + $scope.user.username; $http.post('/endpoint', message);

Pomaga nam to odpowiedzieć na ważne pytania dotyczące firmy: Czy ludzie rejestrują się i dodają nazwę domeny? Czy nie są? Jeśli ktoś tak, to czy jest to domena naprawdę głośna, z właścicielem której chcielibyśmy osobiście skontaktować się wkrótce po jej dodaniu. Możemy teraz wykorzystać to:

Wiadomości użytkownika
(Wyświetl dużą wersję)

W pewnym momencie zobaczyliśmy wzorzec, w którym ludzie dodają domenę, usuwają ją, a następnie czytają ją w ciągu kilku minut, co naprowadziło nas na niejasny błąd, którego prawdopodobnie nigdy byśmy nie odkryli.

Istnieją również sygnały, że użytkownik jest niezadowolony z usługi i warto o nich wiedzieć. Czy ktoś usunął nazwę domeny? Czy odłączyli Slacka?

Wiadomości rozłączone przez użytkownika
(Wyświetl dużą wersję)

Ta opinia daje nam możliwość aktywnego nawiązania kontaktu i zaoferowania wspaniałej obsługi klienta, gdy jest to najważniejsze.

Monitoruj zaplanowane zadania

Jedną z najciekawszych rzeczy do zobaczenia w Slacku jest wynik zaplanowanych zadań. Nasz produkt SaaS uruchamia zadania powiadamiania ludzi o wydajności ich witryny (nasza usługa podstawowa), wysyłania e-maili transakcyjnych, czyszczenia bazy danych i kilku innych rzeczy. Strzelanie i wyniki tych zadań wysyłają wiadomość do Slacka:

Komunikaty zadań serwera
(Wyświetl dużą wersję)

Teraz wiemy, kiedy funkcja zadania uruchamia się, jaki jest wynik tej funkcji (w tym przypadku wysyła kilka e-maili) i czy z jakiegoś powodu się nie powiedzie.

Zastosuj tę koncepcję do swojej aplikacji

Powyższe studium przypadku jest praktycznym przykładem tego, co zrobiliśmy, aby monitorować aplikację i usługę GoFaster.io. Sprawdzało się to dla nas fantastycznie, ale jak ten koncept skaluje się do dużych aplikacji, które wysyłają setki, a może nawet tysiące wiadomości dziennie? Jak możesz sobie wyobrazić, szybko zamieniłoby się to w sytuację „Slackbot, który krzyczał wilka”, a wartość zniknęłaby w hałasie.

Nie traktuj wszystkich powiadomień jednakowo

Niektóre powiadomienia są ważniejsze niż inne, a ich znaczenie będzie się różnić w zależności od pracownika i jego roli. Na przykład ludzie zajmujący się tworzeniem oprogramowania i operacjami IT (DevOps) mogą dbać tylko o komunikaty serwera, podczas gdy ludzie z obsługi klienta będą najbardziej dbać o to, co dzieje się z użytkownikami.

Na szczęście Slack ma świetne rozwiązanie tego problemu: kanały .

Kanały mogą być tworzone przez każdego, upubliczniane lub prywatne w Twojej organizacji oraz udostępniane każdemu. Po zasubskrybowaniu kanału możesz kontrolować, w jaki sposób informacje o aktywności na tym kanale będą Cię ostrzegać. Czy nowa wiadomość na kanale dzwoni za każdym razem? Czy ostrzega też Twój telefon? Czy to tylko pogrubia kanał? Wszystko to może być kontrolowane dla każdego kanału przez każdego członka zespołu, zgodnie z jego potrzebami.

Wcielając ten pomysł w życie, oto jak większa organizacja może organizować powiadomienia oparte na monitorach w Slacku za pośrednictwem kanałów:

#Błędy-krytyczne-serwera

  • Co: błędy rejestracji, błędy logowania, błędy odczytu i zapisu bazy danych
  • Kto: administratorzy systemów, DevOps, CTO, CEO, developerzy
  • Ustawienia alertów: zawsze powiadamiaj na telefonie lub komputerze.

#Niekrytyczne-błędy serwera

  • Co: błędy 404, błędy serwera typu catch-all itp.
  • Kto: DevOps, programiści
  • Ustawienia alertów: pogrubiaj, ale nie rzucaj.

#Finansowy

  • Co: transakcje płatnicze, transakcje nieudane, uaktualnienia, obniżki, wygasłe karty
  • Kto: Dyrektor Finansowy, Dyrektor Generalny
  • Ustawienia alertów: spraw, by padało.

#Zachowanie użytkownika

  • Co: rejestracja, proces onboardingu, aktualizacja typu planu, dodawanie informacji, usuwanie informacji, usuwanie konta
  • Kto: obsługa klienta, menedżerowie mediów społecznościowych, programiści, CEO
  • Ustawienia alertów: zawsze powiadamiaj na telefonie lub komputerze.

#Statystyki aplikacji

  • Co: zaplanowane wyniki zadań, porządki, statystyki dotyczące transakcyjnych wiadomości e-mail, liczba użytkowników i wskaźniki wzrostu
  • Kto: marketerzy e-mailowi, administratorzy systemu, wszyscy zainteresowani
  • Ustawienia alertów: pogrubiaj, ale nie rzucaj.

Wniosek

Opierając się na tym pomyśle przez kilka miesięcy i przetrawiając wyniki, stwierdziliśmy, że jest to nieocenione rozszerzenie naszej aplikacji. Bez niej nie mielibyśmy kontaktu z tym, co dzieje się z usługą i musielibyśmy ręcznie wyszukiwać te same informacje za pośrednictwem pulpitu nawigacyjnego, lub zapytania do bazy danych byłyby uciążliwe.

Każda aplikacja i baza użytkowników jest inna, co oznacza, że ​​ta koncepcja nie może być wbudowana w usługę i oferowana masom. Aby być wartościowym, wymaga niewielkiej początkowej inwestycji czasu i zasobów w celu głębokiej integracji z Twoją aplikacją. Po uruchomieniu inwestycja zwróci się w postaci połączenia Twojego zespołu z Twoją aplikacją i jej użytkownikami.

Podsumowując, oto podsumowanie korzyści płynących z używania czatu zespołowego do monitorowania aplikacji:

Zyskaj nowe spojrzenie na zachowanie użytkowników i serwerów

Posiadanie w czasie rzeczywistym informacji o metrykach, które są najważniejsze dla Ciebie i Twojej firmy, zapewni Ci ścisły kontakt z tym, co robią użytkownicy i jak serwer reaguje.

Reaguj szybko, gdy coś zawodzi

Będziesz mógł zareagować szybciej niż kiedykolwiek wcześniej. Będziesz wiedział o awariach w tym samym czasie, co Twoi użytkownicy. Możesz natychmiast zareagować na awarię punktu końcowego, utratę połączenia z bazą danych lub atak DDoS.

Oferuj wyjątkową obsługę klienta

Skontaktuj się z klientem, który właśnie wyłączył swoje konto, aby zaoferować mu zniżkę, osobiście podziękować klientom, którzy dokonali aktualizacji, lub po prostu skontaktuj się z ludźmi, aby zrozumieć ich intencje. Kiedy wiesz, co robią użytkownicy i kiedy to robią, możesz łatwo dowiedzieć się, dlaczego.

Połączenie zespołu z aplikacją sprawi, że będziesz bardziej wydajny

Gdy Twój zespół znajduje się na tej samej stronie z aplikacją, współpraca może koncentrować się na rozwiązywaniu pojawiających się problemów, a nie na próbie ustalenia, co się stało, gdzie to się stało lub komu się to stało.

Powiadomienia i kanały mogą się skalować wraz z Twoją aplikacją

Wraz ze wzrostem Twojej aplikacji i zespołu rosną Twoje potrzeby w zakresie monitorowania. Slack wykonuje świetną robotę, zapewniając wszystkie uprawnienia i kontrole powiadomień niezbędne, aby zapewnić, że właściwe informacje trafią do właściwych osób.

Wyszukiwanie jest potężne

Rejestrując nazwę użytkownika w wiadomościach Slack, możesz śledzić każdy błąd, wiadomość o sukcesie lub zdarzenie wygenerowane przez użytkownika podczas interakcji z Twoją aplikacją, po prostu wyszukując jego nazwę użytkownika w Slack. Po prostu wiedz, że przy bezpłatnym koncie Slack jest to ograniczone do ostatnich 10 000 wiadomości.

Wyszukaj Slack według nazwy użytkownika

Mam nadzieję, że ta koncepcja okazała się przydatna i chciałbym usłyszeć inne historie zespołów, które wdrożyły podobne formy monitorowania lub po prostu inne ciekawe sposoby korzystania z niego i budowania na jego podstawie.