SlideShare une entreprise Scribd logo
1  sur  59
What your javascript does when you’re not around
@eanakashima
about://
frontend / web / product
engineer @ honeycomb.io
Vue.js
Many of us are still more likely to be paged for a
server issue
that affects no one than
browser issue
that affects everyone
Building browser app visibility
How much javascript must I sit through
A saga in three parts
I. How we instrument Honeycomb
II. Making sense of your weird browser data
III. How this changes everything writing web apps
Honeycomb UI: React, SCSS, go templates, and lots of data
I. How we instrument Honeycomb
The MVP browser
monitoring toolkit
● Performance
● RAIL model
● Loading metrics: page load time,
resource load time, first paint.
● Errors
● An event per client-side javascript
error, with metadata like user id,
browser version, current page.
RAIL performance model
https://developers.google.com/web/fundamentals/performance/rail
The MVP browser
monitoring toolkit
● Performance
● RAIL model
● Loading metrics: page load time,
resource load time, first paint.
● Errors
● An event per client-side javascript
error, with metadata like user id,
browser version, current page.
The MVP browser
monitoring tools
● Performance
● Honeycomb
● We also use SignalFx
● Other TSDBs work great too
● Errors
● Sentry
● Bugsnag
● TrackJS, Rollbar, & many more
The MVP browser
monitoring code
● Performance
● Write a custom thing
● But actually, use Boomerang
● Errors
● Sentry’s Raven JS is o/s
● So is Bugsnag’s
● … or write a custom thing (no)
Browser instrumentation is different
What questions are we trying to answer?
● Regressions (performance, errors)
● Product usage (analytics)
● Device capabilities (???)
Browser instrumentation is different
What are we trying to find?
● The Ghost of Code Past
● The Ghost of Code Present
● The Ghost of Code Future (!!!)
Honeycomb UI: what we graph
// Example Browser Event
{
// Usage
type: "page-load",
page_type: "/:team/datasets/:dataset”,
request_id: 123456,
ab_group_touch_ui: true,
ab_group_multi_team_chat: false,
// Performance / Regression
page_load_time_ms: 2145,
asset_version: "1.232.90"
canary: false,
// Capabilities
user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) SomeBrowser/123.45"
window_height: 900,
window_width: 1245,
feature_support_emoji: true,
feature_support_service_worker: false,
}
II. Weird browser data
Frontend errors: the easy ones
• Exception Class:
• Message:
• Stacktrace[0]:
• Timing:
• Trend:
ReferenceError
this.drawGraph is undefined
/static/components/timeline.jsx:19
Within 2s of page load
Constant low volume
Frontend errors: the less easy ones
• Exception Class:
• Message:
• Stacktrace[0]:
• Timing:
• Trend:
NS_ERROR_XPC_SECURITY_MANAGER_VETO
NS_ERROR_XPC_SECURITY_MANAGER_VETO:
JS frame :: <TOP_LEVEL>
Within 2s of page load
happened a handful of times
but to only 1 user
1. It’s in a noisy room
1. It’s in a noisy room
• Exception Class:
• Message:
• Stacktrace[0]:
• Release stage:
• Timing:
• Trend:
Error
cannot find module “bind-all"
https://cdn.[some 3rd party].com/analytics.js/v1/QTk.../analytics.min.js:1 - o
100% Production
Within 5s of page load
1 big spike
1. It’s in a noisy room: Ghostery data
1. It’s in a noisy room
• Exception Class:
• Message:
• Stacktrace[0]:
• Release stage:
• Timing:
• Trend:
Error
cannot find module “bind-all"
https://cdn.[some 3rd party].com/analytics.js/v1/QTk.../analytics.min.js:1 - o
100% Production
Within 5s of page load
1 big spike
2. It’s wandered off someplace
2. It’s wandered off someplace
// Don’t believe in this
var isProduction =
window.location.hostname === 'ui.honeycomb.io';
3. It’s not showing up
3. It’s not showing up
3. It’s not showing up
• Exception Class:
• Message:
• Stacktrace[0]:
• Timing:
• Trend:
ReferenceError
Uncaught ReferenceError: App is not defined
/static/main.js:1 - anonymous
Within 5s of page load
Sporadic, many users
<!-- Synchronously load first file -->
<script
src="https://ourcdn.net/bootstrapper.js"
crossorigin="anonymous">
</script>
<script
src=“https://ourcdn.net/main.js"
crossorigin="anonymous"
async>
</script>
3. It’s not showing up
• Exception Class:
• Message:
• Stacktrace[0]:
• Timing:
• Trend:
Warning
Warning: bootstrapping script failed to load
/static/main.js:1 - anonymous
Within 5s of page load
Sporadic, many users
3. It’s not showing up
Simulate this failure mode in development
4. It’s finding new use cases
4. It’s finding new use cases
• Exception Class:
• Message:
• Stacktrace[0]:
• Trend:
“waking up dev”
😈
<anonymous>:1
Just once
4. It’s finding new use cases
Developers are weird
4. It’s finding new use cases
Developers are weird, part 2
5. It’s forcing us to change how we do things
Our browser
monitoring toolkit
● Performance
● Honeycomb
● We also use SignalFx
● Other TSDBs work great too
● Errors
● Sentry
● Bugsnag
● TrackJS, Rollbar, & many more
Our browser
monitoring toolkit
● Metrics
● Server utilization stats
● Timings and counts
● Events
● Significant actions
● Have associated metadata
● Also timings and counts
Our browser
monitoring toolkit
● Metrics
● Server utilization stats
● Timings and counts
● Events
● Significant actions
● Have associated metadata
● Also timings and counts
Log all important events,
not just errors
○error warning info
UX monitoring: Refresh tracking
UX monitoring: Rage click tracking
• Installed fonts
• Screen dimensions & color depth
• Browser language
• Online/offline status
• Emoji support
• Page visibility (backgrounded?)
• Connection type
• Support for emerging browser APIs
• Geographical location (using a library)
Available via the browser
(now or soon)
• A/B test groups
• JS asset version
• CSS asset version
• Canary deploy?
• User ID / User Name
• Team ID / Team Name
• Plan type
• … more domain things relevant to your app
…plus data you provide
What now?
Browser monitoring
is ready now
Frontend devs should get paged
Testing everything everywhere is dead
The monitoring team doesn’t know the js
The best tool is the one your team will use
For web to win, browser visibility required
📱
Thank you!
@eanakashima
honeycomb.io

Contenu connexe

Tendances

Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
Rob Davarnia
 
Building a Single-Page App: Backbone, Node.js, and Beyond
Building a Single-Page App: Backbone, Node.js, and BeyondBuilding a Single-Page App: Backbone, Node.js, and Beyond
Building a Single-Page App: Backbone, Node.js, and Beyond
Spike Brehm
 
7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites
oazabir
 

Tendances (20)

Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
 
AngularJS - Javascript framework for superheroes
AngularJS - Javascript framework for superheroesAngularJS - Javascript framework for superheroes
AngularJS - Javascript framework for superheroes
 
Making Single Page Applications (SPA) faster
Making Single Page Applications (SPA) faster Making Single Page Applications (SPA) faster
Making Single Page Applications (SPA) faster
 
Le jeu vidéo à la rescousse du web
Le jeu vidéo à la rescousse du webLe jeu vidéo à la rescousse du web
Le jeu vidéo à la rescousse du web
 
Building a Single-Page App: Backbone, Node.js, and Beyond
Building a Single-Page App: Backbone, Node.js, and BeyondBuilding a Single-Page App: Backbone, Node.js, and Beyond
Building a Single-Page App: Backbone, Node.js, and Beyond
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
 
06 Javascript
06 Javascript06 Javascript
06 Javascript
 
Mvvm knockout vs angular
Mvvm knockout vs angularMvvm knockout vs angular
Mvvm knockout vs angular
 
Thinking in Components
Thinking in ComponentsThinking in Components
Thinking in Components
 
Depurando VBScript no InduSoft Web Studio
Depurando VBScript no InduSoft Web StudioDepurando VBScript no InduSoft Web Studio
Depurando VBScript no InduSoft Web Studio
 
7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites7 tips for javascript rich ajax websites
7 tips for javascript rich ajax websites
 
Vue JS Intro
Vue JS IntroVue JS Intro
Vue JS Intro
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
 
ASP .NET MVC - best practices
ASP .NET MVC - best practicesASP .NET MVC - best practices
ASP .NET MVC - best practices
 
Choosing a JavaScript Framework
Choosing a JavaScript FrameworkChoosing a JavaScript Framework
Choosing a JavaScript Framework
 
Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0
 
Modern Applications With Asp.net Core 5 and Vue JS 3
Modern Applications With Asp.net Core 5 and Vue JS 3Modern Applications With Asp.net Core 5 and Vue JS 3
Modern Applications With Asp.net Core 5 and Vue JS 3
 
The Art of AngularJS in 2015
The Art of AngularJS in 2015The Art of AngularJS in 2015
The Art of AngularJS in 2015
 
Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd
Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd
Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd
 
Ajax Abuse Todcon2008
Ajax Abuse Todcon2008Ajax Abuse Todcon2008
Ajax Abuse Todcon2008
 

Similaire à What Your JavaScript Does When You're Not Around (Influx Days 2017 Edition)

Win j svsphonegap-damyan-petev-mihail-mateev
Win j svsphonegap-damyan-petev-mihail-mateevWin j svsphonegap-damyan-petev-mihail-mateev
Win j svsphonegap-damyan-petev-mihail-mateev
Mihail Mateev
 
Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)
Michael Dobe, Ph.D.
 
Isomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassIsomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master Class
Spike Brehm
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)
Jia Mi
 
jQuery Conference San Diego 2014 - Web Performance
jQuery Conference San Diego 2014 - Web PerformancejQuery Conference San Diego 2014 - Web Performance
jQuery Conference San Diego 2014 - Web Performance
dmethvin
 

Similaire à What Your JavaScript Does When You're Not Around (Influx Days 2017 Edition) (20)

(In)Security Implication in the JS Universe
(In)Security Implication in the JS Universe(In)Security Implication in the JS Universe
(In)Security Implication in the JS Universe
 
Client side production monitoring using - SyncApp Tool
Client side production monitoring using - SyncApp ToolClient side production monitoring using - SyncApp Tool
Client side production monitoring using - SyncApp Tool
 
SenchaCon 2016: Expect the Unexpected - Dealing with Errors in Web Apps
SenchaCon 2016: Expect the Unexpected - Dealing with Errors in Web AppsSenchaCon 2016: Expect the Unexpected - Dealing with Errors in Web Apps
SenchaCon 2016: Expect the Unexpected - Dealing with Errors in Web Apps
 
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScaleGDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
 
Using Modern Browser APIs to Improve the Performance of Your Web Applications
Using Modern Browser APIs to Improve the Performance of Your Web ApplicationsUsing Modern Browser APIs to Improve the Performance of Your Web Applications
Using Modern Browser APIs to Improve the Performance of Your Web Applications
 
Win j svsphonegap-damyan-petev-mihail-mateev
Win j svsphonegap-damyan-petev-mihail-mateevWin j svsphonegap-damyan-petev-mihail-mateev
Win j svsphonegap-damyan-petev-mihail-mateev
 
Real time web
Real time webReal time web
Real time web
 
orcreatehappyusers
orcreatehappyusersorcreatehappyusers
orcreatehappyusers
 
orcreatehappyusers
orcreatehappyusersorcreatehappyusers
orcreatehappyusers
 
Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)
 
Lightning Talk: JavaScript Error Handling
Lightning Talk: JavaScript Error HandlingLightning Talk: JavaScript Error Handling
Lightning Talk: JavaScript Error Handling
 
JavaOne 2015: Top Performance Patterns Deep Dive
JavaOne 2015: Top Performance Patterns Deep DiveJavaOne 2015: Top Performance Patterns Deep Dive
JavaOne 2015: Top Performance Patterns Deep Dive
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1) External JavaScript Widget Development Best Practices (updated) (v.1.1)
External JavaScript Widget Development Best Practices (updated) (v.1.1)
 
Eureko frameworks
Eureko frameworksEureko frameworks
Eureko frameworks
 
Isomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master ClassIsomorphic JavaScript: #DevBeat Master Class
Isomorphic JavaScript: #DevBeat Master Class
 
Transforming the web into a real application platform
Transforming the web into a real application platformTransforming the web into a real application platform
Transforming the web into a real application platform
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)
 
jQuery Conference San Diego 2014 - Web Performance
jQuery Conference San Diego 2014 - Web PerformancejQuery Conference San Diego 2014 - Web Performance
jQuery Conference San Diego 2014 - Web Performance
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 

What Your JavaScript Does When You're Not Around (Influx Days 2017 Edition)

  • 1. What your javascript does when you’re not around @eanakashima
  • 2. about:// frontend / web / product engineer @ honeycomb.io
  • 3.
  • 4.
  • 5.
  • 7.
  • 8.
  • 9. Many of us are still more likely to be paged for a server issue that affects no one than browser issue that affects everyone
  • 10. Building browser app visibility
  • 11. How much javascript must I sit through A saga in three parts I. How we instrument Honeycomb II. Making sense of your weird browser data III. How this changes everything writing web apps
  • 12. Honeycomb UI: React, SCSS, go templates, and lots of data
  • 13. I. How we instrument Honeycomb
  • 14. The MVP browser monitoring toolkit ● Performance ● RAIL model ● Loading metrics: page load time, resource load time, first paint. ● Errors ● An event per client-side javascript error, with metadata like user id, browser version, current page.
  • 16. The MVP browser monitoring toolkit ● Performance ● RAIL model ● Loading metrics: page load time, resource load time, first paint. ● Errors ● An event per client-side javascript error, with metadata like user id, browser version, current page.
  • 17. The MVP browser monitoring tools ● Performance ● Honeycomb ● We also use SignalFx ● Other TSDBs work great too ● Errors ● Sentry ● Bugsnag ● TrackJS, Rollbar, & many more
  • 18. The MVP browser monitoring code ● Performance ● Write a custom thing ● But actually, use Boomerang ● Errors ● Sentry’s Raven JS is o/s ● So is Bugsnag’s ● … or write a custom thing (no)
  • 19. Browser instrumentation is different What questions are we trying to answer? ● Regressions (performance, errors) ● Product usage (analytics) ● Device capabilities (???)
  • 20. Browser instrumentation is different What are we trying to find? ● The Ghost of Code Past ● The Ghost of Code Present ● The Ghost of Code Future (!!!)
  • 21. Honeycomb UI: what we graph
  • 22. // Example Browser Event { // Usage type: "page-load", page_type: "/:team/datasets/:dataset”, request_id: 123456, ab_group_touch_ui: true, ab_group_multi_team_chat: false, // Performance / Regression page_load_time_ms: 2145, asset_version: "1.232.90" canary: false, // Capabilities user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) SomeBrowser/123.45" window_height: 900, window_width: 1245, feature_support_emoji: true, feature_support_service_worker: false, }
  • 24. Frontend errors: the easy ones • Exception Class: • Message: • Stacktrace[0]: • Timing: • Trend: ReferenceError this.drawGraph is undefined /static/components/timeline.jsx:19 Within 2s of page load Constant low volume
  • 25. Frontend errors: the less easy ones • Exception Class: • Message: • Stacktrace[0]: • Timing: • Trend: NS_ERROR_XPC_SECURITY_MANAGER_VETO NS_ERROR_XPC_SECURITY_MANAGER_VETO: JS frame :: <TOP_LEVEL> Within 2s of page load happened a handful of times but to only 1 user
  • 26. 1. It’s in a noisy room
  • 27. 1. It’s in a noisy room • Exception Class: • Message: • Stacktrace[0]: • Release stage: • Timing: • Trend: Error cannot find module “bind-all" https://cdn.[some 3rd party].com/analytics.js/v1/QTk.../analytics.min.js:1 - o 100% Production Within 5s of page load 1 big spike
  • 28. 1. It’s in a noisy room: Ghostery data
  • 29. 1. It’s in a noisy room • Exception Class: • Message: • Stacktrace[0]: • Release stage: • Timing: • Trend: Error cannot find module “bind-all" https://cdn.[some 3rd party].com/analytics.js/v1/QTk.../analytics.min.js:1 - o 100% Production Within 5s of page load 1 big spike
  • 30. 2. It’s wandered off someplace
  • 31. 2. It’s wandered off someplace
  • 32. // Don’t believe in this var isProduction = window.location.hostname === 'ui.honeycomb.io';
  • 33. 3. It’s not showing up
  • 34. 3. It’s not showing up
  • 35. 3. It’s not showing up • Exception Class: • Message: • Stacktrace[0]: • Timing: • Trend: ReferenceError Uncaught ReferenceError: App is not defined /static/main.js:1 - anonymous Within 5s of page load Sporadic, many users
  • 36. <!-- Synchronously load first file --> <script src="https://ourcdn.net/bootstrapper.js" crossorigin="anonymous"> </script> <script src=“https://ourcdn.net/main.js" crossorigin="anonymous" async> </script>
  • 37. 3. It’s not showing up • Exception Class: • Message: • Stacktrace[0]: • Timing: • Trend: Warning Warning: bootstrapping script failed to load /static/main.js:1 - anonymous Within 5s of page load Sporadic, many users
  • 38. 3. It’s not showing up Simulate this failure mode in development
  • 39. 4. It’s finding new use cases
  • 40. 4. It’s finding new use cases • Exception Class: • Message: • Stacktrace[0]: • Trend: “waking up dev” 😈 <anonymous>:1 Just once
  • 41. 4. It’s finding new use cases Developers are weird
  • 42. 4. It’s finding new use cases Developers are weird, part 2
  • 43. 5. It’s forcing us to change how we do things
  • 44. Our browser monitoring toolkit ● Performance ● Honeycomb ● We also use SignalFx ● Other TSDBs work great too ● Errors ● Sentry ● Bugsnag ● TrackJS, Rollbar, & many more
  • 45. Our browser monitoring toolkit ● Metrics ● Server utilization stats ● Timings and counts ● Events ● Significant actions ● Have associated metadata ● Also timings and counts
  • 46. Our browser monitoring toolkit ● Metrics ● Server utilization stats ● Timings and counts ● Events ● Significant actions ● Have associated metadata ● Also timings and counts
  • 47. Log all important events, not just errors ○error warning info
  • 49. UX monitoring: Rage click tracking
  • 50. • Installed fonts • Screen dimensions & color depth • Browser language • Online/offline status • Emoji support • Page visibility (backgrounded?) • Connection type • Support for emerging browser APIs • Geographical location (using a library) Available via the browser (now or soon)
  • 51. • A/B test groups • JS asset version • CSS asset version • Canary deploy? • User ID / User Name • Team ID / Team Name • Plan type • … more domain things relevant to your app …plus data you provide
  • 54. Frontend devs should get paged
  • 56. The monitoring team doesn’t know the js
  • 57. The best tool is the one your team will use
  • 58. For web to win, browser visibility required 📱