Monitoring NGINX is crucial for ensuring the performance, reliability, and security of your web server. This section will cover various tools and techniques to monitor NGINX effectively.
Key Concepts
- Access Logs: Record all requests processed by NGINX.
- Error Logs: Capture errors encountered by NGINX.
- Stub Status Module: Provides basic status information about NGINX.
- Third-Party Monitoring Tools: Tools like Prometheus, Grafana, and Datadog for advanced monitoring.
Access Logs
Access logs provide detailed information about every request processed by NGINX. This includes the client IP, request method, URI, response status, and more.
Configuration
To enable access logging, add the following directive to your NGINX configuration file (nginx.conf
):
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; }
Explanation
log_format main ...
: Defines a custom log format namedmain
.access_log /var/log/nginx/access.log main;
: Specifies the log file and format.
Error Logs
Error logs capture any issues encountered by NGINX, such as configuration errors, server errors, and more.
Configuration
To configure error logging, use the following directive in your nginx.conf
:
Explanation
error_log /var/log/nginx/error.log warn;
: Specifies the log file and the logging level (debug
,info
,notice
,warn
,error
,crit
,alert
,emerg
).
Stub Status Module
The Stub Status module provides basic status information about NGINX, such as active connections, requests per second, and more.
Configuration
To enable the Stub Status module, add the following location block to your nginx.conf
:
server { location /nginx_status { stub_status; allow 127.0.0.1; # Allow access from localhost deny all; # Deny access from all other IPs } }
Explanation
location /nginx_status { ... }
: Defines a location block for the status page.stub_status;
: Enables the Stub Status module.allow 127.0.0.1;
: Allows access from localhost.deny all;
: Denies access from all other IPs.
Accessing the Status Page
You can access the status page by navigating to http://your_server_ip/nginx_status
.
Third-Party Monitoring Tools
For advanced monitoring, you can integrate NGINX with third-party tools like Prometheus, Grafana, and Datadog.
Prometheus and Grafana
Prometheus is an open-source monitoring and alerting toolkit, and Grafana is a visualization tool. Together, they provide a powerful monitoring solution.
Configuration
-
Install the NGINX Exporter: The NGINX Exporter exposes NGINX metrics in a format that Prometheus can scrape.
docker run -d -p 9113:9113 nginx/nginx-prometheus-exporter:latest -nginx.scrape_uri=http://localhost:8080/nginx_status
-
Configure Prometheus: Add the NGINX Exporter as a scrape target in your
prometheus.yml
:scrape_configs: - job_name: 'nginx' static_configs: - targets: ['localhost:9113']
-
Visualize with Grafana: Add Prometheus as a data source in Grafana and create dashboards to visualize NGINX metrics.
Datadog
Datadog is a cloud-based monitoring and analytics platform.
Configuration
-
Install the Datadog Agent: Follow the installation instructions for your operating system from the Datadog documentation.
-
Enable the NGINX Integration: Edit the
nginx.d/conf.yaml
file to enable the NGINX integration:init_config: instances: - nginx_status_url: http://localhost/nginx_status tags: - env:production
-
Restart the Datadog Agent:
sudo systemctl restart datadog-agent
Practical Exercise
Exercise: Enable and Access the Stub Status Module
- Objective: Enable the Stub Status module and access the status page.
- Steps:
- Add the location block for the Stub Status module to your
nginx.conf
. - Reload the NGINX configuration.
- Access the status page from your browser.
- Add the location block for the Stub Status module to your
Solution
-
Add the Location Block:
server { location /nginx_status { stub_status; allow 127.0.0.1; deny all; } }
-
Reload NGINX:
sudo nginx -s reload
-
Access the Status Page: Navigate to
http://localhost/nginx_status
.
Summary
In this section, we covered the basics of monitoring NGINX using access logs, error logs, the Stub Status module, and third-party tools like Prometheus, Grafana, and Datadog. Monitoring is essential for maintaining the health and performance of your NGINX server. In the next section, we will explore common issues and their solutions.