Choosing the right tools and ensuring an optimal software setup is an extremely important aspect of custom product development, especially once the app scales. In today’s article, we’ll go through the key tools for monitoring the health and key functionalities in custom web apps that handle around 200K requests monthly.
The life of an app doesn’t begin when we write the first line of code nor does it end at deployment. Instead, product development is a much more complex iterative process that starts with product discovery and continues as long as the application is active and in use. All product lifecycle stages require a proper set of tools that enable its design, development, maintenance, and improvements.
Kibana: when simple logging is not enough
In the beginning, you’ll be able to track events using simple logging. So once the code crashes, you check the logs and identify what caused it.
The next step is to start logging data/events to Elasticsearch – a popular analytics and search engine. With this in place, you will be able to use Kibana – a free open-source interface that enables visualization of the data stored in Elasticsearch. Kibana introduces a much nicer way of grouping and visualizing the data when compared to simple file logging. Thanks to that you can navigate through large amounts of data and extract actionable insights much more efficiently.
Prometheus: when you need proper event monitoring and alerting
Sooner or later, your software will reach maturity, and/or a set of its functionalities will become crucial for you business-wise. At that point, you’ll want to be sure that at least the key parts of your product are available at all times, and that your business doesn’t stop earning money for you.
In that case, both, logging the data and checking it manually, and data visualization won’t be sufficient for your growing needs. To keep the users satisfied and ensure your product is successful, apart from ensuring continuous availability, you’ll have to provide a response time of 500 ms or less. To do that effectively, instead of monitoring the performance yourself, you’ll need to switch to a solution that will track the feature and API performance for you and alert you about any downtime and suboptimal functioning. With this setup, you will be able to identify underperforming parts of the product, services, or part of the process, and improve your application accordingly.
Prometheus is a tool that does exactly the above. It’s an open-source monitoring system with a dimensional data model, flexible query language, efficient time-series database, and a modern alerting approach. Simply put, apart from collecting the performance information you need, Prometheus makes it possible to set up custom alerts that inform you when your system functioning doesn’t meet your requirements – when an action takes longer than expected or something doesn’t happen for a certain amount of time.
If you’re reluctant to switch from Elasticsearch to Prometheus because you don’t want to lose the visualizations, you should get familiar with Grafana. Grafana is an open-source analytics and interactive visualization tool. It provides charts, graphs, and alerts for web applications. It can be integrated with many different platforms. It’s a quite powerful platform. Definitely worth checking out.
Some examples from our project
In one of the projects that we’re currently working on, our team uses Grafana to monitor essential functionalities, and whenever an alert appears developers investigate whether the system is healthy or what changes might have caused the issues.
An important note here is to be thoughtful when it comes to alerts. To save your time and worry, when you set up the alerts, double-check that won’t get a false positive. It’s a quite complex topic, that probably deserves a separate article, but bear that in mind.
Going back to our project, we started implementing a different, more robust approach for an existing functionality that allows our part of the system to receive onboarding information. We set up monitoring for both of the methods in which the data can be sent to our system in order to receive notifications about the success/failure count on each of the implementations. We switched from the first implementation to the second one gradually so that we were able to know whether both of them were working properly and how many failures we were getting from each one of them.
How to choose application performance monitoring tools
Performance issues destroy your customer experience and might really harm your product. First of all, you need to log the data whenever possible. You never know when it might become useful when facing an issue in your system. Also, define the key parts of your application and whether you need to monitor them or not, and possibly how.
To increase your chances of success, you need to monitor whether your app is having performance issues at all times, and once they appear, have immediate access to all the necessary information about where they are and how to fix them. Our team can help you figure out and implement the best setup for your project. Let us know if you need any support in the development of your next web project.
Senior Software Developer
Full-Stack software developer focused mostly on Ruby, but in love with Elixir. Enjoys learning new things (patterns, programming languages). Besides programming spends free time on swimming, playing board games or ballroom dancing. Doesn't drink coffee ;)