Here at OverOps we’re in the error tracking business. Each day we track more than 500,000 errors coming from hundreds of different companies. Errors across different machines, multithreaded errors, errors involving 3rd party libraries, you name it. Our goal building OverOps was to track code that led to errors and slowdowns. We dreamed of a place where we could view information that was not available before, even in log files.
Dreams Do Come True – Our New Errors Viewer
OverOps records variable values as they were in each frame of the stack. We were looking for a way to allow users to easily scan the stack and spot the variables that caused the error. How cool would it be, we thought, if we could scan the code that led to an error with a single scroll? Pretty cool. So we built it – A new way to view server errors:
Looking Inside the Monster
On the left of this new screen you can see the call stack that led to an exceptions or a logged error (screenshot below). Frames with a glasses icon represent frames with recorded variables. To reduce noise, OverOps only records variable values that might have led to the error. Frames marked with a pencil icon contain code that was recently modified. Since new bugs often crawl out of new code, highlighting these parts can help tracking them.
If one machine invoked an API call on another machine which caused an error, you’ll be able to see the entire path. The cross-machine analysis works if you’re sending an HTTP request using Java’s standard APIs or any popular 3rd party library.
The Prime Suspects
Scooting over to the right – the prime suspects. Here you can see your code and get the exact variable values that led to each error as they were when it happened. Quickly scroll over all the methods that led to the error. Recorded variables are highlighted and when hovering you can see the variable value as it was at the moment of the error. If it’s a complex object with fields, you can view them as well.
How do we display code? To provide max security for source code, OverOps encrypts the user’s code using a 256-bit secret AES key that can be generated locally.
The Rest is History
If this exception happened more than once you can toggle between different recordings and compare the stack and variable values. For exceptions that happen dozens, hundreds, thousands or millions of times, we limit the recordings to a few dozen in order to keep the overhead minimal.
This post is now in Spanish.