Skip to main content

NGINX Web Server Monitoring with OpenTelemetry

Overview​

This guide will walk you through collecting rich telemetry data from your nginx server using nginx-module-otel module and we'll use prometheus nginx exporter to collect metrics.

Prerequisties​

  • NGINX Server installed.

Collecting metrics​

Step 1: expose stub_status metrics from nginx​

In your Nginx config add the following config

server {
listen 80;
server_name localhost;

location /status {
stub_status;
allow 127.0.0.1;
deny all;
}
}

Step 2: Run the nginx prometheus exporter using docker​

docker run --network=host nginx/nginx-prometheus-exporter:1.4.2 \
--nginx.scrape-uri=http://localhost/status

Step 3: Add the following receiver in your Scout collect​

prometheus/nginx:
config:
scrape_configs:
- job_name: nginx
scrape_interval: 5s
metrics_path: /metrics
static_configs:
- targets: ["0.0.0.0:9113"]

Note: Make sure you use in the pipelines as well.

Great work, Now the metrics are scraped from the nginx

Collecting traces​

Step 1: Add the nginx repositoring​

Install the prerequisites:

sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring

Import an official nginx signing key so apt could verify the packages authenticity. Fetch the key:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Verify that the downloaded file contains the proper key:

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

To set up the apt repository for stable nginx packages, run the following command:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Step 2: Installing Otel module for nginx​

sudo yum install nginx-module-otel
warning

Take a backup of your nginx config before installing the module.
It might be overwritten by the module installation.

Step 3: Configure nginx to send traces​

Add the following configs in your nginx.conf file:

load_module modules/ngx_otel_module.so;

http {
otel_exporter {
endpoint 0.0.0.0:4317;
}
otel_service_name nginx;
otel_resource_attr environment <deployment-environment>;
otel_trace on;
otel_trace_context inject;
}

Note: replace otel_service_name and otel_resource_attr with actual values.

Now the traces will be sent to the Scout Collector.

Collecting logs​

Step 1: Add the filelog receiver to collect the logs​

receivers:
filelog:
include:
- /var/log/nginx/*.log
start_at: beginning

Note: If you have configure log collection location to custom directory, update the include block with the correct path.

Great work. Now we have successfully implemented nginx with OpenTelemetry instrumentation