SlideShare a Scribd company logo
Developing highly
instrumented applications
with minimal effort
Tim Hobson
Principal Engineer, Chief Caffeine Officer - Intuit
About Me

2
Agenda
Concepts
• Quality Data
• Application
Instrumentation
• Application
Logging

Theory
• Patterns
• Supporting
Frameworks
• Supporting
Components

Practice
• .Net Example
• Java Example
• Node.js Example

GOAL: You should be able to apply this to your application today
3
Concepts
If You Do Nothing…

OR

5
There’s No Free Lunch
Garbage
In, Garbage
Out

Insight!

6
Quality In, Insight Out
Most apps start with only the framework or
app server logging (or nothing!)
None of the above is interesting to the
business or the developer.
You can’t get if you don’t give – there are
many ways to give, and many classes of
data to provide.
7
Classes of System Output
System Instrumentation
• JMX/WMI/SNMP monitoring
• Apache/IIS/nginx access logs

App Logging

App Instrumentation

•
•
•
•

•
•
•
•

Intentional
Business Transactions
Overtly triggers alerts
Source of business
metrics
• Aids in troubleshooting
failures, bugs

Cross-cutting (free)
App Activity
Passively triggers alerts
Source of performance
data
• Source of usage data

8
Theory and
Best
Practices
Best Practices (© splunk>)
Create human readable events

Clearly timestamp events
Use key-value pairs
Be aware of multi-value fields
Log unique identifiers
10
Best Practices (© Tim)
Global timestamps (UTC – 2013-08-21
22:43:31,990)
Context setting (who/what/where/when/how)
Categories/taxonomy (what tier, what
component)
Timing (time everything!)
Security (never log sensitive data: password=***)
Consistency in naming
– (action=purchase; sale=oct13; productId=123123)
– (action=buy; promo=oct13; sku=123123)
11
Example Output
Context

2013-08-21 22:55:36,504; LogLevel=INFO;
sid=q3prv41kt511vzojytnx1d42; rid=6500583;
userLogin=(null); ipAddress=0.0.0.0; thread=249;
category=Web.Controllers.BaseWebController;
msg=RequestInfo; server=ws001prod;
url=https://myapp.com/account/logon; method=GET;
languages=en-US,en;q=0.8;
referrer=https://myapp.com/members/dashboard;
userAgent=Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/28.0.1500.95 Safari/537.36; userId=123456;
controller=Account; action=Logon;
Metrics
2013-08-21 22:55:36,519; LogLevel=INFO;
sid=q3prv41kt511vzojytnx1d42; rid=6500583;
userLogin=(null); ipAddress=0.0.0.0; thread=249;
category=TraceInterceptor;
timeTracing=Service.Users.GetUser, time=3;
12
Patterns
Pipeline
– Filter
– Interceptor

Dependency injection
– Proxy

Pointcuts/aspects

13
HTTP Pipelines
var app =
express();
app.use(func1);
app.use(func2);
app.use(func3);
app.use(func4);
app.use(func5);
app.use(func6);
app.use(func7);
app.use(func8);
app.listen(8080);

Java (from Oracle
Docs)

ASP.Net (from MSFT
Docs)
14

express.js
Dependency Injection
•

Enforces interface-based programming

•

Forbids circular references

•

Lends itself to testability

•

Flexibility in changing implementations

•

For our purposes: cross-cutting
capabilities

15
Intercepting Calls With Dynamic Proxies

Interceptor

Dependency
A

Implementation

DI Container

16

Interceptor

Interceptor

Proxy
Interceptor

Interceptor

Interceptor

Caller

Interceptor

Proxy

Interceptor

Interceptor

Proxy

Dependency
B
Supporting Frameworks
The Front
Door

The Inner
Sanctum

Annotations
& Attributes

• ASP.Net
Modules/ActionFi
lters
• Java Servlet
Filters/Spring
Interceptors
• Node.js
interceptors

• Unity Dynamic
Proxies
• Spring
@AspectJ
Pointcuts
• JavaScript
Mixins

• @Instrumentable
• [Instrumentable]

17
Supporting Components
.Net
• Log4Net
• NLog

Java

node.js

• LogBack
• SLF4J
• Log4J

18

• SenchaLabs
Connect
• Winston
Intervention!
Sample App Intervention
3 Platforms

3 Sample
Apps

20

3 Interventions
Goals
Leverage an HTTP pipeline for context

Leverage aspects for interception
Apply best practices

Minimize impact on existing code
21
MVC Music Store Intervention (Demo)
Missing dependency injection/interception framework: Unity
Missing logging library: Log4Net, Buche
1.
2.
3.
4.
5.
6.
7.
8.

Add DI framework (Unity)
Configure aspects (Interception)
Configure controller factory, container locator
Set up logger (Log4Net)
Configure log pattern and targets (Log4Net.xml)
Wire up logging interceptor
Wire up LogActionFilter and BaseLoggingController
Deploy!
22
Spring Pet Clinic Intervention (Demo)
1. Set up logger
a. Configure log pattern (to support context data)
b. Configure targets (rotating file)

2. Create LogAspect.java and @Instrumentable attribute
a. Capture calling context
b. Start/stop timing

3. Create LogInterceptor.java
a. Capture request metadata
b. Set MDC
c. Start/stop timing

4. Configure aspect bean
1. Configure interceptor bean
1. Annotate the methods we care about
23
NodeCellar Intervention (Demo)
Missing Interception Framework: Scarlet
Missing Logging Library: Winston
1.
2.
3.
4.
5.
6.

Set up Scarlet
Configure log pattern
Configure method interception
Create logging interceptor
Create LoggingFilter
Deploy!

24
Closing
Thoughts
Got Log? Now Get Intimate With Your App

Ops
Dashboards

Business
Dashboards

Quality
Assurance

Pro-Active Service
Degradation Alerting

SLA
Tracking

Security
Alerting

2
6

Customer
Support

Performance
Metrics

Pre-Release
Sanity
Testing
Key Takeaways
•

It is YOUR responsibility as a developer to
provide useful operational and business data.

•

It is not hard, and most of it is for free once you
have the patterns in place.

•

The same patterns and practices can be applied
to practically any platform, and any type of
application or service.

•

When you provide consistent and predictable
data others can build on your greatness
27
Get the Code
@hoserdude
Spring Pet Clinic Intervention:
https://github.com/hoserdude/spring-petclinic-instrumented
MVC Music Store Intervention:
https://github.com/hoserdude/mvcmusicstore-instrumented
NodeCellar Intervention:
https://github.com/hoserdude/nodecellar-instrumented

28
Intuit Speakers @ Silicon Code Camp 2013:
SATURDAY
9:45 a.m. - Ramakrishna Kollipara – “Complete Automation of Performance Testing”
1:45 p.m. - Joe Wells - “QBO: Journey From legacy Java app to a Client-side HTML5
app”
3:30 p.m. - Naga Addagadde & Sangeeta Narang – “Intuit APIs for Financial Transaction
Aggregation”
5:00 p.m. Ted Drake –“Hitting the Accessibility High Notes with ARIA”
SUNDAY
9:15 a.m. - Eugene Krivopaltsev –“Building Native Mobile Apps with Custom Views”
1:15 p.m. - Tim Hobson – “Developing Highly Instrumental Applications with Minimal
Effort”

For more information about joining our organization visit our booth or
connect with our onsite recruiter:
Chriscox_recruiter@intuit.com
You don't want to miss out on a chance to win this cool headset.
Stop by our booth to enter!
THANK YOU

Want to talk more?
I’ll be at the Intuit booth today 3-5 PM.

30

More Related Content

PPT
App Assessments Reloaded
PPTX
AppSec Pipeline - Velcocity NY 2015
ODP
Making security-agile matt-tesauro
PDF
Peeling the Onion: Making Sense of the Layers of API Security
PDF
Monitoring your API
PPTX
Splunk for Developers
PDF
Careful - APIs Inside: Testing and Monitoring for App Development
PDF
Making Continuous Security a Reality with OWASP’s AppSec Pipeline - Matt Tesa...
App Assessments Reloaded
AppSec Pipeline - Velcocity NY 2015
Making security-agile matt-tesauro
Peeling the Onion: Making Sense of the Layers of API Security
Monitoring your API
Splunk for Developers
Careful - APIs Inside: Testing and Monitoring for App Development
Making Continuous Security a Reality with OWASP’s AppSec Pipeline - Matt Tesa...

What's hot (20)

PPTX
DOES SFO 2016 - Scott Willson - Top 10 Ways to Fail at DevOps
PDF
Test driven development
PDF
Intro to DefectDojo at OWASP Switzerland
ODP
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
PPTX
MLconf NYC Josh Wills
ODP
Matt tesauro Lessons from DevOps: Taking DevOps practices into your AppSec Li...
ODP
DevOps, CLI, APIs, Oh My! Security Gone Agile
PDF
Build Your Open Source Performance Testing Platform in the Cloud
PDF
DevSecOps Fundamentals and the Scars to Prove it.
PDF
OWASP DefectDojo - Open Source Security Sanity
PDF
Merging Security with DevOps - An AppSec Perspective
PDF
Quality Built In @ Spotify
PDF
Taking AppSec to 11: AppSec Pipeline, DevOps and Making Things Better
PDF
Dan Cuellar
ODP
Building an Open Source AppSec Pipeline - 2015 Texas Linux Fest
PDF
Security with the Speed of Continuous Delivery
PDF
Building a Secure DevOps Pipeline - for your AppSec Program
PPTX
DockerCon SF 2019 - TDD is Dead
PDF
DevOps Unicorns
ODP
Building an Open Source AppSec Pipeline
DOES SFO 2016 - Scott Willson - Top 10 Ways to Fail at DevOps
Test driven development
Intro to DefectDojo at OWASP Switzerland
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
MLconf NYC Josh Wills
Matt tesauro Lessons from DevOps: Taking DevOps practices into your AppSec Li...
DevOps, CLI, APIs, Oh My! Security Gone Agile
Build Your Open Source Performance Testing Platform in the Cloud
DevSecOps Fundamentals and the Scars to Prove it.
OWASP DefectDojo - Open Source Security Sanity
Merging Security with DevOps - An AppSec Perspective
Quality Built In @ Spotify
Taking AppSec to 11: AppSec Pipeline, DevOps and Making Things Better
Dan Cuellar
Building an Open Source AppSec Pipeline - 2015 Texas Linux Fest
Security with the Speed of Continuous Delivery
Building a Secure DevOps Pipeline - for your AppSec Program
DockerCon SF 2019 - TDD is Dead
DevOps Unicorns
Building an Open Source AppSec Pipeline
Ad

Viewers also liked (9)

PPTX
A Data Viz Makeover: Approaches for Improving your Visualizations
PPTX
Les enfants intellectuellement précoces - Isabelle Louati
ODP
User Credential handling in Web Applications done right
PDF
Principles of Data Visualization
PDF
Cuadernillo de estimulos Wisc-IV Nº 01
PPT
Aplicación, Wisc-IV
PDF
PDF
Data Visualization Resource Guide (September 2014)
A Data Viz Makeover: Approaches for Improving your Visualizations
Les enfants intellectuellement précoces - Isabelle Louati
User Credential handling in Web Applications done right
Principles of Data Visualization
Cuadernillo de estimulos Wisc-IV Nº 01
Aplicación, Wisc-IV
Data Visualization Resource Guide (September 2014)
Ad

Similar to Developing Highly Instrumented Applications with Minimal Effort (20)

PPTX
Operating a High Velocity Large Organization with Spring Cloud Microservices
PDF
Monitoring and Instrumentation Strategies: Tips and Best Practices - AppSphere16
PPTX
Ml based detection of users anomaly activities (20th OWASP Night Tokyo, English)
PPTX
Twelve Factor - Designing for Change
PPTX
Innovate Better Through Machine data Analytics
PDF
No Devops Without Continuous Testing
PPTX
Testing for Logic App Solutions | Integration Monday
PPTX
Generative AI Application Development using LangChain and LangFlow
PPSX
Elastic-Engineering
PDF
AgileDC15 I'm Using Chef So I'm DevOps Right?
PDF
Listen to Your Machines: DevOps Analytics for Better Feedback Loops
PDF
Using Machine Learning to Understand Kafka Runtime Behavior (Shivanath Babu, ...
PPTX
SplunkLive! London 2016 Splunk for Devops
PPTX
Keeping up with PHP
PDF
Training Semester Report, Api Types of Apps
PDF
Building and deploying AI agents in Java
PDF
5 Steps to Jump Start Your Test Automation
PDF
IW14 Session: webMethods World
PPTX
DevOps Powered by Splunk
PDF
From Traction to Production Maturing your LLMOps step by step
Operating a High Velocity Large Organization with Spring Cloud Microservices
Monitoring and Instrumentation Strategies: Tips and Best Practices - AppSphere16
Ml based detection of users anomaly activities (20th OWASP Night Tokyo, English)
Twelve Factor - Designing for Change
Innovate Better Through Machine data Analytics
No Devops Without Continuous Testing
Testing for Logic App Solutions | Integration Monday
Generative AI Application Development using LangChain and LangFlow
Elastic-Engineering
AgileDC15 I'm Using Chef So I'm DevOps Right?
Listen to Your Machines: DevOps Analytics for Better Feedback Loops
Using Machine Learning to Understand Kafka Runtime Behavior (Shivanath Babu, ...
SplunkLive! London 2016 Splunk for Devops
Keeping up with PHP
Training Semester Report, Api Types of Apps
Building and deploying AI agents in Java
5 Steps to Jump Start Your Test Automation
IW14 Session: webMethods World
DevOps Powered by Splunk
From Traction to Production Maturing your LLMOps step by step

Recently uploaded (20)

PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Spectroscopy.pptx food analysis technology
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Approach and Philosophy of On baking technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPT
Teaching material agriculture food technology
PDF
cuic standard and advanced reporting.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Machine Learning_overview_presentation.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Spectroscopy.pptx food analysis technology
Chapter 3 Spatial Domain Image Processing.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Approach and Philosophy of On baking technology
MIND Revenue Release Quarter 2 2025 Press Release
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Network Security Unit 5.pdf for BCA BBA.
Programs and apps: productivity, graphics, security and other tools
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Spectral efficient network and resource selection model in 5G networks
Digital-Transformation-Roadmap-for-Companies.pptx
Teaching material agriculture food technology
cuic standard and advanced reporting.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Machine Learning_overview_presentation.pptx

Developing Highly Instrumented Applications with Minimal Effort

  • 1. Developing highly instrumented applications with minimal effort Tim Hobson Principal Engineer, Chief Caffeine Officer - Intuit
  • 3. Agenda Concepts • Quality Data • Application Instrumentation • Application Logging Theory • Patterns • Supporting Frameworks • Supporting Components Practice • .Net Example • Java Example • Node.js Example GOAL: You should be able to apply this to your application today 3
  • 5. If You Do Nothing… OR 5
  • 6. There’s No Free Lunch Garbage In, Garbage Out Insight! 6
  • 7. Quality In, Insight Out Most apps start with only the framework or app server logging (or nothing!) None of the above is interesting to the business or the developer. You can’t get if you don’t give – there are many ways to give, and many classes of data to provide. 7
  • 8. Classes of System Output System Instrumentation • JMX/WMI/SNMP monitoring • Apache/IIS/nginx access logs App Logging App Instrumentation • • • • • • • • Intentional Business Transactions Overtly triggers alerts Source of business metrics • Aids in troubleshooting failures, bugs Cross-cutting (free) App Activity Passively triggers alerts Source of performance data • Source of usage data 8
  • 10. Best Practices (© splunk>) Create human readable events Clearly timestamp events Use key-value pairs Be aware of multi-value fields Log unique identifiers 10
  • 11. Best Practices (© Tim) Global timestamps (UTC – 2013-08-21 22:43:31,990) Context setting (who/what/where/when/how) Categories/taxonomy (what tier, what component) Timing (time everything!) Security (never log sensitive data: password=***) Consistency in naming – (action=purchase; sale=oct13; productId=123123) – (action=buy; promo=oct13; sku=123123) 11
  • 12. Example Output Context 2013-08-21 22:55:36,504; LogLevel=INFO; sid=q3prv41kt511vzojytnx1d42; rid=6500583; userLogin=(null); ipAddress=0.0.0.0; thread=249; category=Web.Controllers.BaseWebController; msg=RequestInfo; server=ws001prod; url=https://myapp.com/account/logon; method=GET; languages=en-US,en;q=0.8; referrer=https://myapp.com/members/dashboard; userAgent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36; userId=123456; controller=Account; action=Logon; Metrics 2013-08-21 22:55:36,519; LogLevel=INFO; sid=q3prv41kt511vzojytnx1d42; rid=6500583; userLogin=(null); ipAddress=0.0.0.0; thread=249; category=TraceInterceptor; timeTracing=Service.Users.GetUser, time=3; 12
  • 13. Patterns Pipeline – Filter – Interceptor Dependency injection – Proxy Pointcuts/aspects 13
  • 14. HTTP Pipelines var app = express(); app.use(func1); app.use(func2); app.use(func3); app.use(func4); app.use(func5); app.use(func6); app.use(func7); app.use(func8); app.listen(8080); Java (from Oracle Docs) ASP.Net (from MSFT Docs) 14 express.js
  • 15. Dependency Injection • Enforces interface-based programming • Forbids circular references • Lends itself to testability • Flexibility in changing implementations • For our purposes: cross-cutting capabilities 15
  • 16. Intercepting Calls With Dynamic Proxies Interceptor Dependency A Implementation DI Container 16 Interceptor Interceptor Proxy Interceptor Interceptor Interceptor Caller Interceptor Proxy Interceptor Interceptor Proxy Dependency B
  • 17. Supporting Frameworks The Front Door The Inner Sanctum Annotations & Attributes • ASP.Net Modules/ActionFi lters • Java Servlet Filters/Spring Interceptors • Node.js interceptors • Unity Dynamic Proxies • Spring @AspectJ Pointcuts • JavaScript Mixins • @Instrumentable • [Instrumentable] 17
  • 18. Supporting Components .Net • Log4Net • NLog Java node.js • LogBack • SLF4J • Log4J 18 • SenchaLabs Connect • Winston
  • 20. Sample App Intervention 3 Platforms 3 Sample Apps 20 3 Interventions
  • 21. Goals Leverage an HTTP pipeline for context Leverage aspects for interception Apply best practices Minimize impact on existing code 21
  • 22. MVC Music Store Intervention (Demo) Missing dependency injection/interception framework: Unity Missing logging library: Log4Net, Buche 1. 2. 3. 4. 5. 6. 7. 8. Add DI framework (Unity) Configure aspects (Interception) Configure controller factory, container locator Set up logger (Log4Net) Configure log pattern and targets (Log4Net.xml) Wire up logging interceptor Wire up LogActionFilter and BaseLoggingController Deploy! 22
  • 23. Spring Pet Clinic Intervention (Demo) 1. Set up logger a. Configure log pattern (to support context data) b. Configure targets (rotating file) 2. Create LogAspect.java and @Instrumentable attribute a. Capture calling context b. Start/stop timing 3. Create LogInterceptor.java a. Capture request metadata b. Set MDC c. Start/stop timing 4. Configure aspect bean 1. Configure interceptor bean 1. Annotate the methods we care about 23
  • 24. NodeCellar Intervention (Demo) Missing Interception Framework: Scarlet Missing Logging Library: Winston 1. 2. 3. 4. 5. 6. Set up Scarlet Configure log pattern Configure method interception Create logging interceptor Create LoggingFilter Deploy! 24
  • 26. Got Log? Now Get Intimate With Your App Ops Dashboards Business Dashboards Quality Assurance Pro-Active Service Degradation Alerting SLA Tracking Security Alerting 2 6 Customer Support Performance Metrics Pre-Release Sanity Testing
  • 27. Key Takeaways • It is YOUR responsibility as a developer to provide useful operational and business data. • It is not hard, and most of it is for free once you have the patterns in place. • The same patterns and practices can be applied to practically any platform, and any type of application or service. • When you provide consistent and predictable data others can build on your greatness 27
  • 28. Get the Code @hoserdude Spring Pet Clinic Intervention: https://github.com/hoserdude/spring-petclinic-instrumented MVC Music Store Intervention: https://github.com/hoserdude/mvcmusicstore-instrumented NodeCellar Intervention: https://github.com/hoserdude/nodecellar-instrumented 28
  • 29. Intuit Speakers @ Silicon Code Camp 2013: SATURDAY 9:45 a.m. - Ramakrishna Kollipara – “Complete Automation of Performance Testing” 1:45 p.m. - Joe Wells - “QBO: Journey From legacy Java app to a Client-side HTML5 app” 3:30 p.m. - Naga Addagadde & Sangeeta Narang – “Intuit APIs for Financial Transaction Aggregation” 5:00 p.m. Ted Drake –“Hitting the Accessibility High Notes with ARIA” SUNDAY 9:15 a.m. - Eugene Krivopaltsev –“Building Native Mobile Apps with Custom Views” 1:15 p.m. - Tim Hobson – “Developing Highly Instrumental Applications with Minimal Effort” For more information about joining our organization visit our booth or connect with our onsite recruiter: Chriscox_recruiter@intuit.com You don't want to miss out on a chance to win this cool headset. Stop by our booth to enter!
  • 30. THANK YOU Want to talk more? I’ll be at the Intuit booth today 3-5 PM. 30

Editor's Notes

  • #7: Many products promise to provide insights and value from whatever data you throw at them. There’s no doubt they can provide something, but you can’t escape the law of GIGO.
  • #8: As a result, it’s on you as a developer, product manager and business to care about the data you are creating. This presentation will demonstrate some best practices on how to go about this, regardless of your platform.
  • #9: Now for some definitions. There is a lot of stuff generated by the system – let’s classify the stuff broadly and narrow on what I am going to be talking about.
  • #14: Quick review of patterns we’ll use. Interception is the secret sauce here. We want to be able to get in front of every call to every object or component in our system. That lets us see what data is being passed around, who is doing it, and how long it took.
  • #19: Indent the bullets