Observability - everything a developer should know


December 6, 2019

Observability - everything a developer should know

Observability - everything a developer should know

Observability has become an essential practice, especially for DevOps teams. Apparently with the rise of new techs and approaches like the cloud, microservices, serverless, containers and more they are pushing software speed to the highest while reducing friction in getting code to production. They are also creating complex systems. Therefore systems and software need to be observable. 

Observability is being able to ask questions about what your software or systems are doing and get answers about what they are doing. So different from metrics, Alerts, traces, logs or monitoring, it’s more than just knowing if something is up or down, it's able to say; the software’s are doing these specific actions, and this is what we can do to make them better.  

Today’s post is about everything you need to know about observability. We aren’t looking to bore you with endless writing about the latest buzzword in DevOps, but we are going to highlight the most relevant answers about observability. 

So let’s get started!

Defining Observability

To better explain this concept, we are going to highlight the definition of observability, as mentioned in Wikipedia. “Observability is a proportion of how well internal states of a system can be inferred from knowledge of its external outputs.” In simple words, it allows you to understand the internal processes of your production systems by asking questions from the outside. For instance, how things often work in theory can turn out different in reality. Let’s say we have an excellent runbook for monitoring our production systems. Despite following every instruction, customers often complain about issues even when your logs look good. So what does this tell us? Monitors for metrics alone aren’t enough any longer; you need to observe your systems from this point.

The Need for Observability

Observability is significant today when we consider both the qualities of present-day applications and the pace at which they're being deployed. For instance, let's assume we are working with a simple application like a WordPress site, its seamless nowadays to control its stability; you can place monitors for the entire framework and still get the results you need. However, times are changing, and with the verge of new technologies like cloud, microservices, containers, serverless, and a lot of combinations of these technologies, almost everyone is working with distributed systems. Consequently, systems become complicated, and the number of failures that a system can get increases. As your system expands in usability and complexity, new problems evolve and you will have to deal with them regularly. 

Observing Systems

Whether outside or inside the system, It’s important to note that the system reveals vital information that can be used for observability. A quick way to start making systems observable requires collecting all sorts of metrics from the application, such as Network data, disk metric or CPU memory from the host’s infrastructure. Another important way to observe systems is by including logs from the application or cloud services. These logs include Redis, AWS Cloudwatch metrics and NGINX. The instrumentation of this log is very valuable in observing the internal processes of a system when in production. The best part is that we have badass tools out there, like Nerd.vision that you can use to measure the three pillars of observability (Logs, Traces, and Metrics) from within the applications. 

Using Observability to solve unknown problems

Observability is all just about answering questions about your production systems using data. However, making your production systems observable isn’t all about solving problems. Well, you must continue to measure and tests all the information you have and think about whether it is value to the development process. 

An observable system goes beyond putting monitoring in place or having a site reliability engineering (SRE) team carefully deploy and run the systems. It involves having a solid knowledge of the possibilities of the system’s main components. Having such an experience could be based on the later choice of metrics, proper alert customization, and fault recovery. 

Observability stands as a feature that needs to be woven into a system from the time of its design so that; a system can be created in a realistic manner that allows for tests even in production.  It doesn’t end there, and it will enable a system to be tested to track and measure any hard, actionable failure modes so that the results can be surfaced even if the system has been deployed. This same feature allows a system to be deployed in an incremental manner such that a rollback can be triggered if a particular metric deviates from the baseline of production. And lastly, an observable system can provide reports about the health and behavior of the system when serving real traffic so that the system can be understood, and quickly debugged. 

By this, observability will help teams write better code, ship more stable software, deploy faster, and deliver better experiences to our customers. Another point is, observability is not just for software developers and engineers, a product manager needs to know the behavior and health of the application or systems pushed or launched if it's performing as instructed, and if it’s not, how can it be changed.

As infrastructures and applications continue to expand and get more complicated, a full-blown observability platform becomes increasingly necessary to bridge the gap in production. However before you hit the buy observability button, try listening to top industry players. For instance, you can listen to the speakers at the Monitorama Conference as you will gain more knowledge about the industry impact of observability. 



Nick is our Marketing Owner and works from our UK office, he has a wealth of experience in digital & data marketing and is a Certified Scrum Product Owner.