Debugging Live Python Web Applications¶
Graham Dumpleton (mod_wsgi author, New Relic)
Amjith (New Relic, will be presenting this at DjangoCon US0
(Many details missing - will link to slideshare once the slides are up)
Debugging¶
Can’t always duplicate problems in a devel environment
Debugging live servers can be dangerous - crash the site - corrupt data - expose customer data
Tools to manage risk - use software to restrict access - script changes - test beforehand
Passive monitoring¶
Safest approach
Needs to be set up in advance
Log file analysis tools
Capture Python exceptions (e.g. Sentry)
Monitor the server as whole
- Application monitoring (this is what Graham does for a living at New Relic)
- (For open source custom equivalents, Graphite counters are a good option)
Web page performance analysis - resource timing spec coming from W3C
Reaching the limit¶
Passive monitoring eventually gets to opaque blocks
Can add more monitoring hooks, if you can change the code
New Relic supports configuration and monkey patching at runtime, and custom setups can do this, too.
Problem is you have to deploy a new build to make this happen
Thread Sampling and Profiling¶
Full profiling is too slow for production
Periodic sampling can pick up big consumers of time
Targeted profiling can profile a function sometimes to minimise overhead to the point of allowing it in production (just needs a fairly simple decorator/context manager)
Still requires redeployment to gather more data
Browser tools¶
Can query a bit more, but still can’t change the server
Interactive debuggers¶
Can give full access, but can break the running application
New tool: ispyd¶
https://github.com/GrahamDumpleton/wsgi-shell (originally wsgi only, hence the misnamed repo)
Limited access
Configure plugins to provide specific commands
Limits access (but you can enable the ‘console’ option for the Python plugin if you want)
Can change configuration on the fly (e.g. New Relic plugin)
See the slides for more :)
This looks really cool with a lot of potential
Summary¶
Monitoring is essential to detect the existence of problems, and to know where to start looking.
Create defined, controlled mechanisms to perform detailed queries for deeper dives into production problems that can’t be reproduced in development
Hopes ispyd may catch on as a standard approaching for live debugging in a controlled manner (this is the first real public announcement)