Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Monitoring and Logging on Doorbell.io
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Philip Manavopoulos
June 11, 2014
Programming
510
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Monitoring and Logging on Doorbell.io
Philip Manavopoulos
June 11, 2014
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
230
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.2k
Workers Cache を知る
syumai
0
320
Webの地図
yosuke_furukawa
PRO
6
5k
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
430
setup-vp GitLab対応の裏側
naokihaba
0
140
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
460
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
速習iPhone Duo対応
yuukiw00w
2
910
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
190
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
510
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
500
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
Technical Leadership for Architectural Decision Making
baasie
3
590
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Design in an AI World
tapps
1
340
Transcript
Monitoring(and(Logging(on( Doorbell.io !@manavo
What%is%Doorbell.io
The$Stack LAMP%with: • PHP$5.5,$using$Laravel$4 • Memcache • Beanstalkd$(message$queue) • Mashape$(3rd$party$APIs$like$senDment$analysis)
• Mandrill/Mailgun$(sending/receiving$emails) • Twilio$(sending$SMS)
Logging&and&Monitoring&101 • Knowing(when(the(site(is(unreachable • Logging(uncaught(PHP(and(JS(errors • Finding(breaking(changes(from(libraries • Making(sure(the(Queue(processor(will(always(be( running
Logging&and&Monitoring&101 • Knowing(when(the(site(is(unreachable Pingdom • Logging(uncaught(PHP(and(JS(errors • Finding(breaking(changes(from(libraries Sentry,.New.Relic •
Making(sure(the(Queue(processor(will(always(be( running Supervisor
Case%study%#1:%Queues
Queues%in%Laravel Queue::push( 'SendEmail@send', array('thread_id' => 2) ); OR Queue::push(function($job) use
($id) { Account::delete($id); $job->delete(); });
Queues%in%Doorbell.io%.%New%feedback 1. Queue&closure 2. Closure&loops&through&email&addresses&to&no7fy 3. Send&email 4. Delete&job
Problem(#1:(Dele-ng(the(job(at(the(end // Done with the job, delete it $job->delete(); If#an#error#occurs,#the#job#never#gets#deleted.
There%was%no%maximum%number%of%tries. So#it#runs#again,#and#again,#and#again,#and#again,# and....
Problem(#1(solu-on Quick&fix: 1. Manually)delete)job)from)Queue 2. Stop)using)the)Queue)for)this)specific)problem Long%term*fix: Figure'out'why'the'Queue'processor'failed
Problem(#2 A"good"message:
Problem(#2 A"bad"message: This%means%Greek%in%the%serialized%data...
Which%leads%to... Blocked(Queue Saved&by Because'CPU'usage'was'100%
Moral&of&the&story Moved&the&$job->delete()&call&to&the&top&of&the& func0on,&so&it&won't&keep&retrying&forever Make%sure%you%fix%the%root%cause%of%the%problem,%or% you'll%have%the%same%thing%happening%again
Case%study%#2:%External%services
Case%study%#2:%External%services • Easily(add(func.onality(to(applica.on((sen.ment( analysis,(etc) • They(break,(and(it's(out(of(your(control
Examples • Sen%ment(analysis(failed(occasionally • Incoming(webhooks(from(Mailgun(failed • FogBugz(makes(a(change(to(authen%ca%on
Updated'Stack • Pingdom • New,Relic • Sentry • Supervisor •
Papertrailapp.com • Custom0dashboard
Papertrail
Logging&in&PHP Good$library$to$use:$Monolog h4ps:/ /github.com/Seldaek/monolog
Custom'Dashboard Basic,'but'enough'to'see'threads'with'no'sen3ment.
Moral&of&the&story Logs%hosted%on%a%server%don't%allow%you%to%be%reac5ve
Case%study%#3:%Your%own%bugs,%and% mysteries
Example(#1:(Innocent(looking(commit Saves&making&a&query&to&the&sen3ment&analysis&API
Reality(of(commit Hard%coded%every%new%feedback%thread%to%be% posi5ve,%without%analyzing... Which%leads%to:
Example(#2:(Stuck(queue,(New(Relic(doesn't( report(CPU(100% For$reasons$s)ll$unknown$to$me,$the$queue$got$stuck,$ and$didn't$know$it. This%means: • Not%running%sen-ment%analysis • No%email%no-fica-ons%sent%for%new%feedback% threads%or%replies
Even%worse... People&reported&on&Doorbell&itself&the&bug,&and&I&got& no&no6fica6on...
Report'#1
Report'#2
Solu%on'#1:'Charts Replies'per'day
Solu%on'#1:'Charts Sen$ment'analysis'of'new'threads'per'day'now
Solu%on'#1:'Charts Sen$ment'analysis'of'new'threads'per'day'before'fix
Solu%on'#2:'Extend'Custom'Dashboard
Solu%on'#3:'Email'report'cron Cron%running%every%10%minutes,%le3ng%me%know%if%the% queue%is%not%empty.
Conclusion • It$is$necessary • Good$monitoring/logging$is$possible$on$a$budget • Reac8ve$not$proac8ve • Peace$of$mind
Ques%ons?