Folosind Slack pentru a vă monitoriza aplicația

Publicat: 2022-03-10
Rezumat rapid ↬ În ultimele luni, am construit o aplicație software-as-a-service (SaaS) și pe tot parcursul procesului de dezvoltare mi-am dat seama ce instrument puternic poate fi Slack (sau chat de echipă în general) pentru a monitoriza comportamentul utilizatorului și al aplicației. După un pic de integrare, a oferit o vizualizare în timp real a aplicației noastre, care anterior nu exista și a fost atât de neprețuită încât nu m-am putut abține să nu scriu această prezentare și poveste.

Totul a început cu o vizită la un mic startup din Denver, Colorado. În timpul vizitei mele, am început să aud un „ding” subtil și încântător în colțul biroului la fiecare câteva minute. Când m-am dus să investighez acest zgomot ciudat, am găsit un sonerie de serviciu conectată la un Raspberry Pi, cu un ciocan de metal minuscul conectat la placa de circuit. După cum s-a dovedit, Pi-ul primea mesaje de la serverul echipei și a bătut acel mic ciocan spre clopoțel de fiecare dată când un nou client se înscrie .

Întotdeauna am crezut că a fost un mare motivator pentru echipă și m-a făcut să mă gândesc la cum aș putea folosi chatul în echipă pentru a obține o experiență similară și cum am putea analiza și vizualiza datele din jurnal.

Deoarece folosim deja Slack pentru chat în echipă și pentru că are un API frumos documentat, a fost o alegere evidentă pentru experiment.

Citiți suplimentare despre SmashingMag:

  • Interfețe conversaționale: unde suntem astăzi? Încotro ne îndreptăm?
  • Colaborarea în echipă și eliminarea lacunelor de eficiență în proiectarea receptivă
  • Ce ar trebui să știți despre procesul de proiectare a aplicației
  • La curse: Începeți cu sprinturile de design
Mai multe după săritură! Continuați să citiți mai jos ↓

Configurați Slack

În primul rând, a trebuit să obținem o „URL webhook” de la Slack pentru a posta mesaje în mod programatic pe canalul nostru Slack.

Configurați Slack
Urmați pașii de mai sus pentru a obține o adresă URL webhook de la Slack (Vedeți versiunea mare)

Acum că aveam o adresă URL webhook, era timpul să integrăm mesajele Slack în aplicația noastră Node.js. Pentru a face acest lucru, am găsit un modul la îndemână Node.js numit node-slack.

Mai întâi, am instalat modulul Node.js:

 npm install node-slack --save

Acum, am putea trimite mesaje Slack către canalul nostru ales cu câteva linii de cod.

 // 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' });

(Puteți găsi pachete similare de integrare Slack pentru Ruby, Python și aproape orice altă limbă.)

Când a fost executat, acest cod a produs următorul mesaj pe canalul nostru #test Slack:

Configurare Slack

Codul de mai sus este minim, dar este specific API-ului Slack și modulului node-slack. Nu am vrut să fiu blocat într-un anumit serviciu de mesagerie, așa că am creat o funcție generică de modul Node.js pentru a executa codul specific serviciului:

 // 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; } } };

Acum putem folosi acest modul oriunde în aplicație cu două linii de cod și, dacă decidem vreodată să trimitem mesaje către un alt serviciu în viitor, îl putem schimba cu ușurință în Messenger.js.

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

Acum că aveam elementele de bază configurate, eram gata să începem să lansăm mesaje din cadrul aplicației.

Urmăriți înregistrări

Prima ordine de lucru a fost realizarea parității serviciu-clopot. Am localizat revenirea cu succes a funcției de înregistrare a utilizatorului și am adăugat acest cod:

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

Acum, când cineva se înregistra, primim acest mesaj:

Mesaj de utilizator nou

Ba chiar doare! Acesta a fost un început bun și mi-a dat acel sentiment satisfăcător de serviciu, dar mi-a făcut sete de mai mult.

Scufundați mai adânc

Pe măsură ce curiozitatea mea creștea cu fiecare ding, am început să mă întreb lucruri precum: Ce se întâmplă dacă nu am creat un utilizator nou? Ce se întâmplă dacă un utilizator s-a înregistrat, s-a autentificat, dar nu a finalizat procesul de înscriere? Care este rezultatul sarcinilor noastre programate? Acum că bazele erau puse la loc, să răspunzi la aceste întrebări a fost ușor.

Monitorizați excepțiile și erorile critice pe back-end

Una dintre cele mai importante erori despre care doream să aflăm a fost dacă a existat un eșec în crearea unui nou utilizator. Tot ce trebuia să facem a fost să găsim mesajul de apel invers în funcția de înregistrare a utilizatorului și să adăugăm acest cod:

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

Acum am știut imediat când au eșuat înregistrările, de ce au eșuat și, mai important, pentru cine au eșuat:

Eroare de înregistrare a utilizatorului
(Vezi versiunea mare)

Erau tot felul de locuri interesante unde puteam trimite mesaje (aproape oriunde cu un apel invers de eroare). Unul dintre acele locuri a fost această funcție generică de eroare catch-all:

 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 }); });

Acest cod ne-a ajutat să descoperim cum arată o solicitare pentru excepții nepreluate. Privind solicitarea care a declanșat aceste erori, am putea urmări cauzele rădăcină și le-am remediat până când nu vor mai apărea erori generice.

Cu toate aceste notificări de eroare la locul lor, acum ne-am simțit confortabil să știm că, dacă ceva important ar eșua în aplicație, vom ști imediat despre asta.

Monitorizarea financiară

În continuare, am vrut să trimit o notificare când are loc un eveniment financiar în aplicație. Deoarece produsul nostru SaaS se integrează cu Stripe, am creat un punct final webhook care primește ping de la Stripe atunci când oamenii își upgrade planul, își reduc planul, adaugă informații de plată, modifică informațiile de plată și multe alte evenimente legate de plățile abonamentului, toate acestea fiind trimise către Slack:

Mesaj de plată

Monitorizați comportamentul utilizatorului pe front-end

Au existat câteva cazuri pe front-end în care am vrut să înțelegem comportamentul utilizatorului în moduri pe care back-end-ul nu le putea oferi, așa că am creat un punct final pentru a trimite mesaje Slack direct de la front-end. Deoarece URL-ul nostru webhook Slack este protejat în spatele unui punct final POST , a fost un risc minim să expunem trimiterea de mesaje Slack către echipa noastră prin intermediul unui punct final.

Cu punctul final la loc, acum am putea declanșa mesajele Slack cu un simplu apel AngularJS $http.post :

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

Acest lucru ne ajută să răspundem la întrebări importante despre afacere: oamenii se înregistrează și adaugă un nume de domeniu? nu sunt? Dacă cineva este, este pentru un domeniu cu adevărat de mare profil al cărui proprietar am dori să-l contactăm personal imediat după ce l-a adăugat. Acum putem accesa asta:

Mesaje utilizator
(Vezi versiunea mare)

La un moment dat, am văzut un tipar de oameni care adaugă un domeniu, îl îndepărtează, apoi îl citesc în câteva minute, ceea ce ne-a dat indicii asupra unei erori obscure pe care probabil nu l-am fi descoperit niciodată altfel.

Există, de asemenea, semnale că un utilizator este nemulțumit de serviciu și acestea sunt valoroase de știut. A eliminat cineva un nume de domeniu? Au deconectat Slack?

Mesaje utilizator deconectat
(Vezi versiunea mare)

Acest feedback ne oferă oportunitatea de a contacta în mod proactiv și de a oferi asistență încântătoare pentru clienți atunci când contează cel mai mult.

Monitorizați sarcinile programate

Unul dintre cele mai interesante lucruri de văzut în Slack este rezultatul sarcinilor programate. Produsul nostru SaaS execută sarcini pentru a notifica oamenii despre performanța site-ului lor (serviciul nostru principal), pentru a trimite e-mailuri tranzacționale, pentru a curăța baza de date și alte câteva lucruri. Declanșarea și rezultatele acestor sarcini trimit un mesaj către Slack:

Mesaje de sarcină de server
(Vezi versiunea mare)

Acum știm când se declanșează o funcție de sarcină, care este rezultatul acelei funcții (în acest caz, trimite mai multe e-mailuri) și dacă eșuează din orice motiv.

Aplicați acest concept aplicației dvs

Studiul de caz de mai sus este un exemplu practic a ceea ce am făcut pentru a monitoriza aplicația și serviciul GoFaster.io. A funcționat fantastic pentru noi, dar cum s-ar extinde acest concept la aplicații mari care trimit sute, poate chiar mii de mesaje pe zi? După cum vă puteți imagina, acest lucru s-ar transforma rapid într-o situație „Slackbot care a strigat lup”, iar valoarea s-ar pierde în zgomot.

Nu tratați toate notificările în mod egal

Unele notificări sunt mai importante decât altele, iar importanța va varia în funcție de angajat și de rolul acestuia. De exemplu, oamenilor de dezvoltare software și operațiuni IT (DevOps) s-ar putea să le pese doar de mesajele de pe server, în timp ce celor de la serviciile pentru clienți le-ar păsa cel mai mult de ceea ce se întâmplă cu utilizatorii.

Din fericire, Slack are o soluție excelentă la această problemă: canalele .

Canalele pot fi create de oricine, făcute publice sau private pentru organizația dvs. și partajate cu oricine. După ce v-ați abonat la un canal, puteți controla modul în care activitățile canalului vă alertează. Un mesaj nou pe canal ding de fiecare dată? Îți alertează și telefonul? Doar îndrăznețează canalul? Toate acestea pot fi controlate pentru fiecare canal de către fiecare membru al echipei, pentru a se potrivi nevoilor sale.

Punând această idee în practică, iată cum o organizație mai mare ar putea organiza notificări bazate pe monitor în Slack prin canale:

#Critical-Server-Errors

  • Ce: erori de înregistrare, erori de conectare, erori de citire și scriere a bazei de date
  • Cine: administratori de sistem, DevOps, CTO, CEO, dezvoltatori
  • Setări alerte: notifică întotdeauna pe telefon sau desktop.

#Non-Critical-Server-Errors

  • Ce: erori 404, erori de server catch-all etc.
  • Cine: DevOps, dezvoltatori
  • Setări de alertă: faceți îndrăznețe, dar nu înclinați.

#Finanțe

  • Ce: tranzacții de plată, tranzacții eșuate, upgrade-uri, downgrade, carduri expirate
  • Cine: CFO, CEO
  • Setări de alertă: face să plouă.

#Comportamentul utilizatorului

  • Ce: înregistrarea, procesul de îmbarcare, actualizarea tipului de plan, adăugarea de informații, eliminarea informațiilor, ștergerea contului
  • Cine: suport pentru clienți, manageri de social media, dezvoltatori, CEO
  • Setări alerte: notifică întotdeauna pe telefon sau desktop.

#Application-Stats

  • Ce: rezultatele sarcinilor programate, menaj, statistici tranzacționale prin e-mail, numărul de utilizatori și valorile de creștere
  • Cine: e-mail marketing, administratori de sistem, oricine este interesat
  • Setări de alertă: faceți îndrăznețe, dar nu înclinați.

Concluzie

După ce am construit pe această idee timp de câteva luni și am digerat rezultatele, am considerat că este o extensie neprețuită a aplicației noastre. Fără el, ne-am simți fără legătură cu ceea ce se întâmplă cu serviciul și ar trebui să găsim manual aceleași informații prin intermediul tabloului de bord, sau interogările bazei de date ar fi o corvoadă.

Fiecare aplicație și bază de utilizatori este diferită, ceea ce înseamnă că acest concept nu poate fi integrat într-un serviciu și oferit maselor. Pentru a fi valoros, necesită o mică investiție inițială de timp și resurse pentru a se integra profund în aplicația dvs. Odată ce este pus în funcțiune, investiția va fi răsplătită sub forma conexiunii echipei dvs. la aplicația dvs. și la utilizatorii acesteia.

În concluzie, iată o recapitulare a beneficiilor utilizării chat-ului în echipă pentru a vă monitoriza aplicația:

Obțineți o perspectivă nouă asupra comportamentului utilizatorilor și serverului

Având un flux live în timp real al valorilor care contează cel mai mult pentru dvs. și afacerea dvs. vă va menține strâns conectat la ceea ce fac utilizatorii și la modul în care serverul răspunde.

Reacționează rapid atunci când lucrurile eșuează

Veți putea reacționa mai repede decât oricând. Veți ști despre eșecuri în același timp și utilizatorii dvs. Puteți reacționa imediat la acel punct final eșuat, pierderea conexiunii la baza de date sau atacul DDoS.

Oferiți servicii excepționale pentru clienți

Luați legătura cu acel client care tocmai și-a dezactivat contul pentru a-i oferi o reducere, pentru a le mulțumi personal clienților care au făcut upgrade sau pentru a contacta oamenii pentru a le înțelege intențiile. Când știi ce fac utilizatorii și când o fac, poți afla cu ușurință de ce.

Conexiunea echipei la aplicație vă va face mai eficient

Când echipa dvs. este pe aceeași pagină cu aplicația, colaborarea se poate concentra pe rezolvarea problemelor pe măsură ce apar, mai degrabă decât pe încercarea de a afla ce s-a întâmplat, unde s-a întâmplat sau cui s-a întâmplat.

Notificările și canalele se pot scala cu aplicația dvs

Pe măsură ce aplicația și echipa dvs. cresc, la fel și nevoile dvs. de monitorizare. Slack face o treabă grozavă de a vă oferi toate permisiunile și controalele de notificare necesare pentru a vă asigura că informațiile potrivite ajung la persoanele potrivite.

Căutarea este puternică

Înregistrând un nume de utilizator în mesajele dvs. Slack, puteți urmări fiecare eroare, mesaj de succes sau eveniment pe care un utilizator l-a generat în timp ce interacționa cu aplicația dvs., pur și simplu căutând numele de utilizator în Slack. Știți doar că, cu un cont Slack gratuit, acesta este limitat la ultimele 10.000 de mesaje.

Căutați Slack după numele de utilizator

Sper că ați găsit acest concept util și mi-ar plăcea să aud alte povești despre echipe care au implementat forme similare de monitorizare sau doar alte moduri interesante de a-l folosi și de a construi pe baza acestuia.