Introduction
I don’t know why me write & post this is article, maybe because I’m motivated learning about monitoring tools like a Grafana & prometheus. Okay and now I will explain to you about best pratical How To monitor basic metrics from NGINX with Prometheus and Grafana, for your apps , maybe this is basic implementation but not bad for first learning.
First i will explain topology or concept how nginx exporter working to prometheus on this picture

Preparation : I recomended for you read my previous article that explains installation grafana & prometheus in the following link https://igunawan.com/how-to-monitor-mysql-deployments-with-prometheus-grafana-at-mysql-overview/
Actually this configuration is very simple, by activating the sub status module in nginx , and I look refrence for here http://nginx.org/en/docs/http/ngx_http_stub_status_module.html
There are several configuration steps below:
Step Installation 1 – Install & Enable configure stub status Nginx
Example configuration below, this will create a HTTP server on port 9113 only available from localhost and configuration in nginx.conf
server {
listen localhost:9113;
location /metrics {
stub_status on;
}
}
Make sure to restart the NGINX service
service nginx restart
and This is what the /metrics endpoint will look like
curl http://your_ip:9113/metrics
Active connections: 2 server accepts handled requests 1468 1468 7418 Reading: 0 Writing: 1 Waiting: 1
Step Installation 2 – Install nginx prometheus exporter & configure
Import exporter nginx from github and running several syntax on below
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.7.0/nginx-prometheus-exporter-0.7.0-linux-amd64.tar.gz
Extract file exporter
tar -xf nginx-prometheus-exporter-0.7.0-linux-amd64.tar.gz
Move file to usr/local/bin and create user for nginx exporter
mv nginx-prometheus-exporter /usr/local/bin/
user add -r nginx_exporter
And then Create Systemd Service File configruation for bridge to data source prometheus
nano /etc/systemd/system/nginx_prometheus_exporter.service
[Unit]
Description=NGINX Prometheus Exporter
After=network.target
[Service]
Type=simple
User=nginx_exporter
Group=nginx_exporter
Type=simple
ExecStart=/usr/local/bin/nginx-prometheus-exporter \
-web.listen-address=0.0.0.0:9113 \
-nginx.scrape-uri http://IP_hostnginx:9113/metrics
SyslogIdentifier=nginx_prometheus_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Activate service nginx exporter with following syntax :
systemctl daemon-reload systemctl restart nginx_prometheus_exporter systemctl status nginx_prometheus_exporter
Testing with curl http://ip_nginx:9113/metrics
Step Installation 3 – Add endpoint nginx & create display on grafana
- Now just tell prometheus to scrape the exporter, add jobs on
prometheus.yml
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
alias: prometheus
- job_name: server_nginx
scrape_interval: 5s
static_configs:
- targets: ['0.0.0.0:9113']
labels:
alias: nginx_server
Then restart service prometheus and check on the dashboard target promtheus status up for server_nginx
systemctl restart prometheus systemctl status prometheus

2. Add display dashboard for Nginx overview
This is an example of a grafana dashboard taken from Nginx using “nginx overview” , for a dashboard/template you can import it from the official grafana documentation https://grafana.com/grafana/dashboards/9516-nginx-general-overview/

This display is simple, but quite informative, because it provides information on the status of the nginx service up/down, active connection, connection process rate and total request.
Thanks

Admin website igunawan.com, System Administrator, DevOps Engineer