Monitoring Nginx Connections

24 / Apr / 2015 by Vikash Jha 0 comments

The Nginx web server comes with a bundled module “HttpStubStatusModule”. By enabling this module we will get some insight of our nginx connections. This module provides the following information.

Active Connections

Connection Status (Accepted / Handled)

Connection Request / Second

Enable Module
To get connection stats, we need to enable the status module on nginx VirtualHost file by adding below localtion block.

location /nginx_status {
        # Turn on stats
        stub_status on;
        allow 127.0.0.1;
        deny all;
}

Replace 127.0.0.1 with the IP from which you wants to access /nginx_status
$ sudo service nginx reload 
$ curl localhost/nginx_status 
Active connections: 32 
server accepts handled requests
48932 48932 2594381 
Reading: 0 Writing: 2 Waiting: 30

Let’s break down the above parts.

1. Active Connections (Number of Active Connection):

This will give all open connections. This doesn’t mean number of users on site.

2. Server accepts handled requests:

We have three values for this.

First Column: 48392 ( Total Accepted Connection by Web Server )
Second Column: 48932 ( Total Connections handled by Web Server )
Third Column : 2594381 ( Number of handled requests )

If we divide third column by second column, we’ll get the number of requests / second

Hence,

Number of Requests/Second = 2595381 / 48392 = 53.63

requests is being served per second by nginx.

You can also use the below script and execute it as a cron and check Connection Status on a timely basis.


#!/bin/bash

numberOfActiveConnections=""
numberOfTotalAcceptedConnections=""
numberOfTotalhandledConnections=""

#Number of Requests / Second
numberOfRequestsPerSecond=""

nginxPath='nginx_status'

ApplicationURL=' List of IPAddress/DomainName separated by Space '

echo $ApplicationURL

for URL in ${ApplicationURL[@]};do
    
    
    file="$URL"
    echo "Getting Nginx Status Page of $URL"
    
    curl -s $URL/$nginxPath -o $file
    
    numberOfActiveConnections=$(cat $file  | awk '/Active /' | awk '{print $3}')
    echo "$file : Active Connection $numberOfActiveConnections"
    
    
    numberOfTotalAcceptedConnections=$(cat $file | grep -A 1 server | tail -1 | awk '{print $1}')
    echo "$file : Total Accepted Connection $numberOfTotalAcceptedConnections"
    
    numberOfTotalhandledConnections=$(cat $file | grep -A 1 server | tail -1 | awk '{print $2}')
    echo "$file : Total Handled Connection $numberOfTotalhandledConnections"
    
    echo "Number of Accepted and Handle remains same most of the time."
    totalRequests=$(cat $file | grep -A 1 server | tail -1 | awk '{print $3}')
    
    numberOfRequestsPerSecond=$(echo 'scale=2;'$totalRequests/$numberOfTotalAcceptedConnections | bc -l)
    echo "Currently Server is serving $numberOfRequestsPerSecond / second."
    
    echo "---------------------------------------------------------------------------------------------------------------"
    
done

Output will be like:

Getting Nginx Status Page of Application URL
Application URL : Active Connection 39
Application URL : Total Accepted Connection 62032
Application URL : Total Handled Connection 59739
Number of Accepted and Handle remains same most of the time.
Currently Server is serving 43.02 / second.

Leave a comment if you have any questions regarding this article.

FOUND THIS USEFUL? SHARE IT

Leave a comment -