Menggunakan Slack Untuk Memantau Aplikasi Anda
Diterbitkan: 2022-03-10Semuanya dimulai dengan kunjungan ke startup kecil di Denver, Colorado. Selama kunjungan saya, saya mulai mendengar "ding" yang halus dan mempesona di sudut kantor setiap beberapa menit. Ketika saya pergi untuk menyelidiki suara aneh ini, saya menemukan bel layanan terhubung ke Raspberry Pi, dengan palu logam kecil yang terhubung ke papan sirkuit. Ternyata, Pi menerima pesan dari server tim, dan mengayunkan palu kecil itu di bel setiap kali pelanggan baru mendaftar .
Saya selalu berpikir bahwa itu adalah motivator tim yang hebat, dan itu membuat saya berpikir tentang bagaimana saya dapat menggunakan obrolan tim untuk mencapai pengalaman serupa dan bagaimana kami dapat menganalisis dan memvisualisasikan data log.
Karena kami sudah menggunakan Slack untuk obrolan tim, dan karena memiliki API yang didokumentasikan dengan indah, itu adalah pilihan yang jelas untuk eksperimen.
Bacaan Lebih Lanjut tentang SmashingMag:
- Antarmuka Percakapan: Di Mana Kita Saat Ini? Kemana Kita Menuju?
- Kolaborasi Tim Dan Menutup Kesenjangan Efisiensi Dalam Desain Responsif
- Yang Harus Anda Ketahui Tentang Proses Desain Aplikasi
- Off To The Races: Memulai Dengan Sprint Desain
Mengatur Slack
Pertama, kami harus mendapatkan "URL webhook" dari Slack untuk mengirim pesan secara terprogram ke saluran Slack kami.
Sekarang setelah kita memiliki URL webhook, saatnya untuk mengintegrasikan pesan Slack ke dalam aplikasi Node.js kita. Untuk melakukan ini, saya menemukan modul Node.js yang berguna bernama node-slack.
Pertama, kami menginstal modul Node.js:
npm install node-slack --save
Sekarang, kita dapat mengirim pesan Slack ke saluran pilihan kita dengan beberapa baris kode.
// 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' });
(Anda dapat menemukan paket integrasi Slack serupa untuk Ruby, Python, dan hampir semua bahasa lainnya.)
Saat dieksekusi, kode ini menghasilkan pesan berikut di saluran #test Slack kami:
Kode di atas minimal, tetapi khusus untuk Slack API dan modul node-slack. Saya tidak ingin dikunci ke dalam layanan perpesanan tertentu, jadi saya membuat fungsi modul Node.js generik untuk mengeksekusi kode khusus layanan:
// 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; } } };
Sekarang kita dapat menggunakan modul ini di mana saja dalam aplikasi dengan dua baris kode, dan jika kita memutuskan untuk mengirim pesan ke layanan lain di masa mendatang, kita dapat dengan mudah menukarnya di Messenger.js.
var messenger = require('./utilities/messenger'); messenger.sendMessage(':rocket: Nice job, I\'m all set up!', '#test');
Sekarang setelah kami menyiapkan dasar-dasarnya, kami siap untuk mulai mengirimkan pesan dari dalam aplikasi.
Lacak Pendaftaran
Urutan pertama bisnis adalah mencapai paritas bel layanan. Saya menemukan panggilan balik sukses dari fungsi pendaftaran pengguna, dan saya menambahkan kode ini:
messenger.sendMessage('New user registration! ' + user.email);
Sekarang, ketika seseorang mendaftar, kami akan menerima pesan ini:
Itu bahkan berbunyi! Ini adalah awal yang baik, dan itu memberi saya perasaan bel layanan yang memuaskan, tetapi itu membuat saya haus akan lebih.
Menyelam Lebih Dalam
Saat rasa ingin tahu saya tumbuh dengan setiap ding, saya mulai bertanya-tanya hal-hal seperti, Bagaimana jika ada kegagalan untuk membuat pengguna baru? Bagaimana jika pengguna mendaftar, masuk tetapi tidak menyelesaikan proses orientasi? Apa hasil dari tugas terjadwal kita? Sekarang setelah dasarnya ada, menjawab pertanyaan-pertanyaan ini adalah hal yang mudah.
Monitor Pengecualian dan Kesalahan Kritis di Back End
Salah satu kesalahan terpenting yang ingin kami ketahui adalah jika ada kegagalan untuk membuat pengguna baru. Yang harus kami lakukan adalah menemukan panggilan balik kesalahan dalam fungsi pendaftaran pengguna, dan menambahkan kode ini:
messenger.sendMessage(':x: Error While adding a new user ' + formData.email + ' to the DB. Registration aborted!' + error.code + ' ' + error.message);
Sekarang kami langsung tahu kapan pendaftaran gagal, mengapa mereka gagal dan, yang lebih penting, untuk siapa mereka gagal:
Ada berbagai macam tempat menarik di mana kami dapat mengirim pesan (hampir di mana saja dengan panggilan balik kesalahan). Salah satu tempat itu adalah fungsi error catch-all generik ini:
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 }); });
Kode ini membantu kami mengungkap seperti apa permintaan untuk pengecualian yang tidak ditangani. Dengan melihat permintaan yang memicu kesalahan ini, kami dapat melacak akar penyebab dan memperbaikinya hingga tidak ada lagi kesalahan umum.
Dengan semua pemberitahuan kesalahan ini, kami sekarang merasa nyaman mengetahui bahwa jika sesuatu yang besar gagal dalam aplikasi, kami akan segera mengetahuinya.
Pantau Keuangan
Selanjutnya, saya ingin mengirim pemberitahuan ketika peristiwa keuangan terjadi di aplikasi. Karena produk SaaS kami terintegrasi dengan Stripe, kami membuat titik akhir webhook yang di-ping dari Stripe ketika orang meningkatkan paket mereka, menurunkan versi paket mereka, menambahkan info pembayaran, mengubah info pembayaran, dan banyak acara lain yang terkait dengan pembayaran berlangganan, yang semuanya dikirim ke Kendur:
Pantau Perilaku Pengguna di Front End
Ada beberapa kasus di ujung depan di mana kami ingin memahami perilaku pengguna dengan cara yang tidak dapat disediakan oleh ujung belakang, jadi kami membuat titik akhir untuk mengirim pesan Slack langsung dari ujung depan. Karena URL webhook Slack kami dilindungi di belakang titik akhir POST
, risiko pengiriman pesan Slack ke tim kami melalui titik akhir adalah risiko minimal.
Dengan titik akhir di tempat, kami sekarang dapat menjalankan pesan Slack dengan panggilan AngularJS $http.post
sederhana:
// send Slack notification from the front end var message = ":warning: Slack disconnected by " + $scope.user.username; $http.post('/endpoint', message);
Ini membantu kami menjawab pertanyaan penting tentang bisnis: Apakah orang mendaftar dan menambahkan nama domain? Apakah mereka tidak? Jika ada, apakah itu untuk domain profil tinggi yang pemiliknya ingin kami hubungi secara pribadi segera setelah mereka menambahkannya. Sekarang kita dapat memanfaatkan ini:
Pada satu titik, kami melihat pola orang menambahkan domain, menghapusnya, lalu membacanya dalam beberapa menit, yang memberi petunjuk kepada kami tentang bug yang tidak jelas yang mungkin tidak akan pernah kami temukan sebaliknya.
Ada juga sinyal bahwa pengguna tidak senang dengan layanan ini, dan ini penting untuk diketahui. Apakah seseorang menghapus nama domain? Apakah mereka memutuskan sambungan Slack?
Umpan balik ini memberi kami kesempatan untuk secara proaktif menjangkau dan menawarkan dukungan pelanggan yang menyenangkan di saat yang paling penting.
Pantau Tugas Terjadwal
Salah satu hal yang paling menarik untuk dilihat di Slack adalah hasil dari tugas yang dijadwalkan. Produk SaaS kami menjalankan tugas untuk memberi tahu orang-orang tentang kinerja situs web mereka (layanan inti kami), mengirim email transaksional, membersihkan basis data, dan beberapa hal lainnya. Pengaktifan dan hasil tugas ini mengirimkan pesan ke Slack:
Sekarang kita tahu kapan fungsi tugas diaktifkan, apa hasil dari fungsi itu (dalam hal ini, ia mengirimkan beberapa email) dan apakah gagal karena alasan apa pun.
Terapkan Konsep Ini Untuk Aplikasi Anda
Studi kasus di atas adalah contoh praktis dari apa yang kami lakukan untuk memantau aplikasi dan layanan GoFaster.io. Ini telah bekerja dengan luar biasa bagi kami, tetapi bagaimana konsep ini akan menskalakan ke aplikasi besar yang mengirim ratusan, bahkan mungkin ribuan, pesan per hari? Seperti yang dapat Anda bayangkan, ini akan dengan cepat berubah menjadi situasi "Slackbot yang menangis serigala", dan nilainya akan hilang dalam kebisingan.
Jangan Perlakukan Semua Notifikasi Secara Sama
Beberapa pemberitahuan lebih penting daripada yang lain, dan tingkat kepentingannya akan bervariasi tergantung pada karyawan dan peran mereka. Misalnya, orang pengembangan perangkat lunak dan operasi TI (DevOps) mungkin hanya peduli dengan pesan server, sedangkan orang layanan pelanggan akan paling peduli tentang apa yang terjadi dengan pengguna.
Untungnya, Slack memiliki solusi hebat untuk masalah ini: channels .
Saluran dapat dibuat oleh siapa saja, dijadikan publik atau pribadi untuk organisasi Anda, dan dibagikan dengan siapa saja. Setelah berlangganan saluran, Anda dapat mengontrol bagaimana aktivitas saluran itu mengingatkan Anda. Apakah pesan baru di saluran berbunyi setiap saat? Apakah itu mengingatkan ponsel Anda juga? Apakah itu hanya menebalkan saluran? Semua ini dapat dikontrol untuk setiap saluran oleh setiap anggota tim sesuai dengan kebutuhan mereka.
Dengan menerapkan ide ini, berikut cara organisasi yang lebih besar mengatur notifikasi berbasis monitor di Slack melalui saluran:
#Kritis-Server-Kesalahan
- Apa: kesalahan pendaftaran, kesalahan login, kesalahan membaca dan menulis basis data
- Siapa: administrator sistem, DevOps, CTO, CEO, pengembang
- Pengaturan peringatan: Selalu beri tahu di ponsel atau desktop.
#Non-Kritis-Server-Kesalahan
- Apa: 404 kesalahan, kesalahan server tangkap-semua, dll.
- Siapa: DevOps, pengembang
- Pengaturan peringatan: Buat huruf tebal tetapi jangan berbunyi.
#Keuangan
- Apa: transaksi pembayaran, transaksi gagal, peningkatan, penurunan, kartu kedaluwarsa
- Siapa: CFO, CEO
- Pengaturan peringatan: Jadikan hujan.
#Perilaku Pengguna
- Apa: mendaftar, proses orientasi, memperbarui jenis paket, menambahkan informasi, menghapus informasi, menghapus akun
- Siapa: dukungan pelanggan, manajer media sosial, pengembang, CEO
- Pengaturan peringatan: Selalu beri tahu di ponsel atau desktop.
#Application-Stats
- Apa: hasil tugas terjadwal, tata graha, statistik email transaksional, jumlah pengguna, dan metrik pertumbuhan
- Siapa: pemasar email, administrator sistem, siapa saja yang tertarik
- Pengaturan peringatan: Buat huruf tebal tetapi jangan berbunyi.
Kesimpulan
Setelah membangun ide ini selama beberapa bulan dan mencerna hasilnya, kami menemukan itu sebagai perpanjangan yang tak ternilai dari aplikasi kami. Tanpa itu, kami akan merasa kehilangan kontak dengan apa yang terjadi dengan layanan dan harus secara manual mencari informasi yang sama melalui dasbor, atau kueri basis data akan menjadi tugas.
Setiap aplikasi dan basis pengguna berbeda, yang berarti bahwa konsep ini tidak dapat dibangun menjadi layanan dan ditawarkan kepada massa. Agar bernilai, diperlukan sedikit investasi waktu dan sumber daya di muka untuk mengintegrasikan secara mendalam dalam aplikasi Anda. Setelah aktif dan berjalan, investasi akan terbayar dalam bentuk keterhubungan tim Anda dengan aplikasi Anda dan penggunanya.
Kesimpulannya, berikut rekap manfaat menggunakan obrolan tim untuk memantau aplikasi Anda:
Dapatkan Perspektif Baru tentang Perilaku Pengguna dan Server
Memiliki umpan langsung real-time dari metrik yang paling penting bagi Anda dan bisnis Anda akan membuat Anda tetap terhubung dengan apa yang dilakukan pengguna dan bagaimana server merespons.
Bereaksi Dengan Cepat Ketika Segalanya Gagal
Anda akan dapat bereaksi lebih cepat dari sebelumnya. Anda akan tahu tentang kegagalan pada saat yang sama dengan pengguna Anda. Anda dapat segera bereaksi terhadap titik akhir yang gagal, koneksi database yang hilang, atau serangan DDoS.
Menawarkan Layanan Pelanggan yang Luar Biasa
Jangkau pelanggan yang baru saja menonaktifkan akun mereka untuk menawarkan diskon, mengucapkan terima kasih secara pribadi kepada pelanggan yang telah meningkatkan versi, atau hanya menindaklanjuti dengan orang-orang untuk memahami niat mereka. Ketika Anda mengetahui apa yang dilakukan pengguna dan kapan mereka melakukannya, Anda dapat dengan mudah mengetahui alasannya.
Keterhubungan Tim dengan Aplikasi Akan Membuat Anda Lebih Efisien
Ketika tim Anda berada di halaman yang sama dengan aplikasi, kolaborasi dapat berpusat pada pemecahan masalah yang muncul, daripada mencoba mencari tahu apa yang terjadi, di mana itu terjadi, atau kepada siapa itu terjadi.
Notifikasi dan Saluran Dapat Menskalakan Dengan Aplikasi Anda
Seiring pertumbuhan aplikasi dan tim Anda, kebutuhan pemantauan Anda juga akan meningkat. Slack melakukan pekerjaan yang baik untuk memberi Anda semua izin dan kontrol notifikasi yang diperlukan untuk memastikan bahwa informasi yang tepat sampai ke orang yang tepat.
Pencarian Itu Kuat
Dengan mencatat nama pengguna di pesan Slack Anda, Anda dapat melacak setiap kesalahan, pesan sukses, atau peristiwa yang dibuat pengguna saat berinteraksi dengan aplikasi Anda hanya dengan mencari nama pengguna mereka di Slack. Ketahuilah bahwa, dengan akun Slack gratis, ini terbatas pada 10.000 pesan terakhir.
Saya harap Anda telah menemukan konsep ini berguna, dan saya ingin mendengar cerita lain dari tim yang telah menerapkan bentuk pemantauan serupa, atau hanya cara menarik lainnya untuk menggunakan dan membangunnya.