What is Application Performance Monitoring?
Performance Monitoring is a tool that enables end users, administrators and organizations to gauge and evaluate the performance of a given system. The concept of Application Performance Monitoring based on monitoring of website or complete application. For example, there is a number of tools available which perform nothing, but they check the website every minute. The following two things checked under this concept –
- How much time is specific URL taking to load?
- How much time a page or site was online?
To implement, use Prometheus Time-Series database to store the Real-Time data for a specific website.
Why we need Performance Monitoring?
- Is the application responds as it should?
- All backed processes executing the defined way?
- Which part of application architecture causing slow transaction processing?
- Is there any bug or error in application code?
- Is there any issue in the application server or the web front end?
Benefits of Enabling Performance Monitoring
- Application performance monitoring ensures high performance of the software.
- Better customer experience and fewer problems.
- It helps to identify the reason why assessing a specific endpoint is to slow.
- It also identifies what external services are accessible by the application.
- Provides accessibility to bottlenecks of code that are causing delay.
- It helps us to understand that how database access is impacting an overall application.
- Identification of a total number of Goroutines executed by a specific application.
Best Practises of Performance Monitoring
- Real User Monitoring
- Service Management
- System Monitoring
- Configuration Management
- Availability Monitoring
- Log Monitoring
- Error Monitoring
- Application Management
- Enforce SLA’s through API Monitoring
- Continuous Testing
- Proactive Monitoring
How to Adopt Performance Monitoring?
Overview of Prometheus database
Prometheus database cannot do anything individually, to get the complete results, require a visualization along with this database. For this different visualization tools used in the visualization of data stored in a Prometheus database.
Prometheus database provides a static graph whenever the query executed from this dashboard.
To get the results or graphs in more detail and dynamic way different visualization tools used. Nowadays, there are many visualization tools available compatible with Prometheus database. Such as Grafana is an excellent example to do visualization on a Prometheus database or visualize results in a dynamic and more detailed way. It is compatible with many databases and helps to perform visualization in a more detailed way.
What is a Metric?
Targeting a specific thing to check status for that particular things are referred to as a metric. Different things can be monitored such as current CPU status, memory usage or any specific endpoint.
What is Scrapping?
Prometheus server collects metrics from targets after hitting endpoints whenever endpoint hits, then it stores a result locally or remotely then again displays the result back in a Prometheus server.
To set that after much amount of time targets need to be scrapped, placed in the prometheus.yml file.
Whenever data stored in a Prometheus server after a specific endpoint of application, metrics details extracted by querying from a Prometheus's Time-Series database.
Whenever the need to get the data for metric stored in a Prometheus server, then in that case Query language called as PromQL used.
This query language named above is supported only due to reason because there is only this option to create interaction with Prometheus dashboard.
This language helps to make a query for metrics of specific endpoint targets.
Prometheus provides client-libraries in numerous languages to provide health-status of application. Prometheus is not only about application monitoring, Exporters monitor third-party systems like Linux Server, MySQL Daemon. An Exporter is software that extracts existing metrics from a third system and exports them to the metric format that the Prometheus server can understand.
Visualization at Prometheus server dashboard
Prometheus server dashboard used in visualization for metrics of a specific endpoint. How to build query correctly to get correct result form metrics of specific endpoints? After execution of query which is build, the result can either be visible at the console or visualized in a graphical format.
Visualization Layer with Grafana
Grafana is a Data Visualization and Monitoring tool to provide support for a Prometheus database as well as for other databases. It includes support for UI analyzing various metrics from a Prometheus server.
Access Grafana dashboard and Query support in Grafana
It provides support for PromQL query languages to make a query for various metrics using this dashboard.
Accessing a Grafana dashboard
The Grafana dashboard can be easily accessible by typing address for a Grafana in a browser; if the IP address along with port number found good then, in that case, the dashboard will be accessible. Whenever the dashboard will accessible, add a username and password to access the Grafana's dashboard or credentials required to work with a dashboard.
Alert Management with Prometheus Alert Manager
Prometheus also provide support for Alert management; referred as alert manager. While using this concept alerts can get either using Email or using Slack, or other notifications from the client.
Alert rules defined when an alert generates, to determine alert rules. Whenever a metric value is higher than a defined value of alert, then alert management component will generate an alert.
Internal architecture for Prometheus
The process of integrating application's endpoint into an exporter endpoint referred to as instrumentation.
Is there any need for segmentation while working with Instrumentation? Yes, Segmentation needed for working with instrumentation.
Segmentation is an integral part of an application. Segmentation is required to do execution of code blocks such as external call, handling data store calls and handling any background calls. Segments are helpful in the execution of a complete transaction to perform segmentation for code blocks and functions such as external calls, call to data store/ database, background tasks, etc. also highlights the amount of time taken by the function under execution.
How we can say instrumentation is different from a segmentation?
There is only a difference of small intent when working with segmentation as well as Instrumentation. When we work with instrumentation, then in that case endpoints are used. Mainly segmentation work with small part of the code, along with this instrumentation work on endpoint basis.
Node Exporter and Scrapping
Node exporter is required to work with metrics. Without using Node, exporters cannot do monitoring for our application endpoints. It mainly helps in exposing a wide variety of hardware and kernel related metrics.
Node exporter provides guidance in the following things –
- Start up a Node Exporter on localhost.
- Start up a Prometheus instance on localhost that's configured to scrape metrics from the running Node Exporter.
- What changes required to make in a .yml file to make relative to node exporter
Prometheus.yml file which is used in the repo or considered an example –
# my global config global: scrape_interval: 100s # Set the scrape interval to every 15 seconds. The default is every 1 minute. evaluation_interval: 100s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout set to the global default (10s). - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node-exporter-go' static_configs: - targets: ['localhost:9000'] - job_name: 'test' static_configs: - targets: ['localhost:9000'] # Alertmanager configuration #canbe set depending upon requirement
Different metrics for monitoring performance of the application
There are a couple of parameters are available that helps in performance monitoring. Performance of application checked on various metrics. The metrics used for Performance Monitoring explained as follows –
- Histogram and summary
It is a representation of results. Gauge generally goes up and down to represent a current state of the application. It can be either representing a CPU Load or the megabytes of memory which is currently used by the application.
The counter counts the different parameters concerning the application used to make count for other items like in our daily use. The only difference is that here this is going to be applied to the application. It is helpful in making count for different applications like as follows –
- the number of events processed by the application
- the number of emails sent out
- the number of errors in your log
- the number of logins
- the number of handled HTTP requests
Histogram and Summary Overview
Apart from giving information regarding counters for events. It is capable of tracking –
- Request duration
- Response Sizes
But on the other way, In Histograms, events are collected into buckets, that helps to monitor service level agreements (SLA). These metrics also make use of counters as described above, that helps to calculate average values such as calculating the performance of our application in the last x /specific minutes.
How does Performance Monitoring Work?
Architecture to do Performance Monitoring using a Prometheus database –
Prometheus has a main database named referred to as Prometheus Server.
While considering it as a monitoring service, it can monitor anything such as monitoring of Linux server, motoring of a stand-alone server, monitoring of Apache server, a single process, a database service or can be for some other system units monitored.
While considering a Prometheus terms monitoring service referred as a Prometheus server and the things to which Prometheus makes monitoring called as targets.
On the other hand, it can make monitoring for a single endpoint as well for multiple endpoints. The types of endpoints at which it can make monitoring explained below –
- ICMP (Black-Box Exporter)
- Simple HTTP endpoint
Workflow for implemented demo
The different steps required to build a demo expressed as follows –
- Instrumentation of code for API Endpoints
- Node Exporters and scrapping
- Collecting results for metrics on behalf on instrumented metrics through use of Prometheus server.
- Visualization using Grafana monitoring and visualization tool.
- The most important thing here is to build a query which helps in monitoring for different metrics.
Data storage at a remote location while using Prometheus Database
Prometheus also provides support to store data at remote locations. Ways to store data explained as follows –
Prometheus has a feature to write samples or data that it ingests to a remote URL in a standardized format. Prometheus also can read (back) sample data from a remote URL in a standardized format.
- Step 1 – Instrumentation
- Step 2 – Node exporter settings
- Step 3 – Monitoring for metrics using node exporters
- Step 4 – Integration of Prometheus monitoring with Grafana dashboard
In the same way, as like Prometheus's dashboard, Grafana dashboard can be easily accessible. To access a Grafana dashboard enter a URL in a search address after that dashboard will be accessible in the following format. Then click on a database sources tab which is visible at a dashboard while doing a visualization using this dashboard.
Now go to an Add new tab which is visible at a dashboard to select a new source. Now hitting an "Add New " tab will open the following dashboard. In this dashboard fill the required details by a data source from where you want to select a data and then make a visualization using this dashboard. Now after selecting a data source, a data source chosen will appear in an available data source list. After that Grafana dashboard visible. Whenever a dashboard accessible then from here different type of queries can be executed more dynamically.
Best Performance Monitoring Tools
- Prometheus Time-Series database – This Time-Series database stores all the metrics obtained after hitting a specific endpoint. It helps to store information like how much amount of memory it is taking and how much amount of CPU resource it is utilizing and how much amount of memory it is utilizing after a specific endpoint.
- Grafana Monitoring Dashboard – It helps to make visualization of data in a graphical format stored in a Prometheus Time-series Database to visualize results in the form of a graph.