Uygulamanızı İzlemek için Slack'i Kullanma

Yayınlanan: 2022-03-10
Kısa özet ↬ Son birkaç aydır, bir hizmet olarak yazılım (SaaS) uygulaması geliştiriyorum ve geliştirme süreci boyunca Slack'in (veya genel olarak ekip sohbetinin) ne kadar güçlü bir araç olabileceğini anladım. kullanıcı ve uygulama davranışını izlemek için. Biraz entegrasyondan sonra, uygulamamıza daha önce olmayan gerçek zamanlı bir görünüm sağladı ve o kadar değerliydi ki, bu göster-ve-söyle yazmadan edemedim.

Her şey Denver, Colorado'daki küçük bir girişimi ziyaret ederek başladı. Ziyaretim sırasında, birkaç dakikada bir ofisin köşesinde ince ve büyüleyici bir “çıngırdama” duymaya başladım. Bu garip gürültüyü araştırmaya gittiğimde, Raspberry Pi'ye bağlı ve devre kartına küçük bir metal çekiçle bağlı bir servis zili buldum. Görünüşe göre Pi, ekibin sunucusundan mesajlar alıyordu ve her yeni müşteri kaydolduğunda o küçük çekici çana savurdu.

Bunun her zaman harika bir ekip motivasyonu olduğunu düşündüm ve benzer bir deneyim elde etmek için ekip sohbetini nasıl kullanabileceğimi ve günlük verilerini nasıl analiz edip görselleştirebileceğimizi düşünmemi sağladı.

Ekip sohbeti için zaten Slack'i kullandığımızdan ve güzel bir şekilde belgelenmiş bir API'ye sahip olduğundan, deney için bariz bir seçimdi.

SmashingMag'de Daha Fazla Okuma :

  • Konuşma Arayüzleri: Bugün Neredeyiz? Ne tarafa gidiyoruz?
  • Duyarlı Tasarımda Ekip İşbirliği ve Verimlilik Boşluklarını Kapatma
  • Uygulama Tasarım Süreci Hakkında Bilmeniz Gerekenler
  • Yarışlara Çıkmak: Tasarım Sprintlerine Başlarken
Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

Slack'i Ayarla

İlk olarak, Slack kanalımıza programlı olarak mesaj göndermek için Slack'ten bir "webhook URL'si" almamız gerekiyordu.

Slack'i kurun
Slack'ten bir web kancası URL'si almak için yukarıdaki adımları izleyin (Büyük sürümü görüntüleyin)

Artık bir web kancası URL'miz olduğuna göre, Slack mesajlarını Node.js uygulamamıza entegre etmenin zamanı gelmişti. Bunu yapmak için node-slack adında kullanışlı bir Node.js modülü buldum.

İlk olarak Node.js modülünü kurduk:

 npm install node-slack --save

Artık seçtiğimiz kanalımıza birkaç satır kod ile Slack mesajları gönderebiliriz.

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

(Ruby, Python ve hemen hemen diğer tüm diller için benzer Slack entegrasyon paketleri bulabilirsiniz.)

Çalıştırıldığında, bu kod #test Slack kanalımızda aşağıdaki mesajı üretti:

Gevşek Kurulum

Yukarıdaki kod minimumdur, ancak Slack API'sine ve node-slack modülüne özeldir. Belirli bir mesajlaşma hizmetine kilitlenmek istemedim, bu yüzden hizmete özel kodu yürütmek için genel bir Node.js modül işlevi oluşturdum:

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

Artık bu modülü iki satır kodla uygulamanın herhangi bir yerinde kullanabiliriz ve gelecekte başka bir servise mesaj göndermeye karar verirsek, bunu Messenger.js'de kolayca değiştirebiliriz.

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

Artık temel bilgileri ayarladığımıza göre, uygulama içinden mesajları başlatmaya hazırdık.

Kayıtları İzle

İlk iş, servis çanı paritesine ulaşmaktı. Kullanıcı kaydı işlevinin başarılı geri aramasını buldum ve şu kodu ekledim:

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

Şimdi, biri kaydolduğunda şu mesajı alırdık:

Yeni Kullanıcı Mesajı

Hatta çalıyor! Bu iyi bir başlangıçtı ve bana o tatmin edici hizmet zili hissini verdi ama daha fazlası için susadım.

Daha Derine Dalın

Merakım her ding ile büyüdükçe, "Ya yeni bir kullanıcı oluşturma başarısız olursa?" gibi şeyleri merak etmeye başladım. Bir kullanıcı kaydolduysa, oturum açtıysa ancak katılım sürecini tamamlamadıysa ne olur? Zamanlanmış görevlerimizin sonucu nedir? Artık temel atıldığına göre, bu soruları yanıtlamak çocuk oyuncağıydı.

Arka Uçtaki İstisnaları ve Kritik Hataları İzleyin

Bilmek istediğimiz en önemli hatalardan biri, yeni bir kullanıcı oluşturmanın başarısız olup olmadığıydı. Tek yapmamız gereken, kullanıcı kayıt işlevinde hata geri aramasını bulmak ve şu kodu eklemekti:

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

Artık kayıtlar başarısız olduğunda, neden başarısız olduklarını ve daha da önemlisi kimin için başarısız olduklarını anında biliyorduk:

Kullanıcı Kayıt Hatası
(Büyük versiyonu görüntüle)

Mesaj gönderebileceğimiz her türlü ilginç yer vardı (hemen hemen her yerde bir hata geri araması ile). Bu yerlerden biri, bu genel hepsini yakalama hatası işleviydi:

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

Bu kod, el değmemiş istisnalar için bir isteğin nasıl göründüğünü ortaya çıkarmamıza yardımcı oldu. Bu hataları tetikleyen isteğe bakarak, temel nedenleri izleyebilir ve daha fazla genel hata kalmayana kadar bunları düzeltebiliriz.

Tüm bu hata bildirimleri yerindeyken, uygulamada büyük bir sorun olursa, bunu anında öğreneceğimizi bilmenin rahatlığını yaşadık.

Finansalları İzleyin

Ardından uygulamada finansal bir olay olduğunda bildirim göndermek istedim. SaaS ürünümüz Stripe ile entegre olduğu için, insanlar planlarını yükselttiğinde, planlarını düşürdüğünde, ödeme bilgileri eklediğinde, ödeme bilgilerini değiştirdiğinde ve abonelik ödemeleriyle ilgili diğer birçok olayda Stripe'ten ping atan bir webhook uç noktası oluşturduk ve bunların tümü Gevşek:

Ödeme Mesajı

Kullanıcı Davranışını Ön Uçta İzleme

Ön uçta, kullanıcı davranışını arka ucun sağlayamayacağı şekillerde anlamak istediğimiz birkaç durum vardı, bu nedenle Slack mesajlarını doğrudan ön uçtan göndermek için bir uç nokta oluşturduk. Slack web kancası URL'miz bir POST uç noktasının arkasında korunduğundan, bir uç nokta aracılığıyla ekibimize Slack mesajları göndermeyi açığa çıkarmak minimum riskti.

Uç nokta yerindeyken, artık basit bir AngularJS $http.post çağrısıyla Slack mesajlarını ateşleyebiliriz:

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

Bu, işle ilgili önemli soruları yanıtlamamıza yardımcı olur: İnsanlar bir alan adı kaydedip ekliyor mu? Onlar değil mi? Varsa, sahibini ekledikten hemen sonra kişisel olarak ulaşmak isteyeceğimiz gerçekten yüksek profilli bir alan için mi? Şimdi buna dokunabiliriz:

Kullanıcı Mesajları
(Büyük versiyonu görüntüle)

Bir noktada, bir etki alanı ekleyen, kaldıran ve ardından birkaç dakika içinde okuyan bir grup insan gördük, bu da bizi muhtemelen başka türlü asla keşfedemeyeceğimiz belirsiz bir hataya yönlendirdi.

Bir kullanıcının hizmetten memnun olmadığına dair sinyaller de vardır ve bunlar hakkında bilgi sahibi olmak değerlidir. Birisi bir alan adını kaldırdı mı? Slack'in bağlantısını kestiler mi?

Kullanıcı Bağlantısı Kesilen Mesajlar
(Büyük versiyonu görüntüle)

Bu geri bildirim bize proaktif bir şekilde ulaşma ve en önemli olduğunda keyifli müşteri desteği sunma fırsatı verir.

Zamanlanmış Görevleri İzleme

Slack'te görülecek en ilginç şeylerden biri, zamanlanmış görevlerin sonucudur. SaaS ürünümüz, insanları web sitelerinin performansı hakkında bilgilendirmek (temel hizmetimiz), işlem e-postaları göndermek, veritabanını temizlemek ve birkaç başka şey için görevler yürütür. Bu görevlerin tetiklenmesi ve sonuçları Slack'e bir mesaj gönderir:

Sunucu Görev Mesajları
(Büyük versiyonu görüntüle)

Artık bir görev işlevi tetiklendiğinde, bu işlevin sonucunun ne olduğunu (bu durumda birkaç e-posta gönderir) ve herhangi bir nedenle başarısız olup olmadığını biliyoruz.

Bu Konsepti Uygulamanıza Uygulayın

Yukarıdaki vaka çalışması, GoFaster.io uygulamasını ve hizmetini izlemek için yaptıklarımızın pratik bir örneğidir. Bizim için harika çalıştı, ancak bu kavram günde yüzlerce, hatta binlerce mesaj gönderen büyük uygulamalara nasıl ölçeklenebilir? Tahmin edebileceğiniz gibi bu durum kısa sürede “Kurt Ağlayan Slackbot” durumuna dönüşecek ve gürültüde değer kaybolacaktır.

Tüm Bildirimlere Eşit Davranmayın

Bazı bildirimler diğerlerinden daha önemlidir ve önemi çalışana ve rolüne göre değişir. Örneğin, yazılım geliştirme ve BT operasyonları (DevOps) çalışanları yalnızca sunucu mesajlarıyla ilgilenirken, müşteri hizmetleri çalışanları en çok kullanıcılarla neler olup bittiğiyle ilgilenir.

Neyse ki, Slack'in bu soruna harika bir çözümü var: kanallar .

Kanallar herkes tarafından oluşturulabilir, kuruluşunuzda herkese açık veya özel hale getirilebilir ve herkesle paylaşılabilir. Bir kanala abone olduğunuzda, o kanalın etkinliklerinin sizi nasıl uyaracağını kontrol edebilirsiniz. Her seferinde kanalda yeni bir mesaj mı geliyor? Telefonunuzu da uyarıyor mu? Sadece kanalı mı kalınlaştırıyor? Tüm bunlar, her bir ekip üyesi tarafından ihtiyaçlarına göre her kanal için kontrol edilebilir.

Bu fikri uygulamaya koyarak, daha büyük bir kuruluşun kanallar aracılığıyla Slack'te monitör tabanlı bildirimleri nasıl düzenleyebileceği aşağıda açıklanmıştır:

#Kritik-Sunucu-Hataları

  • Ne: kayıt hataları, oturum açma hataları, veritabanı okuma ve yazma hataları
  • Kim: sistem yöneticileri, DevOps, CTO, CEO, geliştiriciler
  • Uyarı ayarları: Her zaman telefonda veya masaüstünde bildir.

#Kritik Olmayan-Sunucu-Hataları

  • Ne: 404 hataları, tümünü yakalama sunucu hataları vb.
  • Kim: DevOps, geliştiriciler
  • Uyarı ayarları: Kalın yapın ama çınlamayın.

#Finans

  • Ne: ödeme işlemleri, başarısız işlemler, yükseltmeler, sürüm düşürmeler, süresi dolmuş kartlar
  • Kim: CFO, CEO
  • Uyarı ayarları: Yağmur yağdırın.

#Kullanıcı-Davranış

  • Ne: kayıt olma, işe alım süreci, plan türünü güncelleme, bilgi ekleme, bilgi kaldırma, hesap silme
  • Kim: müşteri desteği, sosyal medya yöneticileri, geliştiriciler, CEO
  • Uyarı ayarları: Her zaman telefonda veya masaüstünde bildir.

#Uygulama-İstatistikleri

  • Ne: zamanlanmış görev sonuçları, temizlik, işlem e-posta istatistikleri, kullanıcı sayısı ve büyüme metrikleri
  • Kim: e-posta pazarlamacıları, sistem yöneticileri, ilgilenen herkes
  • Uyarı ayarları: Kalın yapın ama çınlamayın.

Çözüm

Bu fikri birkaç ay boyunca geliştirdikten ve sonuçları sindirdikten sonra, uygulamamızın paha biçilmez bir uzantısı olduğunu gördük. Onsuz, hizmette neler olup bittiğiyle bağlantımız kopacak ve aynı bilgileri kontrol paneli aracılığıyla manuel olarak aramak zorunda kalacaktık, yoksa veritabanı sorguları bir angarya olurdu.

Her uygulama ve kullanıcı tabanı farklıdır, yani bu konsept bir hizmete dönüştürülemez ve kitlelere sunulamaz. Değerli olabilmesi için, uygulamanıza derinlemesine entegre edilmesi için küçük bir ön zaman ve kaynak yatırımı gerektirir. Çalışmaya başladıktan sonra, yatırım, ekibinizin uygulamanıza ve kullanıcılarına olan bağlılığı şeklinde karşılığını verecektir.

Sonuç olarak, uygulamanızı izlemek için ekip sohbeti kullanmanın faydalarının bir özetini burada bulabilirsiniz:

Kullanıcı ve Sunucu Davranışına Yeni Bir Bakış Açısı Kazanın

Sizin ve işletmeniz için en önemli olan metriklerin gerçek zamanlı canlı yayınına sahip olmak, kullanıcıların ne yaptığı ve sunucunun nasıl yanıt verdiği konusunda sizi yakından bağlantılı tutacaktır.

İşler Başarısız Olduğunda Hızlı Tepki Verin

Her zamankinden daha hızlı tepki verebileceksiniz. Hataları, kullanıcılarınızla aynı anda bileceksiniz. Bu başarısız uç noktaya, kayıp veritabanı bağlantısına veya DDoS saldırısına anında tepki verebilirsiniz.

Olağanüstü Müşteri Hizmetleri Sunun

Bir indirim sunmak için hesabını kapatmış olan müşteriye ulaşın, yeni sürüme geçen müşterilere kişisel olarak teşekkür edin veya niyetlerini anlamak için insanları takip edin. Kullanıcıların ne yaptığını ve ne zaman yaptığını bildiğinizde, nedenini kolayca öğrenebilirsiniz.

Uygulamaya Ekip Bağlılığı Sizi Daha Verimli Hale Getirecek

Ekibiniz uygulama ile aynı sayfada olduğunda, işbirliği ne olduğunu, nerede olduğunu veya kime olduğunu anlamaya çalışmak yerine sorunları ortaya çıktıkça çözmeye odaklanabilir.

Bildirimler ve Kanallar Uygulamanızla Ölçeklenebilir

Uygulamanız ve ekibiniz büyüdükçe izleme ihtiyaçlarınız da artacaktır. Slack, doğru bilgilerin doğru kişilere ulaşmasını sağlamak için gerekli tüm izin ve bildirim kontrollerini size vererek harika bir iş çıkarıyor.

Arama Güçlüdür

Slack mesajlarınıza bir kullanıcı adı kaydederek, bir kullanıcının uygulamanızla etkileşime girerken oluşturduğu her hatayı, başarı mesajını veya olayı sadece Slack'te kullanıcı adını arayarak izleyebilirsiniz. Ücretsiz bir Slack hesabıyla bunun son 10.000 mesajla sınırlı olduğunu bilin.

Slack'i Kullanıcı Adına Göre Ara

Umarım bu konsepti faydalı bulmuşsunuzdur ve benzer izleme biçimlerini veya sadece onu kullanmanın ve geliştirmenin başka ilginç yollarını uygulayan diğer ekiplerin hikayelerini duymayı çok isterim.