Maximizing Uptime and Performance: Application Monitoring at MercuryWorks
Application monitoring is a crucial aspect of ensuring the performance and reliability of an application, whether it is in development or in production. It is important to know what is happening in an application. Logs and metrics will allow you to see how your application is doing and give you a better idea of baselines for performance. With these in place it is possible to set thresholds for what is abnormal for the application and give you the opportunity to quickly react to situations, or even proactively prevent issues. The following outlines some of the tools and technologies we use at MercuryWorks to successfully monitor and manage software application performance.
“If you can’t measure it, you can’t manage it.”
Azure Monitor is a service provided by Microsoft that allows you to collect, analyze, and act on telemetry from your Azure resources and applications. It provides a single source for monitoring Azure resources, both in the cloud and on-premises, and allows you to collect data from multiple sources, including Azure resources, Windows and Linux servers, and application logs. It also provides alerting, visualization, and analysis capabilities, as well as integration with other Azure services and third-party tools.
Azure Application Insights is a service provided by Microsoft Azure that allows developers to monitor the performance and usage of their applications. It provides features such as live metrics, diagnostic logging, and exception tracking, which can be used to troubleshoot and improve the performance of an application. Additionally, Application Insights can be integrated with other Azure services such as Azure Monitor and Azure Log Analytics to provide a more comprehensive view of an application’s performance and usage. While it is not set up to be as robust for application logs as Seq (see below), it does give the Ops team a single portal to look at requests and high level errors, and compare them to any issues in the infrastructure logs.
It is good to have a standard set of alerts that are set up for each application’s infrastructure. The specifics vary depending on whether the application is using PaaS or IaaS resources but the concepts for each are the same. We set up the metrics and thresholds to allow us to catch issues that occur in the infrastructure early but also don’t overwhelm the team with false alarms. Ongoing review and refinement is done on all alerts and thresholds are modified based on recent metrics for the application.
Availability tests are a type of software testing that assesses a system’s ability to function properly and remain accessible to users during normal and expected usage conditions. These tests typically include measures of the system’s uptime, responsiveness, and ability to handle traffic and user loads. Availability tests set up in Application Insights to help keep track the health of an application. These tests are set up in two varieties – HTTP Requests with status code checks, or checks to verify text in the content. A single application may have availability tests set for multiple pages of the application. Application Insights allows for checks from multiple regions which we adjust based on the user group for the application.
In Application Insights we can see the status (pass or fail) of the test and the response, which can be helpful when troubleshooting an application outage.
Seq is a centralized logging application that can ingest logs using various implementations. Seq provides a web-based user interface for searching and analyzing the log data, as well as an API for programmatic access to the data. It is often used for troubleshooting and monitoring systems, as well as for compliance and security purposes. You can send logs from C# applications using Serilog and from Node applications using bunyan. The logs are customizable and can include custom data. This data allows for more in-depth filtering and the ability to create detailed dashboards.
Default properties are set up in each application leveraging SEQ logging (i.e. Environment, Application) which allow us to create signals (filters) to more easily digest and pinpoint application issues. Signals also can be used to trigger automated actions, such as sending an email or SMS message or posting a message to a chat application, when a specific log event occurs. This enables developers to receive real-time notifications of problems in the application and respond quickly.
Dashboards within Seq can be used to display real-time and historical log data in a visual format, such as charts and tables. They can be used to monitor various aspects of an application or system, such as performance, errors, and security events. Users can create custom dashboards and widgets to display the data that is most relevant to them, and share them with others.
Azure Diagnostics is a feature of Azure that allows you to collect diagnostics data from Azure resources, such as virtual machines, web apps, and storage accounts. The collected data can be used for troubleshooting and monitoring the performance of these resources. Each Azure Resource has the ability to see more detailed logs depending on how Azure Diagnostics has been configured.
- App Service Logs can be set up to collect detailed application logs (viewed in the Kudu console)
- Azure Front Door and Virtual Machines (among others) can have diagnostic settings sent to Log Analytics which can be queried using KQL
It should be noted that Azure Diagnostics is a powerful tool, but it’s also important to be mindful of the storage and data transfer costs of keeping large amounts of data.
External Status Channels
In the world we live in even with the best written code and monitoring, there are always external points of failure (Azure, DNS, Azure DevOps). It is good to sign up for status notifications, monitor health status pages and support channels on social media to stay up to date with all third party resource statuses.
Not sure how best to monitor and manage your application’s performance? We’d be glad to help, contact us!
Application monitoring is a vital component of ensuring the smooth operation and functionality of an application. Whether it is in development or in production, monitoring is essential for maintaining performance and reliability. It is important to know what is happening in an application, and with the right tools and technologies in place, it is possible to monitor and manage software application performance effectively.
There are various tools and technologies available for monitoring and managing software application performance, such as the ones mentioned above; Azure Monitor and Application Insights, which can be used to collect, analyze, and act on telemetry from resources and applications. Centralized logging systems like Seq can also be used for troubleshooting and monitoring systems, as well as for compliance and security purposes. Additionally, setting up alerts and availability tests provides early warning of issues and ensures that the application remains accessible to users.
Evaluate the needs of your specific application and choose the right tools and technologies that best fit those needs. A combination of different tools and technologies may be needed to have a comprehensive view of the performance and usage of an application. If you’re struggling to figure out how best to monitor your applications, let our team of experts help you find the right tools and technologies. Contact us to learn more.